web-dev-qa-db-fra.com

Démarrer un message git commit avec un signe de hachage (#)

Git traite les lignes commençant par # comme commentaire lors de la validation. Cela est très gênant lorsque vous travaillez avec un système de suivi de ticket et que vous essayez d'écrire le numéro du ticket au début de la ligne, par ex.

#123 salt hashed passwords

git supprimera simplement la ligne du message de validation. y a-t-il un moyen d'échapper au hash? j'ai essayé \ et !, mais rien ne fonctionne. espaces blancs avant # sont conservés, ils ne constituent donc pas non plus une solution efficace au problème.

256
knittl

Ce comportement fait partie du comportement de "nettoyage" par défaut de git commit. Si vous souhaitez conserver les lignes commençant par #, Vous pouvez utiliser un autre mode de nettoyage.

Par exemple.

git commit --cleanup=whitespace

Si vous faites cela, vous devez faire attention à supprimer toutes les lignes # Que vous ne voulez pas voir apparaître dans le commit.

209
CB Bailey

Notez que, puisque git1.8.2 (février 2013) , vous pouvez utiliser un caractère différent de '# 'pour la ligne commentée dans le message de validation.

Cela vous permet d'utiliser '# 'pour votre référence de numéro de bogue.

Divers "indices" que Git donne quand il demande à l'utilisateur de modifier des messages dans l'éditeur sont commentés avec '#' par défaut.

Le core.commentChar La variable de configuration peut être utilisée pour personnaliser cette '# 'à un personnage différent.


En théorie, vous pouvez mettez un core.commentChar Word (plusieurs caractères), mais git 2.0.x/2.1 sera plus strict (T3 2014).

Voir commit 50b54fd par Nguyễn Thái Ngọc Duy (pclouds) :

config: soyez strict sur core.commentChar

Nous ne supportons pas comment chaines (du moins pas encore). Un codage sur plusieurs octets pourrait également être mal interprété.

Le test avec deux virgules est mis à jour car il y a violation. Il est ajouté avec le patch qui introduit le core.commentChar in eff80a9 (Autorise un "commentaire de caractère" personnalisé - 2013-01-16). Ce n'est pas clair pour moi pourquoi que le comportement est voulu.


git 2.0.x/2.1 (T3 2014) ajoutera une sélection automatique pour core.commentChar:
Voir commit 84c9dc2

Quand core.commentChar est "auto", le caractère de commentaire commence par '# 'comme par défaut mais s'il est déjà dans le message préparé, trouvez un autre caractère dans un petit sous-ensemble. Cela devrait arrêter les surprises car git supprime certaines lignes de manière inattendue.

Notez que git n’est pas assez intelligent pour reconnaître '# 'en tant que caractère de commentaire dans les modèles personnalisés et le convertir si le caractère de commentaire final est différent.
Les lignes "#" des modèles personnalisés font partie du message de validation. Donc, ne l'utilisez pas avec des modèles personnalisés.

La liste des caractères candidats pour "auto" est:

# ; @ ! $ % ^ & | :

Cela signifie une commande comme git commit -m '#1 fixed issue' va automatiquement changer le commentChar en ';', car '# 'a été utilisé dans le message de validation.

120
VonC

Les réponses ici sont bonnes et détaillées, mais pour un git noob comme moi, la personnalisation des options de configuration de git n'est pas si évidente. Voici un exemple pour changer de # à ; pour les caractères de commentaire:

git config core.commentChar ";"

C'est tout ce que vous devez faire.

72
Matthieu Napoli

Vous pouvez utiliser l'option de ligne de commande -m:

git commit -m "#123 fixed"
60
Olivier Verdier

Si vous faites une base interactive, alors quand vous sauvegardez votre message de commit sans rien (parce que le # au début en a fait un commentaire et donc il a été ignoré) git vous montrera quoi faire:

Aborting commit due to empty commit message.
Could not amend commit after successfully picking 5e9159d9ce3a5c3c87a4fb7932fda4e53c7891db... 123 salt hashed passwords
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

Alors, modifiez simplement le message:

git commit --amend -m "#123 salt hashed passwords"

et continuez la rebase:

git rebase --continue
30
Owain Williams

git commit --cleanup=scissors Devrait être utilisé. C'est ajouté à Git v2.0. le 2014.05.21

de git commit --help

--cleanup=<mode>
  scissors
    Same as whitespace, except that everything from (and including) the line
    "# ------------------------ >8 ------------------------" is truncated if the message
    is to be edited. "#" can be customized with core.commentChar.
22
Sungam

Utilisez un préfixe différent pour le numéro de ticket. Ou ajoutez un mot au numéro de ticket, par exemple, "Bug n ° 42". Ou ajoutez un caractère d'espacement unique à la ligne; si vous souhaitez supprimer cet espace, vous pouvez ajouter un hook de validation pour cela.

Personnellement, je préférerais que ce type de manipulation de message de validation ne soit pas effectué par un hook, car cela peut être très irritant lorsqu'il se déclenche lorsque vous ne le souhaitez pas. La solution la plus simple est probablement de repenser le problème.

3
wilhelmtell

Tous mes commits commencent par #issueNumber donc je mets ce passe-partout à mon vim .git/hooks/commit-msg:

NAME=$(git branch | grep '*' | sed 's/* //') 
echo "$NAME"' '$(cat "$1") > "$1"

Supposons donc que nous ayons une branche #15 et nous faisons un message de validation add new awesome feature. Avec cette approche, le message de validation final sera #15 add new awesome feature.

1
valignatev