4

我正在学习这两个源代码控制系统,发现它们的分支策略非常不同。

Perforce 将其所有原始文件复制到新分支,虽然它确实采用了一些技巧(例如惰性复制,“p4 -v”)来防止空间增长,但最终它会消耗更多空间并留下更多元数据。相反,在 GIT 中,分支基本上是指针的移动。我想知道为什么 Perforce 不能采用同样的方法?那是因为它带来了存储快照(如在 git 中)而不是文件差异(如在 Perforce 中)的负担吗?

另外,为什么 GIT 存储文件的快照而不是差异?有没有必要这样做?这是否意味着在一般情况下 GIT 代码库会比 Perforce 大?如果相同的东西要存储在两个系统中?GIT 的提交时间会更长吗?

4

2 回答 2

4

Git 实际上也存储增量。这些被称为包文件。如果您稍微更改一个文件 100 次,它不会保留 100 个稍微不同的对象。(更多信息:http: //git-scm.com/book/en/Git-Internals-Packfiles

快照是绝对真理,这就是 git 像这样存储历史的原因。它采用简单的方法,即不假设文件如何以及为什么以某种方式更改。它的愿景是让上面的工具分析历史,为您提供诸如“此时此文件已重命名”之类的信息。

如果那是历史的一部分,那么如果您的阈值构成重命名 w/ 小更改与删除和创建更改的阈值,则您将不得不全部重写。简单更好。事实上,这是在 linux 上设计的以跟踪 linux 源代码,它遵循该平台的类似理念。

于 2012-09-27T23:41:22.343 回答
1

这实际上是一个复杂的话题,但是在他们如何处理分支和文件历史方面需要权衡取舍。Git 分支位于存储库级别,而 Perforce 可以非常精细,允许您分支单个文件或通常独立开发的多组文件。

正如您所提到的,Git 分支非常快速且轻量级,而 Perforce 分支使您可以更好地控制正在发生的事情。

于 2012-09-29T19:10:55.987 回答