2017-01-13 4 views
2

私の現在のgit statusは次のとおりです。サブモジュールの新しいコミットを除いて `-u`を追加するには?

modified: Gemfile 
modified: Gemfile.lock 
modified: ... many more files 
modified: submodule_1 (new commits) 
modified: submodule_2 (new commits) 
modified: ... many more updated submodules ... 

はどのようにサブモジュールの新しいコミットを除き、私にgit add -uしていますか?

その後、私は何を達成したいことは git add -uのと同じです

git reset HEAD submodule_1 submodule_2 ... submodule_n、またはgit add -u Gemfile Gemfile.lock ...all other files that are not submodules...

答えて

1

の同等のgitは-uが行われている追加すると、すべてのサブモジュールのパスをリセットする必要があります。 「List submodules in a git repository

git config --file .gitmodules --get-regexp path | awk '{ print $2 }' | xargs git reset -- 

に記載したよう
これは、すべてのサブモジュールパスを一覧表示し、それぞれにgit resetを行うだろう。

同様のアイデア、from this gist

for i in `git config -f .gitmodules --get-regexp path | cut -d" " -f2` ; do git reset -- $i ; done 

決勝ソリューション、git add -uを行い、サブモジュールをリセットしbashrcに/ zshrcのfunnction:

gitaddus() { 
    git add -u 
    git config -f .gitmodules --get-regexp path | awk '{ print $2 }' | xargs git reset -- >/dev/null 
    git status 
} 

(改善の余地はまだあります、例えばこれをチェックサブモジュールはすでにインデックスに追加されているので、git resetはありません。

+0

@Nowaker OK、私は混乱しました。私は自分の答えを編集しました。 – VonC

+0

ありがとう@VonC。私はそれを関数にして 'git add -u'を追加しました。 – Nowaker

+0

@Nowaker素晴らしい!それを関数として追加することもできますし、 'git addus'(ファイル拡張子なし)と呼ばれるbashスクリプト(Windowsでも)を作成して、' git addus'と呼ぶことができます。 'git-addus'が' $ PATH'または '%PATH%'にある場合、 'git addus'と呼ばれるとき、Gitによってbashとして実行されます。これは 'git-xxx'というスクリプトで動作します。 – VonC

関連する問題