git-p4提交失败,显示“不是有效的对象名称HEAD~261”

时间:2010-04-22 17:02:42

标签: git perforce git-p4

我有一个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中;不需要完整的历史记录。感谢。

2 个答案:

答案 0 :(得分:0)

fatal: Not a valid object name

应该意味着遥控器的HEAD指向不正确的引用 换句话说,当您在git仓库中执行P4导入时,由于SHA1不正确,无法从该git仓库提交到P4。为什么?我不知道。

这就是为什么,在你提到的主题中,用户:

  • 使用--import-local(“导入refs/heads/,而非refs/remotes”)将P4回购克隆为B,
  • make B(p4 repo的Git克隆)a bare repo(所以你不会在其中工作,因为它的工作树是空的)
  • 修复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 c3f2358Mike 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的数组格式,无论如何建议还是在此代码的其他部分中使用该格式。