我被要求证明将一个小团队从 CVS/SVN 转移到 git 是合理的。
到目前为止,从我的阅读中,我可以确定三个主要好处:
- 速度
- 轻松分支
- 分散式
- SVN 不提供的更多功能(部分文件提交、暂存等...)
速度
由于它的速度,有一些支持 git 的论据,但是,对于提到 Git 的卓越速度的常见回应是 3 秒和 13 秒之间的差异可以忽略不计。
一个真实的例子:
我白天做大量工作,晚上回家前完成稳定的工作。
在一个大型提交中,我添加了数百个文件以及更改、移动和重构现有文件,CVS 将在我穿上外套并整理我的办公桌之前执行提交。这与 git 有何不同?
轻松分支
Git 的分支被许多人称赞为它的强项之一。然而,对于许多工程师来说,CVS/SVN 中的分支似乎就足够了,尤其是使用现代 IDE,无论实际使用哪种 RCS,它都能使整个体验和工作流程几乎相同。
当我想尝试一个想法时,我在 Eclipse 中右键单击我的项目节点,选择“切换到不同的分支”,选择“新建”,输入名称然后我就走了,提交和更新而不会“污染主线”为CVS 显然可以。当我确定这个分支中的新想法稳定且良好时,我再次右键单击该项目,选择“与另一个分支或版本合并”,选择 HEAD,我们又回到了 HEAD,但已经实现了工作更改......如何git会改善我的体验吗?
真正分布式
使用分布式 RCS 的主要优势似乎是灾难恢复。然而,类似的属性在 CVS 和 SVN 中也是固有的。对于标准实践用法尤其如此:
现在我认为这是标准做法,早上要做的第一件事是检查存储库是否有过夜所做的任何更改,并在需要时进行更新/合并,如果我今晚回家发现我的存储库已被烧毁到早上起来,我会迷路的……嗯……什么都没有。我会创建一个新的存储库,将我的本地文件提交到服务器,其他 5 名员工也会这样做,可能会有一些合并大惊小怪,但不会超过我们提交本地更改的情况一个已经存在的服务器,我们又离开了。没什么大不了。
GIT 分期
另一个经常提到的功能是暂存区。这在 SVN/CVS 中没有等价物,并且允许开发人员“制作他的提交”以包含在您想要的文件中。
通常,当提到这一点时,我只会想到变更集。暂存区有何不同?
事实上,我什至看到了使用 Git 的一些缺点:
- 本地提交意味着丢失代码的可能性更大,因为我的开发机器比我们的 SVN 服务器更容易受到攻击,而且在我将其推送到我们的公共存储库之前,我的工作处于危险之中。
- 离线工作没有明显的优势,因为大多数开发人员永远不会离线工作。
我觉得好像我一定遗漏或误解了 git 的一些基本知识,并且很难证明切换的商业案例的合理性。我非常感谢您的意见,以更好地理解所涉及的问题,特别是如果您能确定具体的用例,在这些用例中 git 将是一个比 CVS/SVN 从根本上优越的解决方案,而不是简单的渐进式更好的解决方案?