コミットする前に段階的なファイルをどのようにグレップしますか?

StackOverflow https://stackoverflow.com/questions/4102151

  •  29-09-2019
  •  | 
  •  

質問

走る前に git commit 私はしばしば以下を実行します:

git grep --cached -l -I "debugger"

私はそれが似ていると思った:

git diff --cached

(これにより、コミットしようとしているすべての変更が表示されます。つまり、ステージングされたファイルの差分が表示されます)。

残念ながら、私はそれを見つけました --cached のオプション git grep Gitに、インデックス内のすべてを「のみ」見るように指示するだけです。

どうすれば実行できますか git grep そして、それは私の段階的なファイルを介してグレップするだけですか?

(はい、私は単にできることを知っています git diff --cached その中で検索しますが、段階的なファイルを根絶するプログラム的な能力があります。)

役に立ちましたか?

解決

UNIXのようなシェルが利用できる場合、答えは非常に簡単です:

git grep --cached "debugger" $(git diff --cached --name-only)

これは実行されます git grep 段階的なファイルのリスト。

他のヒント

多くのコミットフックの使用が使用されています git diff-index --cached -S<pat> REV 特定のパターンを追加または削除する変更を見つけるため。だからあなたの場合、 git diff-index --cached -Sdebugger HEAD. 。追加したいかもしれません -u diffも取得するために、それ以外の場合は、問題のあるファイルを識別するだけです。

まず、インデックスからファイルのリストを取得する必要があります(削除されたファイルを除く)。これは、次のことで実行できます。

git diff --cached --name-only --diff-filter=d HEAD

次に、以下を使用する必要があります:現在のインデックスのファイルのコンテンツにアクセスするには(段階的ではないがまだコミットされていない)参照 GitRevisions Manual詳細については。

git show :<file>

最後に、このファイルのリストをグレップするためにすべてをまとめる例があります

# Get a list of files in the index excluding deleted files
file_list=$(git diff --cached --name-only --diff-filter=d HEAD)

# for each file we found grep it's contents for 'some pattern'
for file in ${file_list}; do
    git show :"${file}" | grep 'some pattern'
done

また これが例です この方法を使用して、著作権年がコミットされるファイルで最新のものであることを確認するGit前提条件のフック。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top