几年前,我的一个Perforce软件仓库中的一个子文件夹(例如//FirstDepot/LargeSubfolder/...
)变得太大而无法维护,所以我移植了#39;它进入自己的一个仓库(例如//NewDepotFromLargeSubfolder/...
)。 Perforce不支持从一个软件仓库到另一个软件仓库的集成,因此我基本检查了这些文件,将它们添加到新软件仓库并从子文件夹中删除它们。
现在我要将整个Perforce服务器迁移到许多git存储库。 git p4
程序运行良好,我已经将其他无关的Perforce软件仓库成功迁移到git(包括使用@all
的完整文件历史记录 - 但随后,这些软件仓库从未迁移过#&n;在Perforce中描述的方式......)。
问题是我不想丢失//FirstDepot/LargeSubfolder/...
下的文件历史记录。那里有几千个变更列表(在//NewDepotFromLargeSubfolder/...
还有几千个变更列表),其中许多都包含非常有价值的信息。
我尝试从第一个位置迁移文件历史记录,然后“堆叠”#39;第二个位置的历史:
host:~ user$ mkdir SomeTempFolder
host:~ user$ cd SomeTempFolder
host:SomeTempFolder user$ export P4PORT=perforce:1666
host:SomeTempFolder user$ git p4 clone //FirstDepot/LargeSubfolder@all gitRepoFolder
Importing from //FirstDepot/LargeSubfolder@all into gitRepoFolder
Initialized empty Git repository in /Users/user/SomeTempFolder/gitRepoFolder/.git/
Import destination: refs/remotes/p4/master
Importing revision 26776 (99%)
Ignoring apple filetype file //FirstDepot/LargeSubfolder/SomePath/SomeIconFile.icns
Importing revision 26778 (100%)
除了有关Mac OS X图标文件被忽略的消息外,第一位有效。然而第二部分失败了:
host:SomeTempFolder user$ git p4 clone //NewDepotFromLargeSubfolder@all gitRepoFolder
Importing from //NewDepotFromLargeSubfolder@all into gitRepoFolder
Reinitialized existing Git repository in /Users/user/SomeTempFolder/gitRepoFolder/.git/
Import destination: refs/remotes/p4/master
Importing revision 26777 (0%)
Ignoring apple filetype file //NewDepotFromLargeSubfolder/SomePath/SomeIconFile.icns
Importing revision 27142 (33%)
Ignoring apple filetype file //NewDepotFromLargeSubfolder/AnotherPath/Some AppleScript file.scpt
Ignoring apple filetype file //NewDepotFromLargeSubfolder/AnotherPath/Another AppleScript file.scpt
Importing revision 27620 (100%)
fast-import failed: warning: Not updating refs/remotes/p4/master (new tip <some long git ID> does not contain <another long git ID>)
git-fast-import statistics:
<loads of git statistic>
使用git p4
运行--verbose
似乎表明Perforce修订版的实际导入已成功完成,但出现了一些我不明白的问题:
Importing revision 27620 (100%)commit into refs/remotes/p4/master
Opening pipe: ['p4', '-G', '-x', '-', 'print']
Path/of/the/file/in/the/last/Changelist
Reading pipe: ['git', 'config', '--bool', 'git-p4.importLabels']
Traceback (most recent call last):
File "/usr/libexec/git-core/git-p4", line 3287, in <module>
main()
File "/usr/libexec/git-core/git-p4", line 3281, in main
if not cmd.run(args):
File "/usr/libexec/git-core/git-p4", line 3155, in run
if not P4Sync.run(self, depotPaths):
File "/usr/libexec/git-core/git-p4", line 3030, in run
die("fast-import failed: %s" % self.gitError.read())
File "/usr/libexec/git-core/git-p4", line 106, in die
raise Exception(msg)
Exception: fast-import failed: warning: ... (as above) ...
当完成新的git存储库时,第二部分的迁移工作正常。
阅读`git-p4 clone` fails "new tip ... does not contain ..."后,我在没有空格的工作文件夹中重试了迁移;同样的结果。我正在使用Mac OS X btw,但Perforce服务器在Debian 7.5虚拟机上运行。
我的问题:
+有没有人有一些建议如何找出这里的错误?
+通常是否可以堆叠&#39;修订历史的大块?
+有没有人能想到另一种方法(除了有两个git回购)?
我根本不是一个git专家,但到目前为止,我几乎只是把它扔进去,git做了一个很好的工作,弄清楚我想做什么;此外,Reinitialized existing Git repository
消息似乎表明我并未完全关闭。
答案 0 :(得分:1)
第二部分的迁移在完成新的git存储库时工作正常
这可能是这里可接受的解决方法的基础:必须分离Git repo,并从&#34; How do you merge two git repositories?&#34;中选择一种技术。得到一个最终的回购。
git filter-branch
方法详见&#34; Combining multiple git repositories&#34;。
(您还有simpler approach based on merge,还有described here:OP ssc已选择&#34; Merge two Git repositories without breaking file history&#34;)