.gitignore
peut ignorer des fichiers entiers, mais existe-t-il un moyen d'ignorer des lignes de code spécifiques lors du codage?
J'ajoute fréquemment et à plusieurs reprises les mêmes lignes de débogage dans un projet, seulement pour me rappeler de les supprimer avant de valider. Je voudrais juste garder les lignes dans le code et les ignorer.
Voici comment vous pouvez le faire avec filtres git :
<project root>/.gitattributes
(Sera engagé dans le repo)<project root>/.git/info/attributes
(Ne sera pas validé dans le repo)*.rb filter=gitignore
, C’est-à-dire un filtre appelé gitignore
sur tous les fichiers *.rb
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’est-à-dire ne rien faire lors de l'extraction d'un fichier depuis le dépôtRemarques:
Bien sûr, cela concerne les fichiers Ruby, appliqués quand une ligne se termine par #gitignore
, Appliqués globalement dans ~/.gitconfig
. Modifiez cela comme vous le souhaitez besoin pour vos buts.
Attention!!
Cela laisse votre fichier de travail différent du repo (bien sûr). Toute vérification ou changement de base signifiera que ces lignes seront perdues! Cette astuce peut sembler inutile puisque ces lignes sont régulièrement perdues lors du check-out, du rebase ou du pull, mais j'ai un cas d'utilisation spécifique pour pouvoir l'utiliser.
Juste git stash save "proj1-debug"
lorsque le filtre est inactif (désactivez-le temporairement dans gitconfig
ou quelque chose du genre). De cette façon, mon code de débogage peut toujours être git stash apply
'Ajouté à mon code à tout moment, sans craindre que ces lignes ne soient jamais validées par accident.
J'ai une idée possible pour traiter ces problèmes, mais j'essaierai de la mettre en œuvre une autre fois.
Merci à Rudi et jw013 pour avoir mentionné les filtres et les gitattributes git.
J'ai eu un problème similaire en écrivant Java. Ma solution consistait à baliser le code que je ne voulais pas valider, puis à ajouter un crochet de pré-validation qui rechercherait mon balisage:
#!/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