Domanda

Quindi, prima di eseguire git commit spesso mi verrà eseguito il seguente:

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

ho pensato che fosse simile a:

git diff --cached

(che vi mostrerà tutti i cambiamenti che si stanno per commettere, vale a dire. Vi mostrerà il diff nei file in scena).

Purtroppo, ho appena scoperto che l'opzione --cached per git grep dice semplicemente git a "soli" un'occhiata a tutto nel suo indice.

Così come posso correre git grep e lo hanno grep solo attraverso i miei file in scena?

(Sì, lo so che potrei semplicemente fare git diff --cached e la ricerca in questo, ma avrei preferito avere la capacità programmatica a grep attraverso i miei file in scena.)

È stato utile?

Soluzione

Se si dispone di un sistema Unix-like scocca, la risposta è piuttosto semplice:

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

Questo verrà eseguito git grep nella lista dei file in scena.

Altri suggerimenti

Un sacco di pre-commit ganci usano git diff-index --cached -S<pat> REV per trovare cambiamenti che aggiungono o rimuovono un particolare modello. Quindi nel tuo caso, git diff-index --cached -Sdebugger HEAD. Si consiglia di aggiungere -u per ottenere un diff pure, altrimenti solo identifica il file offendere.

Per prima cosa è necessario per ottenere un elenco di file dall'indice (esclusi i file cancellati). Questo può essere fatto con la seguente:

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

In secondo luogo è necessario utilizzare il: prefisso per accedere al contenuto di un file nella indice corrente (messa in scena ma non ancora impegnati) vedi gitrevisions manuale per ulteriori informazioni.

git show :<file>

Infine ecco un esempio di mettere tutto insieme a grep questo elenco di 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

ecco un esempio di un git pre-commit hook che utilizza questo metodo per verificare che gli anni di copyright siano aggiornati in file da impegnare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top