我们从SVN切换到Git已经很多年了,现在几乎所有的项目都由Github管理,这篇文章将解释为什么要使用Git,以及如何在团队中正确使用它。Git的优点Git有很多优点,但这里只是我认为最突出的几个。因为是分布式的,所有的本地库都包含远程库的所有内容。优秀的分支模型,分支合并分支,机器方便。快,在这个时间就是金钱的时代,因为Git的代码是本地的,所以分支和合并分支的速度很快,用过SVN的人能深深体会到这个优势。有兴趣的可以看看Git本身的设计。内部结构体现了很多优点。我们在面对版本管理的时候,还是有非常大的挑战。我们都知道大家在同一个仓库工作,那么相互之间的代码协作必然会带来很多问题和挑战,如下:如何在不影响其他Feature的情况下开始开发一个Feature?既然创建新的分支很容易,那么如何管理众多的分支,时间长了又如何知道每个分支做了什么?哪些分支已合并回主干?如何管理发布?开始Release时如何冻结Feature,开发者如何在PrepareRelease期间继续开发新功能?线上代码有bug,如何快速修复?而修复后的代码应该包含在开发者的分支和下一个Release中吗?现在大部分开发者使用Git只有三个甚至两个分支,一个是Master,一个是Develop,一个是基于Develop。种分支。这个在项目规模小的时候勉强可以支撑,因为很多人做项目的时候只有一个Release,但是人多了,项目周期长了,就会出现各种问题。GitFlow就像需要代码规范的代码。代码管理也需要一个清晰的流程和规范。为了解决这个问题,VincentDriessen提出了ASuccessfulGitBranchingModel。没关系,这不是你的错,我觉得这张图本身有问题,这张图应该向左转了90度,大家应该很容易看懂。GitFlow常用的分支是Production分支,这也是我们经常使用的Master分支。这个分支是最近发布到生产环境的代码,最近发布的Release。该分支只能从其他分支合并而来,不能直接在该分支修改Development分支。是的,我们是我们的主开发分支,里面包含了所有要发布到下一个Release的代码。这个分支主要是和其他分支合并,比如Feature分支。Feature分支主要用于开发一个新的功能。开发完成后,我们合并回到Develop分支,进入下一个ReleaseRelease分支,当需要发布新的Release时,我们在Develop分支的基础上创建Release分支。Release完成后,我们将其合并到Master和Develop分支中。Hotfix分支当我们在Production中发现新的bug时,我们需要创建一个Hotfix。完成Hotfix后,我们再合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release。GitFlow是如何工作的?初始分支Master分支上的所有Commit应该是TagFeature分支名称feature/*Feature分支完成后,必须合并回Development分支。分支合并后,Feature分支一般会被删除,但是我们也可以保留Release分支。分支名称release/*Release分支是在Development分支的基础上创建的。在此Release分支上进行测试,修复bug等。同时,其他开发者可以根据新Feature的开发情况,在发布Release分支时,将Release合并到Master和Develop(切记:Release分支一旦打开,不要将Develop分支的新变更合并到Release分支),同时在Master分支上打个Tag,记住Release版本号,然后就可以删除Release分支了。维护分支Hotfix分支名称hotfix/*hotfixbranch是在Master分支的基础上创建的。开发完成后,需要合并回Master和Develop分支。同时在Master上创建tagGitFlow代码示例。A。创建开发分支gitbranchdevelopgitpush-uorigindevelopb。开始新功能开发gitcheckout-bsome-featuredevelop#可选地,将分支推送到origin:gitpush-uoriginsome-feature#进行一些更改gitstatusgitaddsome-filegitcommitc.完成功能gitpullorigindevelopgitcheckoutdevelopgitmerge--no-ffsome-featuregitpushorigindevelopgitbranch-dsome-feature#如果你将分支推送到origin:gitpushorigin--deletesome-featured。startReleasegitcheckout-brelease-0.1.0develop#Optional:Bumpversionnumber,commit#准备发布,提交。完成Releasegitcheckoutmastergitmerge--no-ffrelease-0.1.0gitpushgitcheckoutdevelopgitmerge--no-ffrelease-0.1.0gitpushgitbranch-drelease-0.1.0#如果你将分支推送到原点:gitpushorigin--deleterelease-0.1.0gittag-av0.1.0mastergitpush--tagsf。启动Hotfixgitcheckout-bhotfix-0.1.1主克。doneHotfixgitcheckoutmastergitmerge--no-ffhotfix-0.1.1gitpushgitcheckoutdevelopgitmerge--no-ffhotfix-0.1.1gitpushgitbranch-dhotfix-0.1.1gittag-av0.1.1mastergitpush--tagsGit流工具其实当你理解了上面的过程,你根本不需要使用工具,但实际上我们大多数人只是记不住很多命令和过程,怎么办呢??总是有聪明人创造出好的工具供大家使用,那就是Git流程脚本。安装OSXbrewinstallgit-flowLinuxapt-getinstallgit-flowWindowswget-q-O---no-check-certificatehttps://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh|bash使用初始化:gitflowinit启动一个新的Feature:gitflowfeaturestartMYFEATURE发布一个Feature(即推送到远程):gitflowfeaturepublishMYFEATURE获取发布的Feature:gitflowfeaturepulloriginMYFEATURE完成一个Feature:gitflowfeaturefinishMYFEATURE开始发布:gitflowreleasestartRELEASE[BASE]发布发布:gitflowreleasepublishRELEASE发布发布:gitflowreleasefinishRELEASE不要忘记gitpush--tags来启动一个修补程序:gitflowhotfixstartVERSION[BASENAME]发布一个修补程序:gitflowhotfixfinishVERSIONGitFlowGUI上面已经说了这么多,我知道还有人可以'不记得了,然后别人做了GUI工具发布后,你只需要点击下一步,工具就会帮你做这些事情!!!SourceTree用Git-flow初始化后,基本上只需要点击gitflow菜单选择startfeature,release或hotfix,完成后再次选择gitflow菜单,点击DoneAction。它比这更容易。目前SourceTree支持Mac、Windows、Linux。这么好的工具要多少钱?自由的!!!!GitflowforvisualstudioVSGitFlowforVisualStudio的福音
