
Git的优点很多但是这里只列出我认为非常突出的几点。由于是分布式所有本地库包含了远程库的所有内容。优秀的分支模型打分支以及合并分支机器方便。快速在这个时间就是金钱的时代Git由于代码都在本地打分支和合并分支机器快速使用个SVN的能深刻体会到这种优势。感兴趣的可以去看一下Git本身的设计内在的架构体现了很多的优势不愧是出资天才程序员Linus (Linux之父) 之手版本管理的挑战虽然有这么优秀的版本管理工具但是我们面对版本管理的时候依然有非常大得挑战我们都知道大家工作在同一个仓库上那么彼此的代码协作必然带来很多问题和挑战如下如何开始一个Feature的开发而不影响别的Feature由于很容易创建新分支分支多了如何管理时间久了如何知道每个分支是干什么的哪些分支已经合并回了主干如何进行Release的管理开始一个Release的时候如何冻结Feature, 如何在Prepare Release的时候开发人员可以继续开发新的功能线上代码出Bug了如何快速修复而且修复的代码要包含到开发人员的分支以及下一个Release?大部分开发人员现在使用Git就只是用三个甚至两个分支一个是Master, 一个是Develop, 还有一个是基于Develop打得各种分支。这个在小项目规模的时候还勉强可以支撑因为很多人做项目就只有一个Release, 但是人员一多而且项目周期一长就会出现各种问题。Git Flow就像代码需要代码规范一样代码管理同样需要一个清晰的流程和规范Vincent Driessen 同学为了解决这个问题提出了 A Successful Git Branching Model下面是Git Flow的流程图上面的图你理解不了 没关系这不是你的错我觉得这张图本身有点问题这张图应该左转90度大家应该就很用以理解了。Git Flow常用的分支Production 分支也就是我们经常使用的Master分支这个分支最近发布到生产环境的代码最近发布的Release 这个分支只能从其他分支合并不能在这个分支直接修改Develop 分支这个分支是我们是我们的主开发分支包含所有要发布到下一个Release的代码这个主要合并与其他分支比如Feature分支Feature 分支这个分支主要是用来开发一个新的功能一旦开发完成我们合并回Develop分支进入下一个ReleaseRelease分支当你需要一个发布一个新Release的时候我们基于Develop分支创建一个Release分支完成Release后我们合并到Master和Develop分支Hotfix分支当我们在Production发现新的Bug时候我们需要创建一个Hotfix, 完成Hotfix后我们合并回Master和Develop分支所以Hotfix的改动会进入下一个ReleaseGit Flow如何工作初始分支所有在Master分支上的Commit应该TagFeature 分支分支名 feature/*Feature分支做完后必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支但是我们也可以保留Release分支分支名 release/*Release分支基于Develop分支创建打完Release分之后我们可以在这个Release分支上测试修改Bug等。同时其它开发人员可以基于开发新的Feature (记住一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支)发布Release分支时合并Release到Master和Develop 同时在Master分支上打个Tag记住Release版本号然后可以删除Release分支了。维护分支 Hotfix分支名 hotfix/*hotfix分支基于Master分支创建开发完后需要合并回Master和Develop分支同时在Master上打一个tagGit Flow代码示例a. 创建develop分支git branch developgit push -u origin developb. 开始新Feature开发git checkout -b some-feature develop# Optionally, push branch to origin:git push -u origin some-feature做一些改动git statusgit add some-filegit commitc. 完成Featuregit pull origin developgit checkout developgit merge --no-ff some-featuregit push origin developgit branch -d some-featureIf you pushed branch to origin: