192 votes

Comment indiquer à git d'ignorer des lignes individuelles, c'est-à-dire gitignore pour des lignes de code spécifiques ?

.gitignore peut ignorer des fichiers entiers, mais existe-t-il un moyen d'ignorer des lignes de code spécifiques pendant le codage ?

J'ajoute fréquemment et à plusieurs reprises les mêmes lignes de débogage dans un projet, pour ensuite devoir me rappeler de les supprimer avant de valider le projet. J'aimerais simplement garder les lignes dans le code et que git n'en tienne pas compte.

92 votes

Je ne peux pas dire si c'est une idée terrible ou une idée brillante.

0 votes

@KyleStrand au moins, je peux l'ajouter aux lignes de débogage que je tape et me sentir en sécurité en sachant qu'elles ne seront pas accidentellement validées.

7 votes

Bien, c'est la partie "brillante".

165voto

Kache Points 2182

C'est comme ça que vous pouvez le faire avec filtres git :

  1. Créer/ouvrir le fichier gitattributes :
    • <project root>/.gitattributes (sera intégré dans le repo)
      OU
    • <project root>/.git/info/attributes (ne sera pas commise dans le repo)
  2. Ajouter une ligne définissant les fichiers à filtrer :
    • *.rb filter=gitignore c'est-à-dire exécuter un filtre nommé gitignore sur tous les *.rb fichiers
  3. Définir le gitignore dans votre gitconfig :
    • $ git config --global filter.gitignore.clean "sed '/#gitignore$/d'" c'est-à-dire supprimer ces lignes
    • $ git config --global filter.gitignore.smudge cat c.-à-d. ne rien faire lorsque le fichier est extrait du dépôt.

Notes :
Bien sûr, ceci est pour les fichiers ruby, appliqué quand une ligne se termine par #gitignore appliqué à l'échelle mondiale dans ~/.gitconfig . Modifiez-le comme vous le souhaitez pour vos besoins.

Attention !
Cela laisse votre fichier de travail différent du repo (bien sûr). Tout check out ou rebase signifie que ces lignes seront perdues ! Cette astuce peut sembler inutile puisque ces lignes sont perdues à plusieurs reprises lors d'un check out, d'un rebasement ou d'un pull, mais j'ai un cas d'utilisation spécifique pour m'en servir.

Juste git stash save "proj1-debug" pendant que le filtre est inactif (il suffit de le désactiver temporairement dans gitconfig ou autre). De cette façon, mon code de débogage peut toujours être git stash apply à mon code à tout moment sans craindre que ces lignes ne soient accidentellement validées.

J'ai une idée possible pour résoudre ces problèmes, mais j'essaierai de la mettre en œuvre une autre fois.

Merci à Rudi et à jw013 pour avoir mentionné les filtres git et les gitattributs.

2 votes

Ça ne devrait pas être : git config --global filter.gitignore.clean sed '/#gitignore$/d' puisque vous avez nommé le filtre gitignore

0 votes

Ah, en effet. En fait, il y a aussi un problème d'échappement des citations.

0 votes

Puis-je faire en sorte qu'il remplace cette ligne par quelque chose d'autre ? Par exemple, disons que je veux remplacer les lignes se terminant par #gitignore par "Voici une ligne de contenu".

45voto

Mike Points 88

J'ai eu un problème similaire en écrivant du code java. Ma solution était de marquer le code que je ne voulais pas valider et d'ajouter un hook pre-commit qui chercherait mon marquage :

#!/bin/bash
#
# This hook will look for code comments marked '//no-commit'
#    - case-insensitive
#    - dash is optional
#    - there may be a space after the //
#
noCommitCount=$(git diff --no-ext-diff --cached | egrep -i --count "(@No|\/\/\s?no[ -]?)commit")
if [ "$noCommitCount" -ne "0" ]; then
   echo "WARNING: You are attempting to commit changes which include a 'no-commit'."
   echo "Please check the following files:"
   git diff --no-ext-diff --cached --name-only -i -G"(@no|\/\/s?no-?)commit" | sed 's/^/   - /'
   echo
   echo "You can ignore this warning by running the commit command with '--no-verify'"
   exit 1
fi

0 votes

Le balisage est définitivement une solution moins effrayante et moins déclarative que le sed de filtrage ou autre. Bien joué.

3 votes

0 votes

Je voterais 100 fois plus fort si je pouvais. C'est une solution sûre et directe. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X