TL;博士;我希望保留迁移到git的文件的历史记录,包括早期集成的历史记录。
即git p4 clone
,git 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记录的文件历史记录是完整的。这应该让我的工作变得更轻松。虽然我不确定它是否在实践中发挥作用。
答案 0 :(得分:1)
Git与Perforce的工作方式不同,不会跟踪文件副本和重命名,因此无法通过git p4导入该信息。相反,Git能够在分析提交时自动识别文件重命名和/或副本。显然,这需要更多处理,因此默认情况下不启用。
您要查找的是-M
,-C
和--find-copies-harder
。通常,您希望以-M85
格式使用前两个参数,其中数字85表示必须等于认为文件相同的代码量。这允许检测在同一提交中重命名和修改的文件。请注意,如果您启用-C
,则无需启用-M
。
Git p4提供了detectCopies
和detectCopiesHarder
配置参数,以便检测到这一点并使用p4 integrate
代替p4 delete
和/或p4 add
提交更改