Question

Alors avant d'exécuter git commit je souvent exécutez la commande suivante:

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

Je pensais que c'était semblable à:

git diff --cached

(qui vous montrera tous les changements que vous êtes sur le point de commettre, à savoir. Vous montrer la diff dans vos fichiers mis en scène).

Malheureusement, je viens de découvrir que l'option --cached pour git grep indique simplement git à regarder « seulement » à tout dans son index.

Alors, comment puis-je exécuter git grep et ont seulement grep mes dossiers mis en scène?

(Oui, je sais que je pourrais simplement faire git diff --cached et la recherche dans, mais je préférerais avoir la capacité programmatique à grep à travers mes fichiers mis en scène.)

Était-ce utile?

La solution

Si vous avez un shell de type Unix disponible, la réponse est assez simple:

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

se déroulera git grep sur la liste des fichiers mis en scène.

Autres conseils

Beaucoup de crochets pre-commit utilisent git diff-index --cached -S<pat> REV pour trouver des changements qui ajouter ou supprimer un modèle particulier. Donc, dans votre cas, git diff-index --cached -Sdebugger HEAD. Vous pouvez ajouter -u pour obtenir une diff aussi bien, sinon il identifie simplement le fichier incriminé.

Vous devez d'abord obtenir une liste des fichiers de l'index (à l'exception des fichiers supprimés). Cela peut être fait avec ce qui suit:

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

Ensuite, vous devez utiliser le préfixe pour accéder au contenu d'un fichier dans le indice actuel (mis en scène mais pas encore engagé) voir gitrevisions manuel pour plus d'informations.

git show :<file>

Enfin, voici un exemple de mettre tous ensemble grep cette liste de fichiers

# 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

est ici un exemple d'un git pre-commit hook qui utilise cette méthode pour vérifier que les années de droit d'auteur sont à jour dans les fichiers à engager.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top