Wednesday, January 27, 2016

花20分钟写的-大白话讲解如何给github上项目贡献代码



花20分钟写的-大白话讲解如何给github上项目贡献代码
2013-03-30 22:53:55
本文献给对git很迷茫的新手,注意是新手,但至少会点基本操作,有点基本概念的新手,我不会从怎么用github和git是什么开始讲的。如果作为新手你看书又看不进去,原理又太复杂,有没有直接了当告诉我们怎么给项目贡献代码,并和项目同步代码的大体流程。于是我快速写了这么个东西。一来整理下自己混乱的思路,二来想号召大家一起用git开发点东西,可是好几个同鞋只会寂寞的给自己push。

我先说下 我之前对github操作的一些迷茫历程,然后之后是怎么解惑的。

1. 最最开始,我以为git clone [项目地址],也就是把代码clone下来 然后修改,然后push到项目里就可以了。
后来发现,这种情况只适合该项目属于你自己的情况,如果你git clone别人的项目代码,你想push都push不上去,因为 git push 不是需要你输入github帐号密码么。

2. 然后 我就知道了 github上 不是有个fork么, 好,那么给别人的项目提交代码的方式就有了,先fork下别人的代码,于是你的github上就出现了同名的项目,这个项目就属于你自己了,你把这个自己的项目git clone到本地,修修改改,然后push到你自己的项目里,那么你如何把你对自己项目的改动,给发到之前fork的那个原项目呢,看见了没,在github上你的项目页面有个按钮,叫Pull request,对 你点它就会把你的修改发到对方的项目里,人还会收到邮件呢,由原项目主人决定是否接受你的修改。
但是,这样问题就出来了,在你fork他的项目之后,如果他又更新了代码,你自己fork的项目怎么做到和原项目同步呢? 
我就想啊,是不是 我还得重新git clone原项目的代码,然后手动合并到我fork的项目里呢。。。
梁老师说,你丫这太蛋疼了,肯定不是这么麻烦,我细想,也是啊,这不2么。。。

3,然后,从《Pro git》上看到一个知识点,我擦,github居然可以给项目添加合作者,也就是说,假如你,对,说你呢,戴眼镜那个,你想参与我的项目,你跟我说一声,我就把你添加到我的项目里作为合作者,这个选项在项目的设置里面有,只要我添加你了,你就可以git clone我的代码然后修修改改,然后直接push上来就行了,就不用fork那么麻烦了,如果你要更新服务器代码,只要git pull就行了,看 合作者这东西多方便,就像我们在公司用svn似的。

4.然后我就想啊,有了合作者还需要你丫fork这个功能干啥?仔细一想,你写个好项目,不能随便加合作者啊,加了个熊孩子把你代码改废了可咋整,这年头熊孩子很多,我自己不就是一个么。所以fork肯定还是需要,fork就是专门预防熊孩子的,这就是真相!那么前面说道到fork之后如何与原项目同步的问题还在啊,没有得到解决。

5.于是《Pro git》再次给了我一个解答,具体流程是你啊想给我的项目做贡献,你先git clone我的代码到本地,然后修修改改,然后你不是不能push到我的项目里么,你可以先在github页面上fork我的项目,有了你自己的项目地址(url)之后呢,你在本地操作git remote add [sort name] [your url],意思就是添加第二个远程仓库地址,这个仓库的“昵称”就是你刚指定的[sort name],然后,你之后push文件呢 就通过指定这个[sort name]来push到这个你自己的仓库里。等你觉得想要把你改的发给原项目同步,就在你的项目上点Pull request按钮.说下另一种情况,如果是,原项目发生了改动,你要想同步到本地,就直接从git fetch origin 从原项目的地址同步代码,然后再merge就好了。当然,如《Pro git》上所写,你可以通过新建分支的方式往自己的项目上push,这样同步的时候直接fetch就行了。这块如果我没写明白或者你想知道怎么新建分支的方式push到自己的项目里,可以直接参考《Pro git》的“公开的小型项目”一节,那我的贡献就是指点你如何从这本书里快速的找到你想要的。= =。

好了,时间有限,我写的快不一定讲明白,欢迎跟我讨论。
感谢linus,感谢git,感谢github,感谢kindle,感谢《Pro git》,感谢梁老师,感谢我自己,感谢所有的熊孩子们。

Monday, January 4, 2016

[LeetCode] 1. Two Sum [Private]

Given an array of integers, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

Method 1: Hash Map.
Time: O(n)
Space: O(1)

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int len = nums.length;
        int[] res = new int[2];
        
        if(0 == len)
            return res;
            
        Map m= new HashMap();
        for(int i = 0; i < len; ++i){
            if(m.containsKey(target - nums[i])){
               res[0] = m.get(target - nums[i])+1;
               res[1] = i+1;
            }
             m.put(nums[i], i);
        }
        return res;
    }
}

Bad:
Keep all elements, then go through it again. Result in complicated condition for equal number judgement.
But might works better when the exact one condition is relax. 
public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int len = nums.length;
        int[] res = new int[2];
        
        if(0 == len)
            return res;
            
        Map m= new HashMap();
        for(int i = 0; i < len; ++i){
            if(m.containsKey(nums[i])){
                m.put(nums[i], m.get(nums[i])+1);
            }
            else{
                m.put(nums[i], 1);
            }
        }
        
        for(int i = 0; i < len; ++i){
            int x = nums[i];
            int y = target - x;
            if(x == y && m.get(x) < 2)
                continue;
            if(m.containsKey(y)){
                int index = 0;
                for(int j = 0; j < len; ++j){
                    if (nums[j] == x || nums[j] == y) res[index++] = j+1;
                    if(3 == index)
                        return res;
                }
            }
        }
        return res;
    }
}

Leetcode分类总结

LeetCode 题目总结/分类

马孔多 马孔多 2014-02-14 10:19:33

秋风狂扫
2014-08-21 07:26:03 秋风狂扫
牛逼,很实用!
tianzhaixing
2014-09-02 20:20:53 tianzhaixing
( ^_^ )不错嘛
那个骑士肉肉
2014-11-19 19:43:50 那个骑士肉肉 (一路遇见 一路失散)
:)以后可以发给别人参考一下了
阿恺
2014-11-19 22:18:49 阿恺 (努力的方向:可以依靠,值得信赖)
mark
橙子爱吃小葡萄
2014-12-08 09:43:12 橙子爱吃小葡萄 (Be Professional)
subsets类不应该是属于dfs吗?
马孔多
2014-12-08 10:57:41 马孔多 (Cedar 直待凌云始道高)
subsets类不应该是属于dfs吗? 橙子爱吃小葡萄
训训
2015-01-06 22:21:40 训训
mark
范范宽宽
2015-01-28 19:56:41 范范宽宽
mark
Universe
2015-03-24 08:58:25 Universe
mark
reking
2015-04-04 06:07:08 reking
mark 
cici920
2015-04-27 17:47:25 cici920 (different)
mark
2php
2015-10-20 20:16:55 2php
干货啊~~~~~
Seven
2015-10-29 10:48:26 Seven
对我这种英文水平捉急的人来说, 还是看中文的好点
http://tianmaying.com/tutorials/tag/Leetcode
milanlx17
2016-01-08 16:04:56 milanlx17 (take it easy)
mark

马孔多
马孔多 (北京)
Data Mining