コミットする前に段階的なファイルをどのようにグレップしますか?
-
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前提条件のフック。