2010-04-22 93 views
3

我有一个git仓库,我想镜像到一个Perforce仓库。我已经下载了git-p4脚本(更新的版本不提供弃用警告),并且一直在使用它。我已经想出了如何从Perforce中引入更改,但是当我尝试将git repo的更改同步回来时出现错误。这是我到目前为止已经完成:git-p4提交失败,“没有有效的对象名HEAD〜261”

git clone [email protected]:asdf/qwerty.git 
git-p4 sync //depot/path/to/querty 
git merge remotes/p4/master  (there was a single README file...) 

所以,我复制原点到一个干净的新导演,得到了文件的分外妖娆合并树,git status显示我上TO-日期。但是:

> 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

为了澄清,我有一个git仓库(存储在github上,不是那么重要)中的现有代码库,以及一个空的Perforce仓库。我想定期将我的git repo的主分支快照转换为Perforce repo。我见过的所有git-p4示例假设Perforce回购是主要的,并且我正在创建一个新的git回购。对我来说并非如此。我不想以任何方式更改现有的git项目,但邮件列表中的说明和VonC的回复假定新工作在这个奇怪的双克隆新回购中。 – Harlan 2010-05-10 15:38:51

+0

我很抱歉你的赏金没有工作。可能是一个新的问题与不同的环境或不同的细节可能会有所帮助。 – VonC 2010-05-18 04:18:25

+2

邮件列表上的线程听起来像它有一些很好的信息,但链接被打破,谷歌的缓存或archive.org都没有副本。 – funroll 2013-05-02 14:29:57

回答

0
fatal: Not a valid object name 

应该表示远程的HEAD指向不正确的引用。
换句话说,当你在git仓库中进行P4导入时,由于SHA1不正确,无法从git仓库提交到P4。为什么?我不知道。

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

  • 克隆P4回购分为B与--import-local( “导入到refs/heads/,不refs/remotes”),
  • make B(Git的克隆P4的回购)一bare repo(所以你永远不会在它的工作,因为它的工作树为空)的
  • 解决B的HEAD引用B中导入的P4主分支

  • 克隆产品B到C,非裸露的回购协议(其工作树是不是空的,你可以在它的工作)

B为只有在那里初始进口。

工作的其余部分是在C(其中有没有不正确SHA1的问题)用做:

  • git-p4 sync(申报用C remotes/p4/master除了remotes/origin/*
  • git-p4 submit
+0

对不起,我不明白。你可以再试一次吗?谢谢。 – Harlan 2010-04-22 18:29:23

+0

@Harlan:我强调了repo'C'的作用。我不完全理解这个问题的确切原因,但我只是想说明在你提到的线索中提出的解决方法。 – VonC 2010-04-22 18:42:13

+0

此外,该邮件列表线程中的步骤似乎没有单独的git origin回购,我有,并且似乎有B和C在单独的机器上,这对我来说很困惑。 – Harlan 2010-04-22 18:48:12