2012-09-18 46 views
13

這是一個noob問題,但我正在解決這個問題。我已經繼承了git子樹的一個奇怪問題,出現被repo腐敗。使用git subtree push「致命:壞對象」錯誤

這裏的情景:一個基於混帳項目A的子樹項目B.部署腳本使用的部分使用了推子樹項目B的回購:

git的子樹推-P子/路徑/名稱--squash [email protected]:MYCO/project_b.git projectb_branch

它開始推動提交和失敗

"fatal: bad object {sha}" 

我搜索了SHA源回購的git的日誌。它顯示了一個承諾:

git-subtree-dir: app/assets/ui 
git-subtree-split: {sha} 

目標回購(project_b)確實有與SHA提交但源回購沒有。我瀏覽了子樹shell腳本,我發現它在嘗試使用git log查找該對象時失敗(在調用git log -l --pretty = format:'%T'{sha})的toptree_for_commit函數中。

在這一點上,我在我的頭上,但渴望嘗試找到解決方案。我已經研究了這一點,只要我有限的知識許可,所以我歡迎任何提示,技巧或RTFM,可以讓我更接近解決方案。

我衷心的感謝!

+0

您的本地'git reflog'是否包含'{sha}'? – VonC

+0

nope。不幸的不是。 –

回答

3

我已經想通了;我在提交信息中找到了錯誤sha的引用。

解決這個問題的最簡單方法是:使用自己被創建的子樹分割,

  • 將內容移到不同的子目錄,然後
  • resplit子樹

    • 停止。

    混亂,但要少得多錯誤的實物比打了退堂鼓容易犯的問題提交,然後重新應用它們(在回答中建議有點類似的問題)。

    不漂亮,但它完成了工作。

  • +0

    有趣的反饋。 +1 – VonC

    20

    我只是碰到了這個問題,並能夠通過解析:

    git remote add shared $url 
    git fetch shared 
    git subtree push -P $prefix shared $branch 
    

    也許不禁爲所有,但不必砍在回購結構救了我。

    +3

    爲了澄清,像我這樣的noobs $ url,$ prefix和$ branch需要用你自己正確的URL,前綴和分支來填充。 – lnhubbell

    3

    我遇到了類似的問題:git subtree push ...用於電腦,在那裏我做了git subtree add ...上工作,但不會第二臺計算機上運行:

    $ git subtree push --prefix lib [email protected]:lib/lib.git master 
    ... 
    ... 
    fatal: bad object {sha} 
    

    修復是先拉檔案庫的改變(甚至雖然沒有變化):

    git subtree pull --prefix lib [email protected]:lib/lib.git master 
    

    即使它沒有拉任何東西,推動工作得很好,那麼:

    git subtree push --prefix lib [email protected]:lib/lib.git master 
    
    0

    git pull爲我工作。如果您當前的分支不是遠程分支,請使用

    `git push -u origin <branchname>` 
    
    相關問題