我有一个git存储库,我想镜像到Perforce存储库。我已经下载了git-p4脚本(不提供弃用警告的更新版本),并且一直在使用它。我已经想出如何从Perforce中提取更改,但是当我尝试从git repo同步更改时,我收到了一个错误。这是我到目前为止所做的:
git clone git@github.com:asdf/qwerty.git
git-p4 sync //depot/path/to/querty
git merge remotes/p4/master (there was a single README file...)
所以,我已经将原点复制到一个干净的新导演,得到了一个可爱的合并文件树,git status
显示我是最新的。但是:
> git-p4 submit
fatal: Not a valid object name HEAD~261
Command failed: git cat-file commit HEAD~261
This thread on the git mailing list似乎是相关的,但我无法弄清楚他们对所有的A,B和C做了什么。有人可以澄清“不是有效的对象名称”的含义,以及我可以采取哪些措施来解决问题?我想做的就是定期将原点/主数据快照到Perforce中;不需要完整的历史记录。感谢。
答案 0 :(得分:0)
fatal: Not a valid object name
应该意味着遥控器的HEAD指向不正确的引用 换句话说,当您在git仓库中执行P4导入时,由于SHA1不正确,无法从该git仓库提交到P4。为什么?我不知道。
这就是为什么,在你提到的主题中,用户:
--import-local
(“导入refs/heads/
,而非refs/remotes
”)将P4回购克隆为B,修复B的HEAD
以引用在B中导入的p4主分支
将B克隆到C,一个非裸的仓库(它的工作树不是空的,你可以在其中工作)
B仅用于初始导入。
其余的工作是在C中完成的(没有错误的SHA1问题):
git-p4 sync
(除了remotes/p4/master
之外,还要在C remotes/origin/*
中声明)git-p4 submit
答案 1 :(得分:0)
9年后,Git 2.23(2019年第三季度)可能不再存在该问题
请参见commit c3f2358的Mike Mueller (mdymike
)(2019年5月28日)。
(由Junio C Hamano -- gitster
--在commit add59c4中合并,2019年6月17日)
p4 unshelve
:在Windows上修复“Not a valid object name HEAD0
”
git p4 unshelve
失败,出现以下错误:
fatal: Not a valid object name HEAD0
Command failed: git cat-file commit HEAD^0
(git version 2.21.0.windows.1, python 2.7.16)
pOpen
用于调用git-p4
命令的git
调用可以采用 字符串或数组作为第一个参数。
首选数组形式,因为将自动处理特定于平台的特殊字符转义。(https://docs.python.org/2/library/subprocess.html)
extractLogMessageFromGitCommit
方法使用的是字符串 格式,因此^
0参数中的脱字号(HEAD^
)字符不是 在Windows上逃脱了。
插入符号恰好是转义字符,这就是git命令接收HEAD0
的原因。可以通过在命令中键入
ECHO HEAD^0
来确认行为- 提示,它发出HEAD0
。解决方案是简单地使用将命令传递给
fOpen
的数组格式,无论如何建议还是在此代码的其他部分中使用该格式。