GIT 和 Perforce : the branching strategy

标签 git perforce

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

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/

相关文章:

Git - 为我的工作流程 merge vs Rebase

php - "git push appengine master"中需要用户名和密码

git - 如何在 git commit 主体的每一行前面添加一个字符

git - 在 Jenkins : pip install from git repo using SSH keys

git - 使现有的 Git 分支跟踪远程分支?

perforce - 如何从仓库 View 中删除任务流

diff - 针对特定变更列表强制执行差异文件

git - Jenkins基于Git Branch执行Bash

perforce - 显示自上次同步以来提交的Perforce变更列表

svn - 从 Perforce 迁移到 Subversion