git@osc可以让我们托管代码,进行版本控制,同svn等类似平台一样,可以帮助我们实现团队协作开发,无论你是否是项目团队成员。本教程完全适用GitHub
协作开发:顾名思义,就是由多个项目成员共同开发一个项目。
fork:GitHub提供非常方便功能,可以一键将其他人的项目复制到自己账号下。
pull request:非项目成员贡献代码一种方式。
由项目创建者进入指定项目,在菜单栏上点击“设置”,会看到如下界面
然后点击“添加成员”
在用户栏中,输入成员名称,这块我总觉得有点诡异,下午同事刚刚注册了一个git账号,然后我在此处尝试了各种办法怎么也搜索不到指定用户,大概过了能有2个小时后,有神奇般的能搜索到了,我怀疑git@osc后台做处理了?或者账号注册后有生效时间?不管怎么样,在这块输入要找的用户名即可,比如:我要添加一位叫“杨小杨”的同学,输入“杨小杨”是找不到的,但输入他的账号邮箱“yangshuangjun”就可以找到,截止到目前,我还是没有摸清这个搜索用户的路数。
找到成员后,分配角色,一个是管理员、一个是开发者
这两个角色的区别详见这里:http://git.oschina.net/oschina/git-osc/wikis/%E5%B8%AE%E5%8A%A9
ok后,点击添加用户即可
随后,这个项目成员通过egit客户端直接clone项目,修改并提交代码,实现协作开发。
什么情况下使用fork?
当你对某个公开的开源项目感兴趣,你可以通过fork功能方便地将该项目复制到你的账号下,以便学习或者贡献代码。
首先找到你想要的项目,比如:
点击上图右上角的Fork按钮,确认后,该项目就会跑到你的名下了。意思是你对该项目做了一个分叉,相当于OO里边的继承。
此时,利用egit将该项目import至eclipse工程中,然后你可以修改代码,然后commit and push来更新,就像你自己的项目一样。
什么时候使用pull reques呢?
使用pull request前提条件是你fork他人代码,并进行了修改。当你修改代码并commit后,只能push到你账号下的该项目,原项目并不会得到任何改变。此时,如果你想把你的代码贡献到原项目中,那么,此时就需要使用pull request操作了。
见下图:点击这里来创建一个pull request
点击后,见下图:
此处无非就是将你提交(贡献)的代码做一下详细的说明,让原作者充分了解你此次提交的目的。
编写完毕后,点击“提交 pull request”即可,截止到目前,你已经做完了pull request的创建工作;
此时,原项目就会收到一个pull request的申请,在这里会有显示
由于我这里没有实际的请求,所以显示的是0,如果有的话,点击pull requests
然后就会在界面上显示详细信息,包括:pull request的标题、详细描述以及详细的代码。
在该界面上,管理员可以选择“接受pull request”,如果选择 接受 的话,那么你所提交的代码将会自动合并到原项目中,也就完成了你的贡献。
当你fork一个项目后,如果原作者更新了代码,此后你的项目是肯定不会自动更新的。那如何让fork的项目与原项目同步呢?简单的方法当然是再clone一份,不过这样会丢失你对代码修改。
此时,你需要手工同步原项目。
首先进入到clone你fork的项目的本地库
为了与原项目同步,首先需要将原始项目fetch到本地。
git remote add origin https://github.com/xxx/xxx.git #别名origin,指向原始项目 git fetch origin master #fetch orginal下面的master分支
git fetch命令不会自动merge。
然后比较本地的master分支和origin/master分支的差别,然后决定是否进行合并。可使用merge命令进行合并。
git merge origin/master #将原项目和主项目合并
当然,我们也可以不用fetch命令,直接用pull命令,差别在于pull命令会自动merge
git pull origin master
get pull命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些。因为在merge前,我们可以查看更新情况,然后再决定是否合并。
合并后再使用git push命令提交。
第一次push的时候,可能会出现上述的permission denied错误提示,原因是你没有为你的项目添加一个public key。
接下来我们为本机添加一个。
复制id_rsa.pub里面的内容,进入项目主页,点击“Admin”按钮,选择“Deploy Key”,点击“Add deploy key”,将复制的内容粘在里面,如图:
添加完public key后,现在就可以push了。
使用git@osc可以有效帮助我们实现协作开发。团队成员可以通过授权直接提交代码,非团队成员可以fork他人的项目,可以使用pull request贡献代码,当fork的原始项目有更新时,也可以手动同步项目。
[1] 凯哥.git@osc中team开发、fork和pull request的用法.http://my.oschina.net/kzhou/blog/150290
[2] Gevin.github上fork别人项目后如何与源项目保持同步.http://gevin.me/370.html