转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52913603 文章出自:薛瑄的博客
你也可以查看我的其他同类文章,也会让你有一定的收货
GitHub 多人协作开发 三种方式:
转载:https://gist.github.com/belm/6989341
一、Fork 方式 网上介绍比较多的方式(比较大型的开源项目,比如cocos2d-x)
开发者 fork 自己生成一个独立的分支,跟主分支完全独立,pull代码后,项目维护者可根据代码质量决定是否merge代码
此方式网上方法比较多,这里不详细描述
有两种常用的方法在GitHub上建立团队合作:
二、组织
组织的所有者可以针对不同的代码仓库建立不同访问权限的团队。
Accounts Settings => Organizations =>Create new Organizations 新建一个组织 然后添加项目成员,根据提示设置完毕即可。
新建一个Repository 新建完毕后 进入Repository的Settings =>Collaborators 在Teams下面点击刚创建的组织 比如eveloper-51/owners
里面就可以添加或者remove组织成员
三、合作者 –
代码仓库的所有者可以为单个仓库增加具备只读或者读写权限的协作者。
合作者方式比较实用,也很方便,新建一个Repository,完毕之后,进入Repository的Settings,然后在Manage Collaborators里就可以管理合作者了。
其他合作者,实用 ssh-keygen -C “YourEmail@example.com” (这里的email使用github账号)生成公钥和私钥,在Accounts Settings=》SSH keys 将公钥上传上去。
上传完成后,可使用Tower(Mac下Git管理工具)clone remote Repository 使用SSH方式登录(这里的私钥使用刚才生成的) 这样,其他合作者就可以正常的PUSH代码了。
多人开发的 Git 流程
转载:http://www.cnblogs.com/LvLoveYuForever/p/5525100.html
多人协作时,大家都克隆项目到本地git clone https://github.com/LvLoveYuForever/gitskill.git
,大家都会往master和dev分支上推送各自的修改,默认情况下只能看到本地的master分支,可以用git branch命令看看:
LV@LV-PC MINGW32 /c/gitskill (master)
$ git branch
* master
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且你的远程仓库的默认名称是origin
查看远程库的信息,用git remote
LV@LV-PC MINGW32 /c/gitskill (dev)
$ git remote
origin
或者,用git remote -v 查看更详细的信息:
LV@LV-PC MINGW32 /c/gitskill (dev)
$ git remote -v
origin https://github.com/LvLoveYuForever/gitskill.git (fetch)
origin https://github.com/LvLoveYuForever/gitskill.git (push)
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址
2 、推送分支
就是把该分支上的所有本地提交推送到远程库,推送时,要指定本地分支与远程分支的对应关系,这样,Git就会把该分支推送到远程库对应的远程分支上:
LV@LV-PC MINGW32 /c/gitskill (dev)
$ git push origin master
Username for 'https://github.com': lvloveyuforever@gmail.com
Password for 'https://lvloveyuforever@gmail.com@github.com':
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 406 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To https://github.com/LvLoveYuForever/gitskill.git
8e64728..dbfc0ee master -> master
如果要推送其它的分支,比如dev,就改成:
LV@LV-PC MINGW32 /c/gitskill (dev)
$ git push origin dev
Username for 'https://github.com': lvloveyuforever@gmail.com
Password for 'https://lvloveyuforever@gmail.com@github.com':
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/LvLoveYuForever/gitskill.git
* [new branch] dev -> dev
总之,在Git中,分支完全可以在本地自己藏着玩,是否推送,看你的心情而定了
3、抓取分支:
现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,代码命令:
$ git checkout -b dev origin/dev
他就可以在dev上继续修改,然后,把修改的内容push到远程origin的dev分支
$ git push origin dev
你的小伙伴已经向origin/dev分支上推送了他的提交,而碰巧你也对文件做了修改,并试图推送
这样会推送失败,因为你试图提交的跟你小伙伴推送的提交有冲突,解决办法很简单。
Git提示告诉我们,先用git pull把最新的提交从origin/dev上抓下来,然后在本地合并,解决冲突后,再推送:
$ git pull
如果 git pull失败了,原因是没有指定本地的dev和远程origin/dev上的链接
$ git branch --set-upstream dev origin/dev
再pull
$ git pull
这样git pull是成功的,但是合并出现冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样,解决后,提交,再push.
哪些分支需要推送到远程仓库呢?
- master分支是主分支,因此时刻与远程同步;
- dev分支是开发分支,团队的所有成员需要在上面工作,所以也需要与远程同步;
- bug分支只用于本地修复bug用的,就没有必要推送到远程了,除非你的老板要看看你每周到底修复了几个bug;
- feature分支是否推送到远程,取决你是否和小伙伴们在上面开发;
小结:
多人协作的工作过程是这样的:
- 试图用git push origin branch-name推送分支到远程仓库;
- 如果推送失败,则因为远程分支比你本地的更新,需要先用git pull试图拉取并合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功。
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch –set-upsream branch-name origin/branch-name