我正在使用“git-p4”脚本从 p4 迁移到 GIT。由于大量更改列表(大约 500 万),克隆操作失败。所以我尝试执行增量导入操作: 我尝试克隆第一次运行然后同步操作。我用小改动列表进行了测试。
第一次运行:
git p4 clone //depot/f1/f2/f3/ere@17888479,17918050 -v
第二次运行:
git p4 sync //depot/f1/f2/f3/ere@17918051,17918064 -v
错误:
Traceback (most recent call last):
File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 3677, in <module>
main()
File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 3671, in main
if not cmd.run(args):
File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 3429, in run
die("fast-import failed: %s" % self.gitError.read())
File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 122, in die
raise Exception(msg)
Exception: fast-import failed: warning: Not updating refs/remotes/p4/master (new tip 85c94d84335bb1441a7f959b384729b2a4d633f4 does not contain 3222bdc29799d1fe5fff91c36524481b1469f1d9)
解决方法: - 创建一个目录并克隆具有更改列表范围的代码。 git p4克隆 //depot/f1/f2/f3/ere@17888479,17918050 -v - 将代码推送到 GIT 存储库。您可以使用下面链接上的给定脚本来移动具有历史记录的代码。 https://gist.github.com/emiller/6769886 - 创建另一个目录(空存储库)并克隆具有增量更改列表范围的代码。 - 从 GIT 中提取代码并将其与本地存储库中的代码合并。 - 解决冲突并在提交后推送
在git-fast-import
过程中
有一个最近描述的类似案例
使用 Git 2.26(2020 年第一季度),
git-p4
在这种边缘情况下应该更加稳健。
请参阅 commit 43f33e4(2020 年 1 月 30 日)、commit 19fa5ac、commit 6026aff、commit ca5b5cc、commit 4c1d586、commit 5c3d502、com mit 837b3a6(2020 年 1 月 29 日)作者:Luke钻石(
ldiamand42
).gitster
-- 合并于 commit 4a77434,2020 年 2 月 14 日)
:在错误退出时更好地清理git-p4
签署人:Luke Diamand
出现错误后,
会调用git-p4
。这只是退出,并且子进程仍在运行。die()
不要调用
,而是引发异常并在创建子进程 (die()
) 的位置捕获它。git-fastimport
此更改并未解决
调用子子项且错误时不等待它的特定问题。p4CmdList()
并且,如果
git-p4
是问题的原因,则使用 Git 2.46 (Q3 2024)、batch 3、git-fast-import
将更加明确:
请参阅Fahad Alrashed (alrashedf
)
提交 55702c5(2024 年 5 月 8 日)。
gitster
--合并于 commit bbffcd4,2024 年 5 月 13 日)
git-p4
:向用户显示 Perforce 错误签署人:Fahad Alrashed
在
git p4 clone
期间,如果p4
进程从服务器返回错误,它将将该消息存储在 'err' 变量中。然后它会发送一个文本命令“die-now
”到git-fast-import
。但是,git-fast-import
(man) 会引发异常:fatal: Unsupported command: die-now
,并且err
永远不会显示。此补丁可确保向最终用户显示err
。