2010-04-22 91 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