【转载】Git项目管理 第3章 项目分支管理

来源:互联网 发布:lurker软件怎么下载 编辑:程序博客网 时间:2024/05/20 19:17

原文来自http://wenku.baidu.com/view/55369c1252d380eb62946d58.html

        Git 最为世人称道的就是它那强大的项目分支管理功能,现在较为流行的版本控制系统,诸如CVS、SVN 等,虽然也提供了项目分支管理功能,但是可用性极低。对于Git 而言,管理多个项目分支如探囊取物耳。本章主要讲述Git 的项目分支管理的基本知识以及如何利用这一功能形成更有章法的项目协同开发模式。


3.1 如何产生项目分支


        前两章所讲内容未有提及项目分支问题,但事实上是有一个分支存在的,那就是master 分支(主分支),该分支是由Git 自动产生的。在此之前,我们针对项目版本的各种操作都是在主分支上进行的,只是我们未察觉它的存在而已。Git 可以轻松地产生新的项目分支,譬如下面操作可添加一个名曰“local”的新的项目分支:

$ git branch local

        对于新产生的local 分支,初始时是完全等同于主分支的。但是,在local 分支所进行的所有版本更新工作都不影响主分支,这意味着作为项目的参与者,可以在local 中开始各种各样的更新尝试。查看项目仓库中存在多少分支,可直接使用git branch 命令,譬如使用该命令查看我的M2Doc 项目分支列表:

$ git branch
local
* master

        在上述操作输出结果中,若分支名之前存在* 符号,表示此分支为当前分支。其实Git 各分支不存在尊卑之别,只存在哪个分支是当前分支的区别。为了某种良好的秩序,很多人默认是将master 分支视为主分支,本文也将沿用这一潜在规则。
        由上述操作输出的分支列表可以看出,虽然使用git-branch 命令产生了local 分支,但是Git 不会自动将当前分支切换到local 下。可使用git-checkout 命令实现分支切换,下面操作将当前分支切换为前文所产生的local 分支:

        $ git checkout local


3.2 分支的合并


        我们产生了local 分支,并在该分支下进行了诸多修改与数次的版本更新提交,但是该如何将这一分支的最终状态提交到master 分支中呢?
        git-merge 命令可实现两个分支的合并。譬如我们将local 分支与master 分支合并,操作如下:

$ git checkout master # 将当前分支切换为master
$ git merge local # 将local分支与当前分支合并

        当一个分支检查无误并且与master 分支成功合并完毕后,那么这一分支基本上就没有存在的必要性了,可以删除掉:

$ git branch -d local

        注意,git-branch 的-d 选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想不问青红皂白地删除一个分支,可以使用git-branch 的-D 选项。


3.3 M2GE 新的协同开发模式


        现在来讨论一下如何基于Git 项目分支管理功能实现更为稳健、高效的M2GE 库的协同开发机制。实验室服务器上已经建立了M2GE 仓库[1]* 。现在以Lyr 作为主角,看一看他围绕M2GE 开发工作的一天中的工作过程。

        首先,Lyr 需要更新自己机器上的工作树,并查看实验室其他成员的版本更新信息:

$ git pull
$ git log

       [1]* 如有不解,请阅读第2 章。
        然后,Lyr 开始建立一个新的项目分支,将其命名为lyr,并将当前分支切换为该分支:

$ git branch lyr
$ git checkout lyr

        然后这一天中剩余的大部分时间,Lyr 都在自己所建立的项目分支上工作,譬如增加了3 个新的接口及相关测试程序,并对原有接口做了一些修改。一天的工作完成后,他有必要将这一天的工作与M2GE 仓库的master 分支进行合并,然后删除lyr 分支:

$ git checkout
$ git merge lyr
$ git branch -d lyr

        现在,Lyr 已经将这一天的工作反映到自己机器上的M2GE master 分支上了,他最后要做的是将其推送到服务器的M2GE 仓库,以使项目其他成员能够分享他的工作。这里要注意,在推送版本更新之前,需要使用git-pull 命令将这一天中其他成员对服务器端的M2GE 的更新拉过来合并到自己的master 分支,然后才可以将自己的版本更新推送到服务器上的M2GE 仓库,具体操作如下:
1. 使用git-pull 命令更新本地工作树;
2. 若出现版本合并冲突,并且Git 无法自动合并,需要手工合并,然后将合并结果提交到本地master 分支;
3. 使用git-push 命令将本地master 分支更新推送到服务器M2GE 仓库中。
目前,对于我们而言,在基于Git 的M2GE 协同开发过程中,引入分支管理功能,可有效防止因个人操作不当而导致向服务器M2GE 仓库提交太多的脏数据。另外,也有效保持了本地项目主分支的干净,避免了频繁git-clone 服务器端的M2GE 仓库来恢复本地的项目主分支。


3.4 总结

        本章讲述了Git 项目分支管理的基本知识,并利用这些知识巩固了M2GE 库的协同开发机制。至此为止,诸位同学已经接触了Git 的主要功能,并且已经具备了向专业级别的开发团队过渡的基本能力。但是,工具毕竟是工具,并不能代替人的地位,因此希望大家能够学以致用,积极妥善地在日常学习与工作中使用Git,并且努力培养团队协同开发意识。


0 0