2017-04-05 13 views
2

I次のgitリポジトリを持ってGit - ネストされたサブモジュールを扱う?

  • Vector
  • Random
  • String

文字列のベクトルに依存し、サブモジュールとして追加します。 ベクトルサブモジュールランダム。ランダムは依存関係がありません。

  • Module: Random
  • Module: Vector
    • Submodule: Random
  • Module: String
    • Submodule: Vector
      • Submodule: Random

私はVectorの内部Randomサブモジュール、(NOT実際のモジュールRandom)の内部で何かを変更すると、自動的に別の場所に存在しModule: Randomまたは他のSubmodule Randomさんを更新しません。 。

Vector(モジュール)内の何かを変更すると、は、StringVectorを更新しません。 Stringのリポジトリにアクセスし、git pullと入力すると、最新のものであると主張します。 submodule Vectorの中にcdがあり、タイプがgit pullの場合、THENのみが実際にsubmodule Vectorを更新します。その中でStringリポジトリに変更をコミットすることを望みます。Stringの内部で何も変更されていません。

サブモジュールが50個あるリポジトリを持っているとどうなりますか?私のサブモジュールは常に変化しますと私は私のプロジェクトに触れるだけでなく、それが変更されたサブモジュールだったので、そのプルをコミットしたいすべての時間をプルする必要はありませんしたくありません。これを行う簡単な方法があるはずです。

+0

は、インフラストラクチャの一部として、Gitはあなたがサブモジュールを使用している場所のコミットのSHAを保持(すなわち子を更新するときに親にコミットする必要がある理由 - サブモジュールのコミット*が使用されていることを変更しました!)。これは、そのリポジトリのすべての "クライアント"が異なるバージョンでそれを使用している可能性があるからです。これは、新しい機能(およびバグ)を追加するときにクライアントを変更または更新したくないが、他のクライアントに最新の機能を使用させたい場合に重要になります。 – crashmstr

答えて

3

git pull optionsで述べたように、あなたが使用する必要があり、文字列(メイン親レポ)Aから:それも何もかかわらず、私はStringリポジトリに変更をコミットしたいことの上に

git pull --recurse-submodules=yes 
git submodule update --recursive 

内部がStringに変更されました。

確かに何かが変更されました:サブモジュールVectorのgitlink(レポインデックスの特別なエントリ)。

あなたは毎回あなたがStringの内容を更新する必要がある、とだけgit pull単純な正規をやりたい、一度だけ行うことをしたくない場合は、次の

git config --global fetch.recurseSubmodules true 

そして、あなたのことができautomate the submodule update as a post-checkout hook

同様に、文字列からの簡単なGitのプッシュはまた、任意の変更されたサブモジュールをプッシュするだろう、あなたは一度設定提供:

git config --global push.recurseSubmodules true 
+0

私はこれらの2行を**毎回行う必要があります**私は 'String'を扱っていますか?私のサブモジュールは絶えず変化していますので、何か作業をする前にそのようにする必要があります。 – Hatefiend

+0

@Hatefiendいいえ、 'String'から単純な基本的な' git pull'だけを行うために、これらのステップを自動化/設定することができます。私の編集された答えを見てください。 – VonC

+0

私の 'module vector'の中で、' git pull --recurse-submodules = yes'を実行し、 'Random'が変更されたことを正しく認識し、'サブモジュールランダムをフェッチする 'と言いました。その後、 'git submodule update --recursive'とタイプしましたが、何も起きていないようです。私は 'サブモジュールランダム'の中に 'cd'していましたが、本当に私の変更はそこにはありませんでした。私は 'git status'をやっていました。私は定期的な 'git pull'を行い、正しく変更を把握しました。それがうまくいかなかった理由は何ですか? – Hatefiend

関連する問題