GIT和Perforce:分支策略

4
我正在学习两种源代码控制系统,并发现它们的分支策略非常不同。Perforce将原始文件全部复制到新分支中,虽然它使用了一些技巧(例如懒惰复制,“p4 -v”)来防止空间增长,但最终会消耗更多的空间并留下更多的元数据。相比之下,GIT中的分支基本上是指针移动。我想知道为什么Perforce不能采用同样的方法?是因为它需要存储快照(与git一样),而不是文件差异(与Perforce一样)的负担吗?
另外,为什么GIT存储文件的快照而不是差异?这样做有必要吗?这是否意味着通常情况下GIT代码库会比Perforce大?如果两个系统都存储相同的东西,GIT的提交时间是否会更长?
2个回答

4
Git实际上也会存储增量,这些被称为pack文件。如果你稍微改动了一个文件100次,Git不会保留100个略有不同的对象。(更多详见:http://git-scm.com/book/en/Git-Internals-Packfiles
快照是绝对真实的,这就是为什么Git会像它那样存储历史。Git采取了简单的方法,不假设文件以某种方式或原因发生了怎样的变化。它的设计思路是让上层工具分析历史,给出信息,例如“这个文件在这个时间点被重命名”。
如果这是历史的一部分,如果你对什么构成小改名的阈值与删除和创建的改变发生了改变,你将不得不重新编写所有内容。简单就是美。事实上,这是在Linux上设计来跟踪Linux源代码,它遵循这个平台的类似哲学。

1
这其实是一个复杂的话题,但在处理分支和文件历史记录方面有权衡。Git分支是在仓库级别上的,而Perforce可以非常细致,允许您分支一个单个文件或几个通常独立开发的文件集合。
正如你所提到的,Git分支非常快速和轻量级,而Perforce分支则让您对发生的事情有更多的掌控力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接