Puis-je ajouter des métadonnées à git s'engage? Ou puis-je cacher certaines balises dans gitk
Je veux associer des métadonnées personnalisées avec un git commit
. Spécifiquement pour enregistrer un examen ID à partir d'une revue de code, mais il pourrait être n'importe quoi. Tags sembler un moyen naturel de le faire, mais j'attends d'avoir un examen pour chaque commit et je ne veux pas encombrer le gitk
avec des tonnes de balises. Est-il un autre mécanisme pour ajouter des métadonnées personnalisées? Puis-je faire certaines balises invisibles? Si je pouvais dire gitk
de ne pas afficher les balises correspondant à certains de modèle ou de RE, qui seraient susceptibles de fonctionner, mais je ne vois pas un moyen de le faire.
InformationsquelleAutor Chris Nelson | 2010-04-21
Vous devez vous connecter pour publier un commentaire.
C'est précisément ce que git notes sont pour.
Git-notes
Avec
git notes
vous pouvez ajouter une “note” pour une livraison. Vous pouvez aussi les ajouterà d'autres objets Git, mais disons simplement se concentrer sur s'engage depuis que est ce
la question est à propos.
Une note est un Git objet, et peuvent en principe être “quelque chose” (arbitraire
de données). Mais nous allons nous concentrer sur quelque chose de simple et textuelles pour nos fins.
Exemple: examen id
La question mentionne examen id, donc, nous allons faire un peu de façon à représenter
une telle chose. Je ne sais pas ce que l'examen id vraiment ressembler, mais
j'espère que la suite serait judicieux:
Donc, c'est effectivement une paire clé-valeur. Ajoutons au-dessus de la chaîne de
le commit courant:
Si vous exécutez
git log
la note sera affichée en ligne:(†1)Un autre exemple
Bien sûr, vous pouvez ajouter plus de “subnotes” de la présente note (nous nous en tiendrons à
le simple
key: value
syntaxe, une valeur par ligne). Par exemple, si voustrouvé trois mois plus tard que le message de commit quelque chose
de mal, il suffit d'ajouter la correction de la note:
git log
:Nous utilisons
git notes append
afin d'ajouter facilement à ces données supplémentaires à l'remarque. Vous pouvez également utiliser
git notes edit
afin de modifier le fichierdirectement à.
Bien sûr, depuis un Git note n'est qu'un seul mutable fichier, vous pouvez l'exécuter
dans les conflits de fusion. Pour faire que moins probable, vous pouvez:
man git-notes
, dans la section “Notesfusion des stratégies”.
Visibilité
L'OP demandé:
> puis-je faire certaines balises invisibles?
Par défaut,
git log
n'affiche qu'une seule note, à savoir.git/refs/notes/commits
.commits
est juste une remarque en l'espace de noms.Peut-être vous voulez questions dans leur propre espace de noms:
Puisque c'est stockée dans
.git/refs/notes/issues
et pas dans.git/refs/notes/commits
, “Résout: #32” de ne pas s'afficher lorsque vous exécutezgit log
. Donc, vous avez effectivement fait ces notes sont invisibles par défaut.Si vous voulez qu'il soit démontré, passer
--notes=issues
àgit log
:Mais maintenant
.git/refs/notes/commits
sont cachés. Que l'on peut facilement êtreinclus:
Il y a des variables à configurer les notes sont affichées par défaut; voir
man git-config
.Avantages par rapport à des messages de commit
Les métadonnées peuvent bien sûr être enregistré dans le message de commit directement.(†2), Mais
des messages de validation sont immuables, donc, pour changer vraiment les moyens d'en faire un
tout nouveau commit, avec toutes les vagues les conséquences que cela implique.
Git-notes sur l'autre main sont mutables, de sorte que vous êtes toujours en mesure de
la révision. Et chaque modification d'une note est bien sûr la version
contrôlé. Dans notre cas, pour
.git/refs/notes/commits
:Partage de notes
Vos notes ne sont pas partagés par défaut; vous devez le faire explicitement. Et
comparé à d'autres refs, partage de notes n'est pas très convivial. Nous avons
pour utiliser le refspec syntaxe:
Ci-dessus va pousser toutes vos notes à votre télécommande.
Il semble que l'extraction de notes est un peu plus complexe, vous pouvez le faire si
vous spécifiez les deux côtés de la refspec:
Donc ce n'est certainement pas pratique. Si vous avez l'intention d'utiliser Git-notes
régulièrement, vous aurez probablement souhaitez configurer votre gitconfig à toujours chercher
notes:
(Source: https://git-scm.com/blog/2010/08/25/notes.html)
Du report des notes sur réécrit
Git a la désagréable par défaut, les notes ne sont pas reportés lorsqu'un commit
est réécrit. Donc, si par exemple rebase une série de commits, les notes s'
pas de report pour les nouveaux commits.
La variable
notes.rewrite.<command>
par défaut est défini àtrue
, donc on pourraitsupposons que les notes sont reporté. Mais le problème est que la variable
notes.rewriteRef
, qui détermine qui les notes seront reportés, n'a pas dedéfaut vaule. Pour définir cette valeur pour correspondre à toutes les notes, les tâches suivantes:
Maintenant, toutes les notes seront reportés lorsque vous faites des opérations de réécriture comme
git
.rebase
Du report des notes par e-mail patchs
Si vous utilisez
git format-patch
pour formater vos modifications à envoyer comme e-mails,et si vous avez des métadonnées stockées comme Git notes, vous pouvez passer à la
--notes
option pour
git format-patch
afin d'ajouter des notes au brouillon de message électronique.† 1: “C'est la valeur par défaut pour
git log
[...] quand il n'y a pas de--pretty
,--format
, ou--oneline
option sur la ligne de commande.” ―man git-log
, git version 2.10.2† 2: Une pratique/convention pour les métadonnées-en-commettre-des messages qui est utilisé dans des projets comme par exemple Git et le noyau Linux est d'ajouter des paires clé–valeur dans le “trailer” du message de commit, c'est à dire au fond. Voir, par exemple, ce commit par Linus Torvalds:
Voir:
man git-interpret-trailers