2016-03-30 21 views
1

私は2つのサブモジュールを含むGitHubリポジトリを持っています。私はこれらのサブモジュールにいくつかの変更を加え、それらをコミットしました。しかし、私はこれを正しく行っていないようです。Git - Fatal:参照はツリーではありません - ローカルサブモジュールのディレクトリが削除されました

私は最近、リポジトリのローカルコピーを失い、リモートを複製しようとしています。しかし、私は

git clone --recursive myrepo.git 

を実行すると、私はエラーを取得する:私はサブモジュールのリンクGitHubのをクリックすると

fatal: reference is not a tree: ... 
Unable to checkout ... in submodule path.... 
Unable to checkout ... in submodule path.... 

が、私は404エラーを取得します。

私には2つの質問があります。

  1. これらのサブモジュールを私がそれらに行ったコミットで復元することはできないようです。これは本当ですか?

  2. #1がtrueの場合。現在のアップストリームサブモジュールを取り戻す最善の方法は何ですか(上記のエラーを考慮して)?私は、サブモジュールに行ったコミットを手作業で簡単に再現することができます。

答えて

1

It seems it is not possible to restore these submodules with the commits I have made to them. Is this true?

はい、あなたはサブモジュールのコンテンツを犯したが、それぞれのリモートリポジトリにプッシュしなかったので。

If #1 is true. What is the best way to pull back in the current upstream submodules (considering the error above)?

あなたはそれらのgitlinksが自分のリモートレポに存在しているSHA1を参照するために、以前の状態でで(そのフォルダ名を意味する)サブモジュールgitlinkspecial entry in the indexをチェックアウトする必要があります。 listing their history

git log -- yourSubmodule 

によって
スタート前のコミット選んで、タイプ:

git show <previouscommit> -- yourSubmodule 

あなたは、エントリをgitlink SHA1はを参照しているが表示されます。

gitサブモジュールupdate -initを実行すると、そのgitlinkから古いSHA1の内容が復元され、そのサブモジュールフォルダにcdして以前に行ったコミットを復元できるようになります。
追加することを忘れないでください。をコミットし、そのサブモジュール内からをプッシュしてから、親リポジトリに戻り、コミットを追加してプッシュしてください。

+0

偉大な答え。ありがとうございました。サブモジュールをプッシュしようとすると、リモコンではなく元のレポにプッシュしようとしています。これを行う方法についてのリンクもありますか?これに対する答えを見つけるのは苦労します。 – DJElbow

+0

@DJElbowサブモジュールレポは、元のフォークされたレポではなく、独自のレポにプッシュするはずです。そのサブモジュールの中で実行された場合、git remote -vは何を返しますか?親ローカルレポで実行されたときと同じですか?もしそうなら、それはサブモジュールではありません。ちょうど普通のサブフォルダ。 – VonC

関連する問題