欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  Github+Git团队开发使用讲解

开发工具 本站 1420 0评论

000-20161109103130_442.png

团队协作开发中,大部分都会用到版本控制软件,比如Git、Svn等。本文将通过一个实例,详细讲解在真实的工作环境中,一个团队应该如何利用Git+Github进行协作开发,即详解Git工作流程。并就其中比较棘手的问题作出解答,比如如何解决冲突比较合适,如何建立各种类型的分支等。


本文不会讲解Git简介、Git原理、Git基本用法等,有不了解的可以参考“ Git 参考手册 ”。

Github的基础教程:https://ittxx.cn/view/163    

Github的使用详解:https://ittxx.cn/view/164    


一、团队开发流程


1.创建组织


1)创建一个组织

登录GitHub后,点击右上角的+,New organization 创建一个组织。

111-10181122123607.jpg

输入团队名称(或者项目名称)和邮箱后,直接按create organization

继续可以邀请队员,这一步可以直接跳过,以后我们可以在下图这里继续邀请 

112-20181122125025.jpg

现在我们已经完成了组织的创建。


2)为组织创建一个repository

进入组织管理,点击下面按钮

113-20181122125538.jpg

然后输入仓库名称

113-120181122125650.jpg

可勾选初始化一个README,点击创建 

113-220181122125935.jpg


3)创建团队

在创建仓库后还可以添加团队和合作者

114-20181122130341.jpg

可以点击create new team创建团队或者选择已经创建的团队

115-20181122130522.png

把团队成员直接push的权限关掉,即设置成Read(默认的)。这样可以防止队友误操作,未经审核就把代码push到团队项目上。

115-120181122130955.jpg

创建仓库完准备工作完成

116-20181122131203.jpg


2.创建开发分支


master分支一般用来发布稳定版本,dev分支(开发分支)用来发布开发版本。

输入分支名称后,下面会跳出Create branch,点击即可创建。

分支创建完毕后,会自动跳转到dev分支。由于dev分支是从master分支上创建的,因此内容与master分支一致。

118-20181122133304.jpg


3.Fork项目到个人的仓库


点击右上角的Fork,并选择你的账号(一般在第一个)。就可以Fork团队项目到个人仓库啦。

119-20181122140352.jpg

Fork完成后

119-120181122140534.jpg


4.Clone项目到本地


首先是clone,clone的地址可以直接点击按钮复制(如下图)。

推荐使用SSH协议,用HTTP协议有时会出问题。

注意,这里clone的是你自己仓库里的项目

120-20181122140739.jpg

打开git命令行,输入指令和刚才复制的地址,回车即可克隆到本地

121-20181122141311.jpg

此时你只能看到master分支,并没有把dev分支clone下来。使用 git branch 命令查看本地分支,发现本地只有master分支。如下图的①

122-20181122141926.jpg

如上图的②,使用 git branch -a 查看所有分支,就能看到远程分支。

根据远程分支,我们可以创建一个新的本地分支dev,并把该项目的dev分支的内容放到本地dev分支。如上图③。

git checkout -b dev origin/dev 的意思是,创建一个dev分支(-b),并把远程dev分支(origin/dev)的内容放在该分支内。接着切换到该分支(checkout


现在使用 git branch 可以查看两个分支,并且用 ls 或者 dir 就能看到dev分支的内容了。想切换回master分支的时候,再用 git checkout master 即可。

123-20181122142405.jpg

上面的操作完成后,你就可以在本地进行开发了。但是如果要将你修改完的代码合并到团队项目上,还需要进行下面的操作。


5.和团队项目保持同步


首先查看有没有设置upstream,使用 git remote -v 命令来查看。如下图①

125-20181122143036.jpg

如果没有显示upstream,则使用 git remote add upstream 团队项目地址 命令。如上图②

接着再次使用 git remote -v ,如果如上图③,显示出了upstream,那么就设置好了


开始同步。首先执行 git fetch upstream 获取团队项目最新版本。如下图①

126-20181122143511.jpg

此时并没有把最新版本合并到你本地的分支上,因此还需要一步。如上图②,当前分支是dev分支,执行 git merge upstream/dev 命令后,会将源分支(upstream/dev)合并到当前分支(dev)。


如果你是在本地的master分支上开发,那么在使用该命令前,先切换到master分支。

merge的时候,有可能碰到冲突。需要解决冲突才能继续下面的操作。冲突的解决可以参考→ 冲突的解决


6.push修改到自己的项目上


解决冲突后,就可以使用 git push 命令将本地的修改同步到自己的GitHub仓库上了。

注意,在当前所在分支使用push,会push到与这个分支相关联的远程仓库分支。这里dev分支与origin/dev关联,因此push到GitHub上的dev分支。

127-20181122143918.jpg


7.请求合并到团队项目上

首先到你的GitHub上,进入你Fork的仓库里。点击红框处的Pull request

129-20181122144221.jpg

下图左边红框,表示要合并到fzu2015/CourseManagement项目的dev分支。

下图右边红框,表示要从自己仓库的dev分支发起合并请求。

点击红框处的 Create pull request就可以发送合并请求了。

130-20181122144427.jpg

当然,在发送请求之前,你可以检查一下你都改了哪些东西。在上面那个页面往下拉,就可以看到两者的对比。如下图:

131-809218-20151103173927555-1477286515.png

以上操作结束后,团队成员的流程就结束了。最后一步交给团队项目负责人来完成。


8.团队项目负责人审核及同意合并请求


首先进入GitHub的团队项目仓库中。此时右边的Pull requests显示当前项目有几个Pull request。点击进入查看。

132-20181122144628.jpg

选择一个Pull request

133-20181122144650.jpg

项目负责人审核有两个要注意的地方:

一个是下图的①。一定要看清楚是合并到哪个分支。这里是从schaepher的dev分支合并到fzu2015的dev分支。

另一个是下图的②。点击进去后,就可以查看该Pull request对项目做了哪些修改。这样如果有问题,可以及时发现,并关闭该Pull request。

如果关闭了,一定要告诉队友,否则他可能会不知道。虽然也可以直接在下面发布Comment告诉他,但队友不一定看到。

134-809218-20151103173949711-1666366145.png

如果没有问题,可以点击Merge pull request。这样就合并好了。


二、团队开发示例


下面举例演示的是GitFlow工作流的功能,这里先放一张经典的GitFlow工作流图示:

135-20181122155055.jpg


其中涉及到的主要分支类型有:

master分支,即主分支。任何项目都必须有个这个分支。对项目进行tag或发布版本等操作,都必须在该分支上进行。

develop分支,即开发分支,从master分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支。同时release分支由此分支检出。


release分支,即发布分支,从develop分支上检出。该分支用作发版前的测试,可进行简单的bug修复。如果bug修复比较复杂,可merge回develop分支后由其他分支进行bug修复。此分支测试完成后,需要同时merge到master和develop分支上。


feature分支,即功能分支,从develop分支上检出。团队成员中每个人都维护一个自己的feature分支,并进行开发工作,开发完成后将此分支merge回develop分支。此分支一般用来开发新功能或进行项目维护等。


fix分支,即补丁分支,由develop分支检出,用作bug修复,bug修复完成需merge回develop分支,并将其删除。所以该分支属于临时性分支。


hotfix分支,即热补丁分支。和fix分支的区别在于,该分支由master分支检出,进行线上版本的bug修复,修复完成后merge回master分支,并merge到develop分支上,merge完成后也可以将其删除,也属于临时性分支。


下边我们一步步拆分讲解各种类型分支的用法。


1)假设团队就一个人“xianhu”,做一个叫TestGit的项目,并将其代码托管在Github上。首先需要在Github上新建一个项目TestGit:

136-20161109103131_153.png

按照Github上的提示,在本地新建一个项目,并关联到Github上的orgin/master。此时开发一个很小的demo功能,并提交到线上,并在master分支上进行打tag操作,并命名为v0.1。此时的GitFlow工作流为:

137-20161109103131_309.png


2)如果此时master分支的代码正在线上运行,而且又需要开发新功能,则不能在master分支上直接修改。一个比较好的策略是在master分支上新建并检出develop分支,新功能的开发在develop分支上进行,此时记得将develop分支提交到远端:

git branch develop master    # 从master分支上新建develop分支

git checkout develop    # 检出develop分支

# 此处可进行功能开发,并add和commit到develop分支

git push origin develop    # 推送develop分支到远端的origin/develop

即Github上保持两个分支:master和develop。目的是为以后团队协作更新develop分支做准备。此时Github上为:

138-20161109103131_425.png


此时会出现两种情况:

线上版本的代码(master分支)出现了紧急bug,需要修复。这里用到了hotfix分支。

git checkout master    # 切换回master分支

git checkout -b hotfix master    # 新建hotfix分支,并切换到该分支


# 做一些bug修复工作

git checkout master    # 切换回master分支

git merge --no-ff hotfix    # 合并hotfix分支,此时bug已被修复(无冲突)

git tag v0.2    # 新建tag v0.2

git push origin master    # 推送master分支代码到远端

git push origin --tags    # 推送tag到远端

develop分支上的功能开发完成了,需要进行测试和提交。这里用到了release分支。

git checkout develop    # 切换回develop分支

git checkout -b release01 develop    # 新建release分支,并切换到该分支


# 做一些测试、bug修复等工作

git checkout develop    # 切换回develop分支

git merge --no-ff release01  # 合并release01分支到develop分支(无冲突)

git push origin develop    # 推送develop分支到远端


git checkout master    # 切换回master分支

git merge --no-ff release01   # 合并release01分支到master分支(无冲突)

git tag v0.3    # 新建tag v0.3

git push origin master    # 推送master分支代码到远端

git push origin --tags    # 推送tag到远端


此时GitFlow工作流为:

139-20161109103131_700.png


3)这里可以继续develop分支,并不断push到远端。此时如果团队成员增加,多人需要开发不同的功能,这里就会用到feature分支。团队中的每个人都从Github克隆一个项目,然后新建自己的feature分支。

git clone xxxx.git

git checkout develop

git checkout -b feature-xx develop    # 从develop分支新建并检出feature分支

此时“xianhu”做如下操作,并首先第一个提交到了Github远端:


git checkout -b feature-hu develop    # 从develop分支新建并检出feature分支

# 这里可以进行一些功能开发,并不断的add和commit

git checkout develop    # 切换回develop分支

git pull origin develop    # 更新远端代码,看develop分支是否有更新(无更新)

git checkout feature-hu    # 切换回feature分支

git rebase develop    # 合并develop分支到feature分支,并解决冲突(无冲突)

git checkout develop    # 切换回develop分支

git merge --no-ff feature-hu    # 合并feature分支到develop分支

git push origin develop   # 推送develop分支到远端

此时的GitFlow工作流为:

140-20161109103131_260.png


对于团队其他成员,比如zz,操作如下,并打算在“xianhu”提交后进行push操作:

git checkout -b feature-zz develop    # 从develop分支新建并检出feature分支

# 这里可以进行一些功能开发,并不断的add和commit

git checkout develop    # 切换回develop分支

git pull origin develop    # 更新远端代码,看develop分支是否有更新(有更新)

git checkout feature-hu    # 切换回feature分支

git rebase develop    # 合并develop分支到feature分支,并解决冲突(有冲突)

# 这里需要进行冲突解决

git add .    # 解决完冲突之后执行add操作

git rebase --continue    # 继续刚才的rebase操作

git checkout develop    # 切换回develop分支

git merge --no-ff feature-zz    # 合并feature分支到develop分支(无冲突)

git push origin develop   # 推送develop分支到远端

如果团队成员在合并feature分支到develop分支后还需要继续开发,则检出自己的feature分支继续操作,并重复上述过程即可。这里需要注意--no-ff参数,其目的是让commit的流程更加清晰,具体为什么可自行百度。


xianhu这边进行pull操作,即可看到zz进行的操作。此时的GitFlow工作流为:

141-20161109103131_215.png


4)如果此时需要进行测试、发版操作,则需要再次新建并检出release分支,重复(2)的步骤。完成之后的GitFlow工作流为:

142-20161109103131_413.png

这里就完成了从版本v0.1到v1.0的迭代开发,并详细解释了如何利用Git+Github进行团队协作开发。文章中没有用到fix分支,这种分支的用法和feature分支类似,大家可以自己体会。


最后详细解释一下上张图:

· xianhu在master分支上完成v0.1版本开发,“done demo in master”

· 发现master分支上有bug,需紧急修复。新建并检出hotfix分支进行bug修复,并merge回master分支,发布版本v0.2。

· xianhu新建并检出develop分支进行迭代开发,然后在develop分支上检出release01分支,进行发版前测试和bug修复。“fix bugs in release01”,完成后将release01分支merge回develop和master分支,并在master分支上发布版本v0.3。

· xianhu继续开发develop分支。此时团队成员增加,团队中的每个人都在develop的基础上新建并检出自己的feature分支,开发完成后merge回develop分支。这里利用到了rebase操作和冲突解决等,需要特别注意一点步骤。

· xianhu在develop分支上检出release02分支,再次进行发版前测试和bug修复,“fix bugs in release02”,完成后将release02分支merge回develop和master分支,并在master分支上发布版本v1.0。


这里只用到和解释了GitFlow工作流,团队协作开发也可以用Pull Requests或者其他方式,找一个合适自己团队和具体业务的协作方式即可。另外,Git博大精深,想要完全精通也绝非易事,只能是一边学一边用。


参考网址:

https://git-scm.com/book/zh 

https://www.cnblogs.com/yhaing/p/8473746.html 

https://www.cnblogs.com/greyzeng/p/6044837.html 

https://blog.csdn.net/xiangff_csdn/article/details/52184394 

https://blog.csdn.net/wwj_748/article/details/55226044 


原文地址:http://www.cnblogs.com/schaepher/p/4933873.html

转载请注明: ITTXX.CN--分享互联网 » Github+Git团队开发使用讲解

最后更新:2018-11-23 00:09:13

赞 (5) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽