我正在学习这两个源代码控制系统,发现它们的分支策略有很大不同。
Perforce 将其所有原始文件复制到新分支,虽然它确实采用了一些技巧(例如惰性复制,“p4 -v”)来防止空间增长,但最终它会消耗更多空间并留下更多元数据.相反,在 GIT 中,分支基本上是四处移动指针。我想知道为什么 Perforce 不能采用相同的方法?这是因为它带来了存储快照(如在 git 中)而不是文件差异(如在 Perforce 中)的负担吗?
另外,为什么GIT存储的是文件的快照而不是差异?有这样做的必要吗?这是否意味着在一般情况下 GIT 代码存储库会比 Perforce 的更大?如果相同的东西要存储在两个系统中? GIT 的提交时间会更长吗?
最佳答案
Git 实际上也存储增量。这些称为包文件。如果您将一个文件稍微更改了 100 次,它不会保留 100 个稍微不同的对象。 (更多信息:http://git-scm.com/book/en/Git-Internals-Packfiles)
快照是绝对真实的,这就是 git 以这种方式存储历史的原因。它采用不假设文件如何以及为何以某种方式更改的简单方法。它的愿景是让上面的工具分析历史,为您提供诸如“此文件此时已重命名”之类的信息。
如果那是历史的一部分,如果你的阈值是什么构成重命名 w/a small change vs. delete and a create 改变了,你将不得不重写它。简单的更好。事实上,这是在 linux 上设计的,用于跟踪 linux 源代码,它遵循了该平台的类似理念。
关于GIT 和 Perforce : the branching strategy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12631601/