git p4克隆文件历史记录,包括集成历史记录

时间:2016-11-09 12:04:40

标签: git version-control perforce git-p4

TL;博士;我希望保留迁移到git的文件的历史记录,包括早期集成的历史记录。 即git p4 clonegit log --all --follow <file> == p4 filelog -li <file>

更长的版本:

我在perforce中有一个项目,其中包含过去在转发器中的其他项目中移动和复制的文件。

p4 filelog -l <file2>

显示文件的历史记录(长形式的 -l <​​/ em>)在其当前位置。 使用p4 integrate例如

移动(复制)文件
p4 integrate <file1> file2>

要查看移动前的历史记录:

p4 filelog -li <file2>

等效的git命令是:

git log --follow <file2>

现在,如果我使用:

克隆部分perforce项目
git p4 clone //depot/some/path/...@all .

我获取该文件的完整历史记录,就像我在同一文件中获取perforce中的当前目录位置一样。

(你现在没有@all获得该文件的单一提交  见Getting the whole files history with git-p4

如何获取git log --follow <file2> 给我一个我在p4 filelog -li看到的完整历史记录?

您可能会注意到文件历史记录本身不如存储库历史记录有用。例如,如果没有其他文件在正确的相对位置的正确版本,单个文件甚至可能无法编译。但是,完整的perforce存储库包含许多其他不相关项目的历史记录,这些项目不得包含在git仓库中。 我不想修剪存储库或嫁接历史记录是一个漫长的痛苦过程(对git来说相对较新,并希望现在避免使用较暗的角落。)

git p4 clone添加一个选项,以便在整合中复制文件历史记录,以便 - 关注有效?

这与git p4: migrate full history - including integration history

非常相似

与该问题不同,我总是使用p4集成在存储库中移动文件,因此perforce记录的文件历史记录是完整的。这应该让我的工作变得更轻松。虽然我不确定它是否在实践中发挥作用。

1 个答案:

答案 0 :(得分:1)

Git与Perforce的工作方式不同,不会跟踪文件副本和重命名,因此无法通过git p4导入该信息。相反,Git能够在分析提交时自动识别文件重命名和/或副本。显然,这需要更多处理,因此默认情况下不启用。

您要查找的是-M-C--find-copies-harder。通常,您希望以-M85格式使用前两个参数,其中数字85表示必须等于认为文件相同的代码量。这允许检测在同一提交中重命名和修改的文件。请注意,如果您启用-C,则无需启用-M

Git p4提供了detectCopiesdetectCopiesHarder配置参数,以便检测到这一点并使用p4 integrate代替p4 delete和/或p4 add提交更改