2012-05-04 34 views
30

私はgitのサブモジュールが大好きです。また、私はgitのサブモジュールが嫌いです。私が気に入っているのは、依存関係などをきれいに区切ることができる方法です。リポジトリの特定のコミットを指摘している点があります。しかし、私の場合は、別のプロジェクトで使用されるライブラリを構築しているので、別のプロジェクトにそれを保存したいと思っています。強制的にGitのサブモジュールを強制的に最新の状態にする

しかし、私はこのライブラリで毎日作業していて、ポインターの更新をコミットするために私のライブラリーを使用してアプリケーションに常に切り替えていなければなりません。

だから、私は常に更新してこのライブラリに追加している間に、ちょうど常にそれが指しているレポの頭にあるgitサブモジュールを持つことが可能ですか?

+0

は、このヘルプをしていますか? http://stackoverflow.com/questions/1777854/git-submodules-specify-a-branch-tag –

答えて

18

いいえ、これは仕様です。サブモジュールを他のリポジトリの「現在のヘッド」に向ける方法があった場合、メインリポジトリから履歴バージョン(タグ付きバージョンなど)を取得することは不可能です。チェックするサブモジュールのバージョンはわかりません。

これは言いましたが、git subtreeスクリプトに興味があるかもしれません。これにより、ワークフローと互換性のあるサブモジュールを使用して作業する別の方法が提供されます。私はちょうど最近、post on HNでこれを思い出した。

+2

はい、私が言っているのは、私の親リポジトリが自動的にサブモジュールポインタを更新するだけですサブモジュールでローカルにコミットされた変更があります。私がサブモジュールXを持つプロジェクトAを持っている場合、プロジェクトAで作業しているときにサブモジュールXに入ると、サブモジュールに1つ、次に親に2つのコミットが常に必要です。あまり変わっていないサブモジュールで作業しているのなら、大したことではありませんが、常に前後する必要があるときは、本当に面倒です。私はちょうど両方私のローカルレポをコミットすることができるように思われる – Ben

+1

翻訳:サブモジュールへの変更をコミットするときに私のためのサブモジュールのポインタの更新を自動的にコミットするために私のローカルレポを教えて... – Ben

+2

私はあなたがスクリプトを書くことができると思いますサブモジュールにコミットするときに使用する、それは自動的に親モジュール内の対応するコミットを行います。または、親モジュールの作業ディレクトリで実行するスクリプトを作成して、最後の親プロジェクトのコミット以降に更新されたサブモジュールを自動的にコミットすることもできます。 –

0

サブモジュールディレクトリ内で変更を加えないでください。それ自体はgit repoですか?この方法では、あなたのアプリは常に更新されたライブラリを持ちます。

警告:

  1. あなたはまだ(アプリ用)バージョンコントロールの変化を置くためにアプリのレポ内のサブモジュールの変更をコミットする必要があります。

  2. このライブラリを使用しているアプリよりも多くのアプリがある場合、常に有効なアプリは1つだけなので、これは機能しません。

24

私は "git submodule tracking latest" に言及するとして、あなたはgitの1.8.2(2013年3月)以来、サブモジュールは、ブランチのHEADを追跡することができます:

git submodule add -b <branch> <repository> [<path>] 

サブモジュールSHA1がまだ中に記録されていますgitlinkspecial entry in the index)として親レポ

しかしgit submodule update --remoteは、サブモジュールのリモートレポのブランチのHEADに一致するSHA1にそのエントリを更新します。既存のサブモジュールを持っている場合は

、とyou can make it follow a branch

cd /path/to/your/parent/repo 
git config -f .gitmodules submodule.<path>.branch <branch> 

cd path/to/your/submodule 
git checkout -b branch --track origin/branch 
    # if the master branch already exist: 
    git branch -u origin/master master 

cd /path/to/your/parent/repo 
git add path/to/your/submodule 
git commit -m "Make submodule tracking a branch" 
+0

'git submodule update --remote'を実行するたびに、サブモジュールがコミットに戻り、HEAD参照が失われます。 –

+0

' git submodule foreach git pull'は実行されません。 –

+0

@MarceloFilhoは、サブモジュールを考えると驚くことではありませんが、支店をチェックアウトしません。リモートブランチに従うように設定されている場合、 'git submodule update --remote --recursive'だけが必要なコマンドです。 .gitmodulesを調べて、それらのサブモジュールがブランチに従うかどうかを調べます。 – VonC

関連する問題