2013-08-06 26 views
5

他のgitリポジトリのコードに依存するgitリポジトリがあります。この関係を表現し、サポートコードがユーザーのディレクトリ構造内の標準的な場所に存在することを保証するために、通常の方法でサブモジュールを使用します。サポートコードを更新することは十分に簡単です: 強制的にgitサブモジュールを更新することはできますか?

  • がコミット

    • がサブモジュールに変更を加えること
    • プッシュそれ
    • は、サブモジュールへの変更をコミットメインリポジトリへ
    • CD
    • それを押す

    問題は反対側にあります。

    場合はgitのプル(メインリポジトリを更新)
  • Gitのサブモジュールのinit(任意の新しい
    • :変更のこの種の後、他の開発者のために、彼らは3つのコマンドを実行するのに必要なコードの完全な、一貫性のあるセットを取得するにはサブモジュール)は、サブモジュール、含有しない、特に私たちの他のリポジトリのすべてであるため、これらのすべてを行うには、開発者を訓練することが困難であることが証明だ

  • gitのサブモジュールのアップデート(サブモジュールを更新する)を添加しましたプルで十分です。その結果、開発者は時代遅れのバージョンのサブモジュールを使用するコードを扱うことになり、その結果、疑わしい問題が発生し、追跡に時間がかかることがあります。 3つのコマンドをすべて実行し、 "これを使う!"と主張するシェルスクリプトを書く以外に、これをもっと自動化するための方法はありますか?

  • 答えて

    4

    あなたがしようとする同僚を求めることができる:

    git config --global fetch.recurseSubmodules on-demand 
    

    git config man pageから:このオプションは、いずれかのブール値にまたはオンに設定することができ

    fetch.recurseSubmodulesデマンド。

    • ブール値に設定すると、trueに設定するとサブモジュールに無条件に再帰し、falseに設定した場合はまったく再帰しないようにフェッチとプルの動作が変更されます。
    • オンデマンド(デフォルト値)に設定すると、スーパープロジェクトがサブモジュールの参照を更新するコミットを取得したときに、フェッチとプルは移入されたサブモジュールにのみ再帰的に入ります。

    他の代替は、1より複雑なコマンドを実行するためにそれらを求めるために、次のようになります。

    git pull --recurse-submodules=on-demand 
    

    上記git config設定は、開発者が簡単なgit pullを行うことを可能にするという利点があります。

    +0

    ありがとう:

    #!/bin/sh git pull git submodule init git submodule update 

    はgitのエイリアスを追加します。これは優れています。 –

    0

    私は2つの解決策が考えられます。

    は、スクリプトを書く:

    #in ~/.gitconfig 
    [alias] update-all = !git pull && git submodule init && git submodule update 
    
    +0

    @VonCははるかに優れた答えを持っています。私はそれがあなたが探しているものだと思います。^_ ^ –

    関連する問題