在讨论Github如何实现Team collaboration之前,branch概念需要单独被介绍。
Git将项目设想成树,每一个子任务设想成branch,树干是base branch(称为master)。学习The Net Ninja的教学视频
Git & GitHub Tutorial for Beginners #8 - Branches、 Git & GitHub Tutorial for Beginners #9 - Merging Branches (& conflicts) 和 Git & GitHub Tutorial for Beginners #11 - Collaborating on GitHub branch示意图如下:
Team work的示意图如下:
在Team work的上下文中,Branch示意图如下:
举个例子,一个网站的代码,有的人要完成这个网页,有的人要完成那个网页。那么,问题是如何用git command创建branch,又如何merge到master,另外惯常的文件增删改、staging、commit又如何实现。
教学视频有详尽的举例。本文的目标是直觉地介绍team如何通过各个branch实现collaboration。
每个team member 首先将整个repo从Github pull到本地。
git pull origin master
本地新建一个branch,例如图中branch-1的名字是index-html,同时切换到该branch下工作。
git checkout -b index-html
修改index.html文件后,本地staging,commit
git add .a git commit -m "added index html"
将这个branch push到remote repository。不要在本地master merge branch,因为project manager可能需要检查这个修改合不合适,所以team member只上传branch的修改,由远端master merge。
git push origin index-html
教学视频中还介绍了如何删除branch。
一个人也可以本地merge branch,让人清晰地看到merge conflicts:如果有两个team member修改了同一个file,这样就产生conflict,merge会失败,需要人工重新修改。
从collaboration的角度,以下介绍team member如何在Github提交merger request以及manager如何实现merge。
team member push branch后,Github网页上有Compare & pull request绿色按钮,点击后可以填写comment,这是很好的实践,告诉manager代码主要的修改是什么,最后点击Create pull request绿色按钮,就是请manager merge此项修改。
其他reviewer可以查看,并可以逐行代码地写comment。
(我非常惭愧,我过去不知道如何对open source comment,抱怨Github不提供comment功能,事实是Github提供细到逐行代码的comment功能。我不了解情况张口就抱怨。)
如果manager满意,点击Merge pull request。
贡献者可以点击Delete branch,因为已经被merged,也可以留着。
相关: