20

git grepインデックス/キャッシュ内の新しいファイルまたは変更されたファイルのみを検索することは可能ですか?

(これのユースケースは、将来のコミットなどの「デバッグ」コードを探すpre-commitフックで使用するconsole.logことです。しかし、私はconsole.log「既存の」コードに煩わされることはありません。できれば、これも一致しないでしょう。そのインスタンスconsole.log削除されますが、私はそれらの一致と一緒に暮らすことができます!)

4

5 に答える 5

19

これを行う方法は、を介してgit grepではなく、まったく異なるコマンドを使用することであることがわかりました。これは、たまたま検索できるようになっていますgit diff-index。(単純さと直交性のためのもう1つの勝利...)

私が望んでいたことは、次の方法で達成できます。

$ git diff-index -U --cached -G <regexp> HEAD
于 2012-12-27T11:32:14.100 に答える
13

私は通常、次のようなことをします。

git diff | grep TODO

あなたがそれを迷惑にするのに十分な変更された行を持っているなら、私は追加する| grep '^+'か、オプションをいじり始め-[ABC]ます。

于 2012-12-20T09:45:15.600 に答える
1

リポジトリ内の新しいファイルまたは変更されたファイルを検出するという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リポジトリでダーティファイルをチェックするのに十分賢いことに注意してください。

于 2012-12-19T15:27:14.653 に答える
1

git pre-commitフック(.git / hooksディレクトリに実行可能としてマークされたシェルスクリプト)を作成して、コミット差分をスキャンして、新しく追加された行(+「デバッグ」の先頭に記号が付いている行)を探すことができます。 「パターン)、およびexit 1そのような行が見つかった場合は実行します。

これはgit commit、コミットメッセージを編集するために$EDITORを開始する前にコミットを中止するように指示します。

于 2012-12-19T16:15:39.130 に答える
1

変更された行をgrepするための小さなエイリアスは次のとおりです。

    grep-changed = "!f(){ git diff-index -U -G \"$@\" HEAD; };f "
    grep-staged  = "!f(){ git diff-index -U --cached -G \"$@\" HEAD; };f "
于 2019-12-26T14:33:17.780 に答える