Git est un système de contrôle de version distribué, vous devez donc définir avec soin ce que vous entendez par "date de poussée". Par exemple, supposons que l'utilisateur A pousse quelques commits vers le dépôt de l'utilisateur B. Un peu plus tard, l'utilisateur B pousse ces mêmes commits vers un troisième dépôt. Quelle est la date qui vous intéresse ?
Je suppose que vous avez un référentiel partagé et que vous voulez que les utilisateurs de ce référentiel partagé soient en mesure de déterminer quand quelque chose a été publié dans le référentiel. Si c'est le cas, vous devrez collecter cette information dans le référentiel partagé.
La mauvaise nouvelle
Malheureusement, il n'y a aucun moyen d'ajouter la date aux messages de livraison. Cela changerait l'identifiant du commit (qui est un hash SHA1 du contenu), causant toutes sortes de problèmes.
La bonne nouvelle
Heureusement, Git dispose d'une fonctionnalité (relativement nouvelle) appelée notes . Cette fonctionnalité vous permet d'attacher un texte arbitraire aux commits, ce qui permet d'éviter les erreurs. git log
peut afficher. Les notes peuvent être modifiées et partagées avec d'autres personnes.
Vous pouvez utiliser la fonctionnalité de notes pour attacher un message "cette livraison a été reçue le [date]" à chaque livraison lorsqu'elle est reçue par le référentiel partagé.
Voir git help notes
pour les détails.
Comment enregistrer la date
Voici l'approche que je recommande :
-
Modifiez le post-receive
sur votre référentiel partagé pour parcourir chaque nouveau commit accessible pour chaque référence mise à jour.
-
Pour chaque livraison, ajoutez quelque chose comme "[utilisateur] de [repository_url] a ajouté cette livraison à [ref] le [date]" à la note de la livraison.
Vous pouvez utiliser un ref de notes dédié à cet effet (comme refs/notes/received-on
) au lieu de l'option par défaut refs/notes/commits
. Cela permet d'éviter les conflits avec des notes créées à d'autres fins.
-
Modifiez votre receive
crochet pour refuser les mises à jour de vos références de notes (pour empêcher les utilisateurs de modifier accidentellement ou volontairement les notes).
-
Dites à tous les utilisateurs d'exécuter les commandes suivantes à partir de leur arbre de travail :
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
Cette étape est nécessaire car Git ignore par défaut les références non-branches et non-balises dans les dépôts amont.
Ce qui précède suppose que les références sont seulement avancées, jamais supprimées ou mises à jour de force. Vous voudrez probablement avoir le post-receive
Le crochet ajoute également des notes "supprimé le [date]" pour gérer ces cas.