svn与git的版本管理入门 2019-10-28 程序之旅,记录 暂无评论 932 次阅读 ## svn与git的版本管理入门 [TOC] #### svn和git的区别 svn和git实现的功能都是一样的,对项目的版本统一管理,但是方式和思维上还是有所区别的。其中以下几个就是他们的区别: 1. **Git是分布式的,SVN不是分布式。**使用Git的人,电脑上都会有Local Repository,所以不需要网络也能提交,待到能链接服务器之后就能push上远程服务器。 2. **Git吧内容按元数据方式存储,而SVN是按文件。** 3. **Git分支和SVN的分支不同。**SVN的另一个分支就是另一个目录,版本之间的切换就是文件目录的切换。而Git直接切换的是分支,不需要切换目录。 4. **Git没有一个全局的版本号,而SVN有。**SVN每提交一次,就会产生一个全局的版本号。 5. **Git 的内容完整性要优于 SVN。** 6. **版本拉取效率。**SVN拉取有上千提交数量的五个分支所花费的时间远远比Git耗费的多的多。 7. **版本库的分支。**在版本库中新开一个分支,SVN会影响到其他开发人员的版本库的使用,而Git不会,开发者能在自己本地环境下分出分支,不影响其他开发者使用远程版本库。同时也避免了分支重名的问题,使用Git开发者们能其同名的分支。 8. **版本库的提交。**远程版本库如果离线或宕机,Git用户能正常的使用提交,而SVN不能自行管理项目。 ### SVN的管理模式 一般来说,开发项目的生命周期是:编码、测试、发布,不断地重复循环,直到问题解决掉。针对编码和测试的过程中可能会发生的操作冗余现象,SVN采用了相应的分支目录来解决这些问题。 #### SVN的分支---trunk、branches、tags - trunk:顾名思义,是开发的主线。 - branches:分支,从主线上分出来,独立于主线的另一条分支。 - tags:快照,标签。主要用于项目开发中的里程碑,用于单独一个版本的发布,往往是比较稳定的版本(release)。在开发中也不会改变tags项目中的内容。 #### 分支管理策略 分支策略有两种:一种是主干上对其新功能的开发;另一种是分支用于新功能开发,主干作为稳定版本的发布。第一种方法主要用于集中式开发,第二种方法主要是用于分散式开发。由于现在开发的人数较少,且为了方便管理,所以优选第一种方法。 其中主要的流程就如下所示 ```sequence dev-trunk: 提交版本 v1.0.0 trunk-tags: 快照版本 release_1.0.0 trunk--dev: 继续开发 v2.0.0 note left of tags: 生产环境发生错误 tags-branches: 拉取分支bugfix_1.0.0 note left of branches: 紧急修复bug branches--tags: 修复完bug,并测试成功,\n 快照 release_1.0.1 branches--trunk: 合并到正在开发的项目 trunk--dev: 开发拉取最新代码 note left of tags: 急需开发新的功能 tags-branches: 拉取分支feature_1.0.1 note left of branches: 完成功能开发 branches--tags: 创建新的快照 release_1.1.1 branches--trunk: 合并到正在开发的项目 trunk--dev: 开发拉取最新代码 note left of tags: 有新专包需要处理 tags-branches: 特殊功能项目开发 branches--tags: 合并特殊版本的包,\nschool_release_1.1.1 ``` ### Git的管理模式 Git的管理策略有三种,Git Flow、GitHub Flow、TBD 现在比较常用的是Git Flow ![img](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20200427093748.png) #### Master和develop 在开发过程中的主要两条线,master和develop,这两条线的生命周期伴随着项目的起源和灭亡。不同于主线的是,Feature、Release和Hotfix的支线是有生命周期的,每一个分支都有其具体的目的,并且遵守其严格的规则,对于这些分支,哪些是他们的起始点,哪些是他们的合并目标都有规定。 #### Feature branches 起始主线是develop,合并主线是develop。功能支线主要是开发即将发布或者是未来准备发布的版本。命名方式除了master, develop, release-\*, or hotfix-\*都可以。 #### Release branches 起始主线是develop,合并到develop和master中,命名方式是release-\*。当你需要发布一个新的稳定版本release时候,基于develop创建一个release分支,创建成功后,合并到master和develop分支中。 #### Hotfix branches 起始主线是master,合并到develop和master中,命名方式是hotfix-\*。当我们在生存环境中发现bug的时候,我们得冲master中拉取一个hotfix支线,修复完bug后需要合并到develop生产环境和主线中。 #### 推荐文章 [A successful Git branching model](https://nvie.com/posts/a-successful-git-branching-model/ "A successful Git branching model") 打赏: 微信, 支付宝 标签: git, svn, 管理 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。