J'utilise Git à partir de la ligne de commande et j'essaie d'ajouter un saut de ligne au message de validation (en utilisant git commit -m ""
) sans entrer dans Vim.
Est-ce possible?
Bien sûr, la façon dont cela fonctionne dépend de votre Shell. Dans Bash, vous pouvez utiliser des guillemets simples autour du message et laisser le guillemet ouvert, ce qui rendra l'invite Bash pour une autre ligne jusqu'à la fermeture du guillemet. Comme ça:
git commit -m 'Message
goes
here'
Alternativement, vous pouvez utiliser un "ici document" (également appelé heredoc):
git commit -F- <<EOF
Message
goes
here
EOF
Si vous voulez simplement, par exemple, une ligne de tête et une ligne de contenu, vous pouvez utiliser:
git commit -m "My head line" -m "My content line."
En utilisant Git depuis la ligne de commande avec Bash, vous pouvez effectuer les opérations suivantes:
git commit -m "this is
> a line
> with new lines
> maybe"
Il suffit de taper et appuyez sur Enter lorsque vous voulez une nouvelle ligne, le symbole ">" signifie que vous avez appuyé sur Enteret il y a une nouvelle ligne. D'autres réponses fonctionnent aussi.
Vous devriez pouvoir utiliser
git commit -m $'first line\nsecond line'
De la manuel de Bash :
Les mots de la forme $ ' chaîne ' sont traités spécialement. Word se développe en chaîne , les caractères d'échappement avec barre oblique inversée étant remplacés conformément à la norme ANSI C.
Cela inclut la prise en charge des nouvelles lignes, comme indiqué ci-dessus, ainsi que des codes hex et Unicode et autres. Accédez à la section liée pour voir une liste des caractères d'échappement avec barre oblique inversée.
Ajout de sauts de ligne à votre commit Git
Essayez ce qui suit pour créer un message de validation multiligne:
git commit -m "Demonstrate multi-line commit message in Powershell" -m "Add a title to your commit after -m enclosed in quotes,
then add the body of your comment after a second -m.
Press ENTER before closing the quotes to add a line break.
Repeat as needed.
Then close the quotes and hit ENTER twice to apply the commit."
Puis vérifiez ce que vous avez fait:
git log -1
Vous devriez vous retrouver avec quelque chose comme ça:
La capture d'écran provient d'un exemple que j'ai configuré à l'aide de PowerShell avec Poshgit.
Faire quelque chose comme
git commit -m"test\ntest"
ne fonctionne pas, mais quelque chose comme
git commit -m"$(echo -e "test\ntest")"
fonctionne, mais ce n'est pas très joli. Vous configurez une commande git-commitlb
dans votre PATH
qui fait quelque chose comme ceci:
#!/bin/bash
message=$1
git commit -m"$(echo -e "$message")"
Et utilisez-le comme ceci:
git commitlb "line1\nline2\nline3"
Un mot d'avertissement, j'ai l'impression que la convention générale consiste à avoir une ligne de résumé comme première ligne, puis deux sauts de ligne, puis un message étendu dans le message de validation, si bien que quelque chose comme ceci romprait cette convention. Vous pouvez bien sûr faire:
git commitlb "line1\n\nline2\nline3"
J'espère que cela ne mène pas trop loin de la question affichée, mais en définissant l'éditeur par défaut puis en utilisant
git commit -e
pourrait être beaucoup plus confortable.
De documentation Git :
-m <msg>
- message = <msg>
Utilise le <msg> donné comme message de validation. Si plusieurs options-m
sont fournies, leurs valeurs sont concaténées en tant que paragraphes distincts.
Donc, si vous cherchez à regrouper plusieurs messages de commit, cela devrait faire le travail:
git commit -m "commit message1" -m "commit message2"
Il n'y a pas besoin de compliquer les choses. Après le -m "text...
, on obtient la ligne suivante en appuyant sur Enter. Quand Enter est appuyé _ >
apparaît. Lorsque vous avez terminé, mettez simplement "
et appuyez sur Enter:
$ git commit -m "Another way of demonstrating multicommit messages:
>
> This is a new line written
> This is another new line written
> This one is really awesome too and we can continue doing so till ..."
$ git log -1
commit 5474e383f2eda610be6211d8697ed1503400ee42 (HEAD -> test2)
Author: ************** <*********@gmail.com>
Date: Mon Oct 9 13:30:26 2017 +0200
Another way of demonstrating multicommit messages:
This is a new line written
This is another new line written
This one is really awesome too and we can continue doing so till ...
J'utilise zsh sur un Mac et je peux poster des messages de validation multilignes entre guillemets doubles ("). En gros, je continue à taper et à appuyer sur Entrée pour les nouvelles lignes, mais le message n'est envoyé à Git que lorsque j'ai fermé les guillemets et renvoyé. .
En Bash/Zsh, vous pouvez simplement utiliser des sauts de ligne littéraux dans des guillemets:
git commit -m 'Multi-line
commit
message'
ANSI-C citant fonctionne également en Bash/Zsh:
git commit -m $'Multi-line\ncommit\nmessage'
Vous pouvez également demander à Git d'utiliser un éditeur de votre choix pour éditer le message de validation. À partir de la documentation sur git-commit :
L’éditeur utilisé pour éditer le message du journal de validation sera choisi parmi la variable d’environnement
GIT_EDITOR
, la variable de configurationcore.editor
, la variable d’environnementVISUAL
ou la variable d’environnementEDITOR
( dans cet ordre). Voir git-var pour plus de détails.
Si vous utilisez Bash, appuyez sur C-x C-e
(Ctrl+xCtrl+e) et ouvrira la commande en cours dans votre éditeur préféré.
Vous pouvez changer l'éditeur préféré en modifiant VISUAL
et EDITOR
.
C'est ce que j'ai dans mon .bashrc
:
export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export Sudo_EDITOR='emacsclient -t'
Personnellement, je trouve plus facile de modifier les messages de commit après coup dans vi
(ou quel que soit l'éditeur de votre choix de git) plutôt que sur la ligne de commande, en faisant git commit --amend
juste après git commit
.
Voici une liste des solutions ayant échoué sous Windows avec le shell standard cmd.exe (pour vous faire gagner du temps d'essai et d'erreur!):
_git commit -m 'Hello
_ Enter ne fonctionne pas: il ne demandera pas de nouvelle ligne
_git commit -m "Hello
_ Enter idem
_git commit -m "Hello^
_ Enter idem
_git commit -m 'Hello^
_ Enter _World'
_ ressemble à travailler parce qu'il demande "Plus?" et permet d'écrire une nouvelle ligne, mais finalement en faisant _git log
_ vous verrez que c'est toujours un message d'une ligne ...
TL; DR: Même si sous Windows, l’analyse en ligne de commande fonctionne différemment , et _^
_ permet une entrée multiligne, cela n’aide en rien.
Enfin git commit -e
est probablement la meilleure option.
Malheureusement, git ne semble pas autoriser les nouveaux caractères dans son message. Il existe déjà diverses solutions raisonnables ci-dessus, mais lors de la création de scripts, celles-ci sont gênantes. Ici, les documents fonctionnent aussi, mais peuvent aussi être un peu trop ennuyeux à traiter (pensez aux fichiers yaml)
Voici ce que j'ai fait:
git commit \
--message "Subject" \
--message "First line$(echo)Second line$(echo)Third Line"
Même si cela reste également moche, cela permet de créer des "lignes uniques" qui peuvent encore être utiles. Comme d'habitude les chaînes sont des variables ou combinées avec des variables, les vilaines peuvent être réduites au minimum.