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

Har*_*lan 5 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...)
Run Code Online (Sandbox Code Playgroud)

所以,我已经将原点复制到一个干净的新导演,得到了一个看起来很可爱的合并文件树,并git status表明我是最新的。但:

> git-p4 submit
fatal: Not a valid object name HEAD~261
Command failed: git cat-file commit HEAD~261
Run Code Online (Sandbox Code Playgroud)

git 邮件列表上的这个线程似乎是相关的,但我无法弄清楚他们对所有 A、B 和 C 做了什么。有人可以澄清“无效的对象名称”是什么意思,以及我能做些什么来解决这个问题?我想要做的就是定期将源/主节点快照到 Perforce 中;不需要完整的历史记录。谢谢。

Von*_*onC 0

fatal: Not a valid object name
Run Code Online (Sandbox Code Playgroud)

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

这就是为什么,在您提到的线程中,用户:

  • --import-local使用(“导入到refs/heads/,而不是refs/remotes”)将 P4 存储库克隆到 B 中,
  • 使 B(p4 存储库的 Git 克隆)成为一个裸存储库(因此您永远不会在其中工作,因为它的工作树是空的)
  • 修复HEADB 的 引用 B 中导入的 p4 master 分支

  • 将 B 克隆到 C,一个非裸存储库(它的工作树不为空,您可以在其中工作)

B 仅在初始导入时存在。

其余的工作是用 C 语言完成的(不存在 SHA1 不正确的问题):

  • git-p4 syncremotes/p4/master(除了 之外 还要在 C 中声明remotes/origin/*
  • git-p4 submit