13

これは初心者の質問ですが、私はこれを解決するために銃の下にいます。レポの破損のように見えるgit サブツリーに関する奇妙な問題を継承しました。

シナリオは次のとおりです。git ベースのプロジェクト A のサブツリーがプロジェクト B で使用されています。デプロイ スクリプトの使用の一部で、サブツリーがプロジェクト B のリポジトリにプッシュされます。

git サブツリー プッシュ -P サブ/パス/名前 --squash git@github.com:MyCo/project_b.git projectb_branch

コミットのプッシュを開始し、失敗します

"fatal: bad object {sha}" 

ソース リポジトリの git ログで SHA を検索しました。コミットに表示されます:

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

ターゲット リポジトリ (project_b) には実際にその SHA でのコミットがありますが、ソース リポジトリにはありません。サブツリー シェル スクリプトを調べてみたところ、git log (git log -l --pretty=format:'%T' {sha} を呼び出す toptree_for_commit 関数内) でそのオブジェクトを検索しようとすると、失敗していることがわかります。

この時点で、私は頭を悩ませていますが、解決策を見つけようとしています。限られた知識が許す限りこれを調査したので、解決策に少し近づくためのヒント、トリック、または RTFM を歓迎します。

心から感謝します!

4

4 に答える 4

23

この問題に遭遇したばかりで、次の方法で解決できました。

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

すべてに役立つわけではないかもしれませんが、レポ構造をハックする必要がなくなりました。

于 2013-01-08T04:59:35.770 に答える
3

私はこれを理解しました。コミット情報に間違ったshaの参照を見つけました。

これを修正する最も簡単な方法は次のとおりです。

  • 作成されたサブツリー分割の使用を停止し、
  • コンテンツを別のサブディレクトリに移動してから
  • サブツリーを再分割します。

面倒ですが、問題のあるコミットへのコミットを取り消してから再適用するよりもエラーが発生しにくくなります (同様の質問への回答で提案されています)。

美しくはありませんが、仕事は完了しました。

于 2012-10-04T02:38:32.240 に答える
0

git pull私のために働いた。現在のブランチがリモート ブランチでない場合は、次を使用してリモート ブランチにします。

`git push -u origin <branchname>`
于 2014-06-06T18:31:16.303 に答える