Pregunta

Así que antes de ejecutar git commit a menudo a correr el siguiente:

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

pensé que era similar a:

git diff --cached

(que todos los cambios que está a punto de cometer, es decir. Le mostrará el diff en sus archivos organizado simulacros).

Por desgracia, me acabo de enterar de que la opción de --cached git grep simplemente le dice a Git que "sólo" mirar todo en su índice.

Entonces, ¿cómo puedo ejecutar git grep y tienen sólo grep a través de mis archivos por etapas?

(Sí, sé que sólo podía hacer git diff --cached y la búsqueda de eso, pero yo preferiría tener la capacidad programática a grep a través de mis archivos por etapas.)

¿Fue útil?

Solución

Si usted tiene un tipo Unix shell disponibles, la respuesta es bastante simple:

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

Esto ejecutará git grep en la lista de archivos por etapas.

Otros consejos

Una gran cantidad de pre-commit ganchos utilizan git diff-index --cached -S<pat> REV para encontrar los cambios que añaden o eliminan un patrón particular. Así, en su caso, git diff-index --cached -Sdebugger HEAD. Es posible que desee añadir -u para obtener un diff, así, de lo contrario, simplemente identifica el archivo de ofender.

En primer lugar usted necesita para obtener una lista de archivos del índice (con exclusión de los archivos eliminados). Esto se puede hacer con lo siguiente:

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

En segundo lugar es necesario utilizar el: prefijo para acceder a los contenidos de un archivo en el índice actual (por etapas, pero todavía no aceptada) gitrevisions Manual para obtener más información.

git show :<file>

Finalmente he aquí un ejemplo de ponerlo todo junto a grep esta lista de archivos

# 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

he aquí un ejemplo de un git gancho pre-commit que utiliza este método para comprobar que los años de derechos de autor están al día en los archivos que se ha comprometido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top