git grep
インデックス/キャッシュ内の新しいファイルまたは変更されたファイルのみを検索することは可能ですか?
(これのユースケースは、将来のコミットなどの「デバッグ」コードを探すpre-commitフックで使用するconsole.log
ことです。しかし、私はconsole.log
「既存の」コードに煩わされることはありません。できれば、これも一致しないでしょう。そのインスタンスconsole.log
は削除されますが、私はそれらの一致と一緒に暮らすことができます!)
これを行う方法は、を介してgit grep
ではなく、まったく異なるコマンドを使用することであることがわかりました。これは、たまたま検索できるようになっていますgit diff-index
。(単純さと直交性のためのもう1つの勝利...)
私が望んでいたことは、次の方法で達成できます。
$ git diff-index -U --cached -G <regexp> HEAD
私は通常、次のようなことをします。
git diff | grep TODO
あなたがそれを迷惑にするのに十分な変更された行を持っているなら、私は追加する| grep '^+'
か、オプションをいじり始め-[ABC]
ます。
リポジトリ内の新しいファイルまたは変更されたファイルを検出するというPerlプログラムがdirty
あり、それから私はただ言うことができますgrep string_to_find $(dirty)
。
#!/usr/bin/perl
use warnings;
use strict;
my @lines = qx/svn status 2>&1/;
exit if @lines == 0;
chomp @lines;
my $first = $lines[0];
if ( $first !~ /svn: warning: .+ not a working copy/ ) {
@lines = grep { !/^[?]/ } @lines; # Ignore unversioned files
s/^........// for @lines;
print "$_\n" for @lines;
exit;
}
@lines = qx/git status --short --untracked-files=no/;
chomp @lines;
s/^...// for @lines;
print "$_\n" for @lines;
検出するものに応じて、SubversionリポジトリまたはGitリポジトリでダーティファイルをチェックするのに十分賢いことに注意してください。
git pre-commitフック(.git / hooksディレクトリに実行可能としてマークされたシェルスクリプト)を作成して、コミット差分をスキャンして、新しく追加された行(+
「デバッグ」の先頭に記号が付いている行)を探すことができます。 「パターン)、およびexit 1
そのような行が見つかった場合は実行します。
これはgit commit
、コミットメッセージを編集するために$EDITORを開始する前にコミットを中止するように指示します。
変更された行をgrepするための小さなエイリアスは次のとおりです。
grep-changed = "!f(){ git diff-index -U -G \"$@\" HEAD; };f "
grep-staged = "!f(){ git diff-index -U --cached -G \"$@\" HEAD; };f "