前言
最近在和同学做一个Go项目,需要写一个微型监控系统。通过GitHub协同写代码,创建仓库的同学邀请我成为了Collaborator,但我不太会用,在网上找的指南都不太符合我的需求,各种各样的原因不能成功把我写的代码更新到仓库里面。最后,我在Jonathan Mines上面找到了一篇文章,讲解的很详细,终于成功了,因而我也想翻译一下分享到CSDN上。
这只是众多在GitHub上多人协作同一项目的方法之一,但如果你才刚刚开始团队合作还没有创建过一个git flow或者说还不知道怎么创建一个git flow,我强烈推荐这一方法。
第一步:初始化一个新的项目(project)
通过命令行(打开终端),创建一个新的project/directory 。
$ rails new github_guide # github_guide是你创建的项目名称,可以改成其他名称
进入Github点击右上角的‘+’键选择’New Repository’。
接着填写仓库的名字以及描述栏。勾选public,不要勾选"Initialize this repository with a README"。不要再作其他变动。点击"Create repository"。
接下来,你会看到创建页。这里是一些关于如何将你在终端(本地)创建的目录(也就是第一步使用rails命令创建的github_guide项目文件夹)与你刚刚在Github(远程)上创建的Repo(名字也是github_guide)连接起来。
在终端使用cd
命令进入本地的github_guide
项目文件夹,将红框里从“echo …”开始的命令行粘贴到终端执行。之后,你的终端应该会显示:
这会在你的本地仓库中增加一个.git
文件夹,将你与你的远程Github Repo连接在一起同时也会在远程仓库里面增加一个.gitignore
文件。
如果你进入你的Github仓库页中,你会看到初始化了的ReadMe以及你添加的第一条评论。
现在,要让这个远程仓库更新到最新。回到你的终端使用git add
,git commit
,然后git push
。
$ git add .
$ git commit -m "Second commit"
$ git push
现在检查你的远程仓库,一个能看到所有你在本地仓库创建的文件、文件夹还有一条新的评论id(9c2e2f6):
这样就完成了初始化,准备开始工作!
第二步:创建你的团队
你是一个团队工作者,所以你要将你的团队添加进你的GitHub仓库里,这样他们可以协同贡献代码到项目里。一旦你添加一个人进项目作为Collaborators,他们就可以push、merge代码以及许多其他创建性的行为,所以你要确定你只添加了你真正的队友。
进入你所创建的GitHub远程仓库的详情页,点击Settings
,接着点击Collaborators
然后寻找GitHub用户通过点击Add Collaborator
将你想要的人添加进项目。
他们会收到邀请邮件得知你将他们添加进了项目作为collaborator。
如果你是一名collaborator,来到Github你参与协同工作项目的仓库页面,Git Clone这个项目,然后使用cd
命令进入目录。不要fork它! Forking会复制该项目到你自己的Github仓库页,但是你不需要这一结果–你想要的是和你的队友一同在同一项目上进行协作代码。
$ git clone git@github.com:MinesJA/github_guide.git
$ cd github_guide/
这样,你就准备好进行collaborate了!
第三步:Collaborating
当你使用git
与其他众多人在同一项目上工作的时候,有一条中心法则你需要谨记:
MASTER分支应该时刻处于可部署的状态。
保持Master分支处于可部署状态的方法之一是为新的功能创建新的分支然后在完成时将这些新分支与Master分支合并。接下来是解释这一切是如何工作的。
1. 分支
首先,分支总是代表着功能。比如说如果你想增加一个用户登录的功能,你应该创建一个名为user_authentication
的分支,在这个分支里面你应当只更新那些能保证用户登录的代码。
同时,在你与团队分工的时候,保证你们实现的功能没有重复的部分也是非常重要的。比如说,你在user_login
分支里面工作的时候,在此时,你的队友不应该在user_logout
分支里面工作。因为你们有很大概率在同一时间在相同的文件夹里面写着重复的代码。
总结一下,如果你想创建用户模型,在你的终端里面一个新的分支:
$ git checkout -b create_user
co
可以作为checkout
的缩写,这一参数是用于在不同分支之间进行切换。-b
参数放在末尾适用于增加一个新的分支同时进入该新分支。
你可以通过下面这条命令检验你所在的分支:
$ git branch
这条命令会产生下面的结果:
你现在正处于新分支之中并且可以开始敲代码。
小记:通常来说,当你完成某一部分之后你应该频繁的使用
git add
以及git commit
使得你的代码可以运作(一个小时多次)。比如说,当你写完一个方法的时候可以在终端git commit
如下:
$ git commit -m "Added function to allow Users to say 'Hello World'
2. 提交Pull Requsts
你的团队花了整天整夜的时间在不同分支上敲好了实现不同功能的代码。接下来就应该开始将完成的不同功能的代码进行merge进入Master分支被部署好。
决定你们的Git Flow对于整个团队工作来说是非常重要的一部分,这里有一个Git Flow你们可以采用:
- 首先,决定谁来负责处理合并(merge)代码这一部分。越少的人独立处理合并代码的部分,那么对于一个4人团队来说拥有一个公认的Reviewer或者说Merge Master就更好。
- 接下来,每一个都使用
git push
命令push他们各自的分支。$ git push
注意:这里可能会产生问题,如果你在终端输入git push
命令后看到
这是提示你当前的分支没有上流分支,执行它提示的命令:
git push --set-upstream origin alert_manager
(origin指的是远程仓库,alert_manager则是你的分支名,这里是将你的远程仓库作为你的分支的上流进行连接,这样可以将你的分支上传到远程仓库。) - 接下来,进入到github项目仓库界面。你应该会在一个黄框里面看到你刚刚
push
上的分支,还伴随有一个按钮Compare & pull request
。
小记:可替代的,你也可以在
Branch:
菜单栏里面选择你刚刚push的分支。你也会在右手边看到Pull request
和Compare
按钮。
5. 点击Compare & pull request
,这会将你带到Open a pull request
页面。从这里开始,你可以写一些简短的说明介绍你刚刚改变了什么。接下来你可以点击Reviewers
选择你们团队中的成员决定谁会成为Mere Master
。当你做完这一切之后,点击Create pull request
。
3. 合并Pull Requests
记住如果你是一名collaborator,你可以合并你本人的pull requests。但是,如果你在团队里面工作,你们选择一个人来负责合并而其他人提交Pull Requests
以及指定Master Merger
来确保你们同一时间只在处理一个分支上的冲突。
所以,假定你是那一个负责处理所有合并并且某一个人在一次pull request
将你指定为了Reviewer
,当你登录上GitHub时你会看到你收到了一项通知告知你某人将你指定为了reviewer
。你会看到一个黄条提示你的某一个队友requested your review on this pull request
。
点击Add your review
按钮。
这一操作将会将你带到Pull Request
页面。你如何处理取决于你以及你的团队。如果你们共同合作我建议选择每天的早晨处理前一天的pull requests
。如果你选择那样做,那么你们就可以避免长长弯弯、过于繁琐的Review Summaries
。
然后,如果你们是远程工作的话且你本人是merge的主要负责人的话,这将成为你让pull request
请求者知道何处需要修改的主要工具。
当你点击Submit review
按钮后,你的评论将会在该pull request
线中出现。
当你对该pull request
满意后,去到该页面的底部点击Merge pull request
。
你将会看到Pull request successfully merged and closed
信息并且还会有一个Delete branch
按钮,你应当点击它。
第四步:清洗、重复
就是这么多啦!记住为不同的功能添加新的分支以及团队共同合并每个分支到Master
分支。保持Master
分支干净以及可部署以及不要在同一时间合并多个分支,做到这些就问题不大了!
下面的链接是用来做展示的repo,本文的text将添加到该仓库的ReadMe中。如果你有想要添加的内容或者你想测试一下我们刚刚讲解的pull request技巧都请尽情发起pull request。
https://github.com/MinesJA/github_guide