与传统的代码版本管理工具相比,Git 有很多的优势,因而越来越成为程序员喜欢的版本管理工具。我觉得,Git 这个代码版本管理工具最大的优势有以下几个。
Git 是一个分布式的版本管理工具,而且可以是单机版的,所以,你在没有网络的时候同样可以提交(commit)代码。对于我们来说,这意味着在出差途中或是没有网络的环境中依然可以工作写代码。
这是不是听起来有点不对?一方面,以后你再也不能以“没有网络”作为不能工作的借口了。另一方面,没有网络意味着没有 Google 和 StackOverflow,光有个本地的 Git 我也一样不能写代码啊……(哈哈。好吧,这已经超出了 Git 这个技术的范畴了,这里就不讨论了)
Git 从一个分支向另一个分支合并代码的时候,会把要合并的分支上的所有提交一个一个应用到被合并的分支上,合并后也能看得到整个代码的变更记录。而其他的版本管理工具则不能。
Git 切换分支的时候通常很快。不像其他版本管理器,每个分支一份拷贝。
Git 有很多非常有用的命令,让你可以很方便地工作。
比如我很喜欢的git stash命令,可以把当前没有完成的事先暂存一下,然后去忙别的事。git cherry-pick命令可以让你有选择地合并提交。git add -p可以让你挑选改动提交,git grep $regexp $(git rev-list --all)可以用来在所有的提交中找代码。因为都是本地操作,所以你会觉得速度飞快。
除此之外,由 Git 衍生出来的 GitHub/GitLab 可以帮你很好地管理编程工作,比如 wiki、fork、pull request、issue……集成了与编程相关的工作,让人觉得这不是一个冷冰冰的工具,而真正和我们的日常工作发生了很好的交互。
GitHub/GitLab 这样工具的出现,让我们的工作可以呈现在一个工作平台上,并以此来规范整个团队的工作,这才正是 Git 这个版本管理工具成功的原因。
今天,我们不讲 Git 是怎么用的,因为互联网上有太多的文章和书了。而且,如果你还不会用 Git 的话,那么我觉得你已经严重落后于这个时代了。在这篇文章中,我想讲一下 Git 的协同工作流,因为我看到很多团队在使用 Git 时,并没有用好。
注意,因为 Git 是一个分布式的代码管理器,所以,是分布式就会出现数据不一致的情况,因此,我们需要一个协同工作流来让工作变得高效,同时可以有效地让代码具有更好的一致性。
说到一致性,就是每个人手里的开发代码,还有测试和生产线上的代码,要有一个比较好的一致性的管理和协同方法。这就是 Git 协同工作流需要解决的问题。
目前来说,你可能以为我想说的是 GitFlow 工作流。恭喜你猜对了。但是,我想说的是,GitFlow 工作流太过复杂,我并不觉得 GitFlow 工作流是一个好的工作流。如果你的团队在用这种工作流开发软件,我相信你的感觉一定是糟透了。
所以,我的这篇文章会对比一些比较主流的协同工作流,然后,再抨击一下 GitFlow 工作流。