2012-12-19 2 views
8

Ist es möglich, git grep zu erhalten, nur neue oder geänderte Dateien im Index/Cache zu suchen?git grep - aber beschränkt auf neue oder geänderte Dateien im Index

(Die Use-Case hierfür ist in einem pre-commit Haken zu verwenden, die für "debug" Code wie console.log in dem prospektiven begehen sieht. Aber ich bin von console.log in "bestehenden" Code nicht gestört. Vorzugsweise dies würde nicht auch Fälle von console.log übereinstimmen, die entfernt, aber ich kann mit diesen Anpassungs live!)

Antwort

12

Es stellt sich heraus, der Weg, dies zu tun ist nicht über git grep, aber durch einen ganz anderen Befehl, der auch in der Lage ist zu suchen: git diff-index.

$ git diff-index -U --cached -G <regexp> HEAD 
+0

Hinweis: Die Suche ist auf die geänderten Zeilen in neuen oder geänderten Dateien beschränkt. Um den gesamten Inhalt des geänderten Dateien zu suchen, finden Sie hier: https://stackoverflow.com/questions/15592933/how-to-grep-search-in-modified-files-of-working-directory-which-are-not- schon gewesen –

0

ich habe ein Perl-Programm dirty aufgerufen, die neuen oder geänderten Dateien in einem Repo erkennt, und dann kann ich nur sagen 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; 

Beachten Sie, dass es klug genug ist für schmutzige Dateien in einem Subversion-Repo oder ein Git-Repo zu überprüfen, je nachdem, welche es erkennt.

1

Sie können ein git erstellen pre-commit Haken (es ist nur ein Shell-Skript, als ausführbar markiert, in Ihrem .git/Haken-Verzeichnis), die durchsucht Ihre commit diff für alle neu hinzugefügten Zeilen (die mit + Symbol in der Beginnen Sie für Ihr "Debug" -Muster, und tun Sie eine exit 1, wenn es solche Zeilen gefunden.

Dies sagt git commit das Festschreiben abbrechen, bevor Sie sich $ EDITOR Starten der Commit-Nachricht bearbeiten.

4

ich normalerweise nur so etwas wie:

git diff | grep TODO 

Wenn Sie genug geändert Linien müssen, dass ärgerlich machen, dann füge ich hinzu | grep '^+' oder starten um mit -[ABC] Optionen verwirren.

+0

(gut, in der Regel 'svn diff' oder' hg diff' ...) – Tom

+0

Bitte lesen Sie die: (Ein weiterer Triumph für Einfachheit und Orthogonalität ...)

Was ich wollte, kann über erreicht werden Frage: Ihre Lösung enthält keine neu erstellten Dateien. – Bharat

Verwandte Themen