2012-12-12 20 views
18

私は内部にgitサブモジュールを持つgit repoを持っています。サブモジュールはbitbucketでホストされています。サブモジュールのローカルコピーを最新のコミットに更新したいと思います。私は "git submodule update"を疲れましたが、何もしていません。だから私はサブモジュールのフォルダを削除してから "git submodule init"を実行しようとしました。しかし、それは最初のサブモジュールをコミットします。gitサブモジュールinitが最新のコミットを引き出さない

私のローカルサブモジュールを最新のコミットに更新するにはどうすればよいですか?

答えて

26

Gitはやっていることを正確にやっています。 git submodule updateは、サブモジュールを、親リポジトリ内の現在のコミットがサブモジュールがであることを指定するものに設定します。この方法で別のブランチ、古いコミットまたはタグをチェックアウトしてからgit submodule updateを実行すると、そのサブモジュールはその参照が期待するものに設定され、ソリューション全体で依存関係が満たされます。あなたがする必要がどのような

は次のとおりです。

cd mysubmoduledir 
git fetch 
git checkout master # or any other branch that you need the latest of 
git merge origin/master 
cd - # go back to the top repo 
git status # should show that your submodule changed 
git add mysubmoduledir 
git commit -m "Updated my solution to use latest sub project." 

短いバージョンは次のとおりです。

cd mysubmoduledir 
git pull # assumes you are already on the branch you need to be on 
cd - 
git commit -am "Updated submodule" # assumes you had no other modified files 

単語「更新」は、このサブモジュールのコマンドのための最良のではありません。それは実際には、 "親リポジトリのコミットが期待するコミットにサブモジュールを指す"ことを意味します。

サブモジュールを別のコミット(最新である必要はありません)に更新すると、そのディレクトリにcdする必要があります。通常のgit repoと同じように操作して、現在のコミットを望み通りに戻します。トップレベルのレポにこの変更をコミットします。

+0

どのようなコマンドのばかげた名前ですか? 明らかにgit submodule etadpuであるべきです –

+0

この "git submodule ilikepancakes"について考えてみると、おそらく意味をなさないでしょう。誰かが同意しない場合は、カーネルスペースapisのデザインに関する賢明なプレゼンテーションを読んでください: http://man7.org/conf/lca2013/Why_kernel_space_sucks-2013-02-01-printable.pdf –

+0

'git submodule ':https://chrisjean.com/git-submodules-adding-using-removing-and-updating/ –

5

サブモジュールを含む各git commitは、サブモジュールリポジトリ内の特定のコミットと結びついています。

git submodule updateコマンドは、サブモジュールのチェックアウトされたバージョンを親リポジトリの現在のバージョン用に記録されたコミットに更新するために提供されています。これは実際には、サブモジュールの古いバージョンを使用している親リポジトリの古いバージョンを調べている場合など、そのサブモジュールで現在チェックアウトしているバージョンより古いバージョンである可能性があります。

サブモジュールの新しいバージョンを取得するには、そのディレクトリに切り替えて、他のgitリポジトリと同様に更新します(たとえば、上流のリポジトリから取得するなど)。新しいコミットを作成した場合、またはサブモジュールのソースとして使用しているリポジトリと異なるリポジトリから取得した場合は、変更内容を必ずプッシュしてください。これが完了すると、親リポジトリに戻り、サブモジュールに変更をコミットして、現在のバージョンのサブモジュールと新しいバージョンをサブミットするために使用している新しいサブモジュールコミットを記録します。

2

サブモジュールを追加した後、単に以下のコマンドを試してみてください。 GitのVのは1.8.x v1.7.x用

git submodule update --init --recursive --remote 

ため

git submodule update --init --recursiveまたはv1.6のための

git pull --recurse-submodules。x

git submodule foreach git pull origin master 

あなたのgitのバージョンを確認してください。

git version 
関連する問題