请注意:我并不是想重新争论 Mercurial 还是 Git 哪个更好,我只是有一个技术问题,作为 Mercurial 用户,我不明白。我也不确定 SO 是否是问这样的问题的正确地方,但它is编程相关。
从用户的角度来看,关于 Git 和 Mercurial 这两个版本控制系统之间的区别已经有很多讨论了(例如Mercurial 和 Git 有什么区别? and http://felipec.wordpress.com/2011/01/16/mercurial-vs-git-its-all-in-the-branches/),主要区别在于分支的处理。我读过很多这样的讨论,但我不断问自己这个问题:
为什么 Git 不将分支名称存储为提交的一部分?
我实在看不出有什么理由不这样做。这意味着数据不能因为没有指向它的引用(标签、分支等)而简单地消失。
我认为将分支存储在提交中对于 Mercurial 来说是一个很大的优势,因为这使得丢失数据变得更加困难。
支持 Git 分支模型的 Git 人群的主要观点是,您可以简单地删除分支,但这并不妨碍 Git 将分支名称存储为每次提交的一部分:如果删除了某个分支的提交,那么该分支的提交也会被删除。对该分支的引用。它也不会干扰“廉价分支”的论点:分支的管理成本不会更高。而且我认为不需要担心所需的额外存储:每次提交只需几个字节。
关于 Git 和 Mercurial 分支的权威来源之一是 SO 问题:
"Git 和 Mercurial - 比较和对比"
在 Git 中,引用(分支、远程跟踪分支和标签)位于提交的 DAG 之外。
(这允许管理本地和远程分支的有关分支的不同命名空间)
Mercurial 与书签分支(可以推/拉)有类似的概念。
请注意,在 Git 中,数据不会“消失”,因为没有引用:您仍然拥有reflog检索那些未引用的提交。
为什么 Git 不将分支名称存储为提交的一部分?
我实在找不到不这样做的充分理由
想法是分开what已更改(提交)自whym 即来自更改的上下文(分支的名称)。
既然你可以快进合并一个分支,来自一个分支的提交可以随时成为另一个分支的一部分。
因此雅库布·纳伦布斯基质疑 Mercurial“命名分支”(分支名称嵌入变更集元数据中)的设计,尤其是global命名空间,不太适合分散式版本控制系统。
您创建一个分支来隔离开发工作(请参阅“你什么时候应该分支?"),但是对于 DVCS,开发工作(提交集)应该在任何分支名称下发布。一旦发布到另一个 Git 存储库,您定义的本地上下文(分支名称)可能无效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)