本文献给对 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》,感谢梁老师,感谢我自己,感谢所有的熊孩子们。
原文地址:http://site.douban.com/196781/widget/notes/12161495/note/269163206/