首页 > 代码库 > git@osc中协作开发、复制项目、贡献代码

git@osc中协作开发、复制项目、贡献代码

git@osc可以让我们托管代码,进行版本控制,同svn等类似平台一样,可以帮助我们实现团队协作开发,无论你是否是项目团队成员。本教程完全适用GitHub

1. 概念

协作开发:顾名思义,就是由多个项目成员共同开发一个项目。

fork:GitHub提供非常方便功能,可以一键将其他人的项目复制到自己账号下。

pull request:非项目成员贡献代码一种方式。

2. git@osc如何协作开发

由项目创建者进入指定项目,在菜单栏上点击“设置”,会看到如下界面

技术分享

然后点击“添加成员”

技术分享

在用户栏中,输入成员名称,这块我总觉得有点诡异,下午同事刚刚注册了一个git账号,然后我在此处尝试了各种办法怎么也搜索不到指定用户,大概过了能有2个小时后,有神奇般的能搜索到了,我怀疑git@osc后台做处理了?或者账号注册后有生效时间?不管怎么样,在这块输入要找的用户名即可,比如:我要添加一位叫“杨小杨”的同学,输入“杨小杨”是找不到的,但输入他的账号邮箱“yangshuangjun”就可以找到,截止到目前,我还是没有摸清这个搜索用户的路数。

找到成员后,分配角色,一个是管理员、一个是开发者

这两个角色的区别详见这里:http://git.oschina.net/oschina/git-osc/wikis/%E5%B8%AE%E5%8A%A9

ok后,点击添加用户即可

随后,这个项目成员通过egit客户端直接clone项目,修改并提交代码,实现协作开发。

3. git@osc的fork功能

什么情况下使用fork?

当你对某个公开的开源项目感兴趣,你可以通过fork功能方便地将该项目复制到你的账号下,以便学习或者贡献代码。

首先找到你想要的项目,比如:

技术分享

点击上图右上角的Fork按钮,确认后,该项目就会跑到你的名下了。意思是你对该项目做了一个分叉,相当于OO里边的继承。

此时,利用egit将该项目import至eclipse工程中,然后你可以修改代码,然后commit and push来更新,就像你自己的项目一样。


4. git@pull request功能

什么时候使用pull reques呢?

使用pull request前提条件是你fork他人代码,并进行了修改。当你修改代码并commit后,只能push到你账号下的该项目,原项目并不会得到任何改变。此时,如果你想把你的代码贡献到原项目中,那么,此时就需要使用pull request操作了。

见下图:点击这里来创建一个pull request

技术分享

点击后,见下图:

技术分享

此处无非就是将你提交(贡献)的代码做一下详细的说明,让原作者充分了解你此次提交的目的。

编写完毕后,点击“提交 pull request”即可,截止到目前,你已经做完了pull request的创建工作;

此时,原项目就会收到一个pull request的申请,在这里会有显示

技术分享

由于我这里没有实际的请求,所以显示的是0,如果有的话,点击pull requests

然后就会在界面上显示详细信息,包括:pull request的标题、详细描述以及详细的代码。

在该界面上,管理员可以选择“接受pull request”,如果选择 接受 的话,那么你所提交的代码将会自动合并到原项目中,也就完成了你的贡献。

5. fork后同步原作者修改

当你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

git@osc中协作开发、复制项目、贡献代码