GIT虽然能够实现各种版本控制,且功能强大,可以做到随时切换版本,回退等各种功能,但过多的分支,无效的分支,杂乱的提交,无意义的命名等等问题,往往会让像我这样的初学者,异常头痛,网络上关于git的往往都是指导你各个命令如何去用,部分命令的使用场景等,但却缺少一个完整工程项目的管理步骤。部分大神的确总结出了自己的使用习惯,但却不是作为教程来陈述的,下面我会将自己的一些习惯进行总结,后续可能遇到更好的也还会不断的更改。

下面是一张团队协作示意图:

通过这张图,我们可以初步了解git的工作流程,接下来将以这张图为基础,进行详细分析论述。

思路分析:

个人的GIT使用习惯,注意:不在master上面轻易进行提交,一般所有的工作步骤都放在develop分支上面进行,不做无意义的提交,所有提交最起码是能够通过编译的版本,有一定程度上的修改优化,且每次提交必须付上详细的commit说明。基于develop,如果平行进行多种不同类型版本的开发,则所有都建立相应的新分支dev_name,而基于dev_name,每个开发人员再次建立各自的分支,只有在完成相关开发后将各自分支合并到dev_name中。通过测试多个dev_name,选择最终确定的方案,将develop分支合并到某条dev_name上,继续开发,后续如果在遇到类似问题,继续重复上述步骤。默认的master分支只用来快速合并develop分支来确定发行版,对所有发行版都加入tag(release_name)。简单来说就是:GIT不断创建分支,master用来合并develop分支作为发行版发布;develop分支用来合并dev_name分支作为开发的主要分支;dev_name合并所有开发人员的各个提交的分支,在没有dev_name的情况下(即只有一个develop分支),develop分支用来合并所有开发人员的各个提交的分支。

git控制版本的过程就是分支不断提交合并的过程。

版本控制步骤:

  • 对项目初始化版本库(注意不能是裸库,裸库只能远程下载查看,无法本地查看,类似的github和git服务就是这种裸库)
  • 编辑好相应的.gitignore文件,该文件用来忽略一些文件,不让提交,一般可以是非必要的工程文件,编译生成的文件等。(.git目录下也存在类似.gitignore的忽略文件,但该文件不能被提交和push,因此强烈建议使用.gitignore)
  • 进行第一次空工程的提交,主要将.gitignore提交给master。
  • 建立分支develop,将工作分支切换到develop上。
  • 进行相应的程序编辑和编译,完成后,提交版本库。(因为上面已经checkout到了develop,所以默认的提交就是到develop,不进行分支切换的话,以后默认也都在这个分支上面进行。)
  • 假如这时候需要建立多个版本进行分别开发,这时候需要建立多个dev_name分支(注意这边是建议对所有版本都建立新的分支,作为develop的分支进行开发测试,而develop只用于最后对他们做合并。),需要开发哪个版本就切换到哪条dev_name分支上面进行开发提交。
  • 假设多个版本开发测试完毕,用户需要某个功能的测试版本,则给该分支的某个版本再建立新分支test_release,然后打上tag标记,可以简单发布。
  • 然而项目仍然需要推进,最终你需要在所有测试版本中选择出最优的一个合并到develop分支上,做接下来的开发。
  • 在develop分支上进一步进行开发,假设现在不再仅仅是你一个人接手这个项目,而是多个人的团队,则需要基于develop建立多个分支,让每个单独负责其中的一个分支。每个人所要进行的工作都各自在自己的分支上面进行。假如这时团队成员都各自任务完成了,所有人都提交版本,这时则由组长专门将所有分支再次逐个合并到develop分支上,当然这部分可能会有冲突,需要手动合并。
  • 假如再次需要建立多个版本进行分别开发测试,这时同上述步骤一只,再次建立多个dev_name分支,然后基于每个dev_name,为每个组员生成多个dev_name的子分支,每个组员各负责一条子分支。组员完成工作后,各个分支的负责人再次将把所有分支合并到各自的dev_name上,当所有版本测试完毕后,组长再次将所有dev_name合并
    develop上。
  • 如此,开发过程中反复进行上述建立分支合并分支的操作。最终需要发布正式版本的时候,组长将develop的内容快速合并到master分支上,然后为这个节点打上tag(如:v1.0)。注意:master分支只用来快速合并和发布版本。

上述步骤详细的导图:


参考链接:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
http://baike.baidu.com/link?url=weNC33XuaXOCTBp5s3WeZVu-Z9LP41KY_M6_WdGxAJZpJs_sq7jcgZ-3B01u2EiqfK6gb0L6s3-IDiWp1cVgF_