1
votes

Mettre la liste des fichiers modifiés dans le message de commit git

J'essaie d'ajouter un alias à mon .gitconfig qui ajoutera automatiquement tous les fichiers modifiés du dépôt actuel au message de validation.

J'ai essayé de travailler avec la sortie de git status --porcelain en utilisant cut et awk .

J'ai awk pour fonctionner mais je suis sûr qu'il existe une meilleure solution qui produira un message de commit plus agréable.

# in my .gitconfig
g = !git commit --all --message "edited:$(git status --porcelain | awk '{printf \"%s%s\",(NR>1?\",\":\"\"),$2} END{print \"\"}')"
# on the command-line
git commit --all --message "edited:$(git status --porcelain | awk '{printf \"%s%s\",(NR>1?\",\":\"\"),$2} END{print \"\"}')"

Depuis git log , je vois des messages de commit comme edited:dir1/file1,dir2/file2.

Je voudrais nettoyer le code et / ou améliorer le message de validation.


4 commentaires

Je pense que git diff --cached --name-status donnerait un statut plus précis des fichiers validés.


Git sait que les fichiers sont modifiés et quelles lignes. Le message doit expliquer pourquoi. Lorsque vous ne voulez pas le dire à chaque commit, pensez à créer un fichier .git_reason et utilisez-le comme message par défaut. Chaque fois que vous changez de projet / histoire / tâche, vous pouvez écraser la raison par défaut.


Si vous voulez voir ce qui a changé dans un commit, utilisez git show ou git show --stat sur ce commit (voir aussi git log --raw ). Si vous voulez voir pourquoi l ' humain qui a fait ce changement , a fait ce changement, lisez le message du journal - mais pour que cela fonctionne, l'humain qui fait le changement doit en fait Décrivez, à l'humain lisant le message du journal à l'avenir, pourquoi il ou elle a fait ce changement.


Parfois, git est utilisé pour contrôler des actifs autres que le code source qui sont produits par des personnes dont on ne peut raisonnablement pas s'attendre à ce qu'elles écrivent le message (artistes). Produire un message une liste des fichiers modifiés est une assez bonne amélioration par rapport à l'utilisation d'un message fixe comme "Illustration modifiée". Le message est alors utile dans un fichier journal visualisé sur GitHub ou dans une visionneuse de journal (IDE, Tortoise).


3 Réponses :


0
votes

Si vous utilisez l'interface de ligne de commande pour git commit (comportement par défaut), il vous suffit de décommenter les lignes pertinentes qui sont déjà générées par Git. Recherchez la ligne avec Modifications à valider et sous cette ligne, il devrait y avoir des lignes indiquant les fichiers modifiés / ajoutés / supprimés / déplacés.


2 commentaires

y a-t-il un moyen de le faire automatiquement en utilisant un crochet?


Cela dépasse mes connaissances



4
votes

Ces informations sont déjà disponibles dans votre commit. Il vous suffit d'exécuter git log --stat pour le voir.

J'utilise si souvent que j'ai défini un alias pour celui-ci dans mon .gitconfig : p>

[alias]
    ls = log --stat

Donc, chaque fois que j'utilise git ls , j'obtiens la sortie statistique.


0 commentaires

1
votes

J'ai trouvé une solution qui fait exactement ce que je veux, mais c'est assez horrible.

Voici à quoi cela ressemble dans mon .gitconfig:

g = "!f() { git commit -am \"$(echo $@)\" && git push; }; f" "$([ -z \"$(git status --porcelain | grep '^\\s\\?A\\s')\" ] || git status --porcelain | grep '^\\s\\?A\\s' | awk 'BEGIN{print \"Added:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?C\\s')\" ] || git status --porcelain | grep '^\\s\\?C\\s' | awk 'BEGIN{print \"Copied:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?D\\s')\" ] || git status --porcelain | grep '^\\s\\?D\\s' | awk 'BEGIN{print \"Deleted:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?M\\s')\" ] || git status --porcelain | grep '^\\s\\?M\\s' | awk 'BEGIN{print \"Modified:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?R\\s')\" ] || git status --porcelain | grep '^\\s\\?R\\s' | awk 'BEGIN{print \"Renamed:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')";

Désolé si ma question n'était pas claire.

L'idée est que je peux simplement taper git g à

  1. ajouter des modifications dans les fichiers suivis,
  2. commit (avec un message à moitié décent) et
  3. pousser.

Exemple de message de validation:

Ajouté: file1, file2 Supprimé: trash, rubbish Modifié: work_in_progress


0 commentaires