0

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

更长的版本:

我有一个项目,perforce其中包含过去在存储库中的其他项目周围移动和复制的文件。

p4 filelog -l <file2>

在当前位置显示文件的历史记录(-l表示长格式)。文件被移动(复制),p4 integrate例如

p4 integrate <file1> file2>

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

p4 filelog -li <file2>

等效的git命令是:

git log --follow <file2>

现在,如果我使用以下方法克隆perforce项目的一部分:

git p4 clone //depot/some/path/...@all .

我获得了该文件的完整历史记录,就像获得当前目录位置在perforce.

(您现在在 is 处获得文件的单个提交,而没有@all 看到使用 git-p4 获取整个文件历史记录

我怎样才能git log --follow <file2> 给我我会看到的完整历史p4 filelog -li

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

添加一个选项以git p4 clone跨集成复制文件历史记录以便--follow工作需要什么?

这与git p4: migrate full history - 包括集成历史非常相似

与那个问题不同,我总是使用 p4 集成在存储库中移动文件,因此 perforce 记录的文件历史记录是完整的。那应该使我的任务更容易。虽然我不确定它是否在实践中。

4

1 回答 1

1

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

您正在寻找的是论点-M和。通常,您希望使用 format 中的前两个参数,其中数字 85 表示考虑到文件相同时必须相等的代码量。这允许检测在同一提交中重命名和修改的文件。请注意,如果启用,则无需启用.-C--find-copies-harder-M85-C-M

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

于 2016-11-09T17:28:13.560 回答