Je me demande s'il existe un moyen d'afficher une date push associée à chaque commit dans le journal git. Si ce n'est pas possible, existe-t-il un moyen de voir tous les commits sous une certaine poussée.
J'écris un programme qui doit garder une trace des commits lorsqu'ils sont poussés. Étant donné que le journal git est trié par date de validation, pas par date de transmission, je ne suis pas en mesure de voir les validations les plus récentes qui sont transmises. Par exemple, si un utilisateur s'engage dans son référentiel local 2 jours avant de pousser vers le maître, ce commit sera placé derrière 2 jours d'autres validations dans le journal du référentiel maître.
git reflog --date=local origin/master
(noteorigin/
) pour voir la liste des poussées. Sinon, seuls les validations, les extractions et les extractions étaient dans la liste (ce qui est également utile). En fait, j'ai été signalé par la réponse de @ JonathanDay .Git est un système de contrôle de version distribué, vous devez donc définir soigneusement ce que vous entendez par "date de diffusion". Par exemple, supposons que l'utilisateur A envoie des validations dans le référentiel de l'utilisateur B. Un peu plus tard, l'utilisateur B pousse ces mêmes validations vers un troisième référentiel. Quelle date 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é puissent déterminer quand quelque chose a été publié dans le référentiel. Si c'est vrai, vous devrez collecter ces informations dans le référentiel partagé.
Les mauvaises nouvelles
Malheureusement, il n'y a aucun moyen d'ajouter la date aux messages de validation. Cela changerait l'ID de validation (qui est un hachage SHA1 du contenu), causant toutes sortes de problèmes.
La bonne nouvelle
Heureusement, Git a une fonctionnalité (relativement nouvelle) appelée notes . Cette fonctionnalité vous permet d'attacher du texte arbitraire aux commits, qui
git log
peuvent s'afficher. Les notes peuvent être modifiées et partagées avec d'autres.Vous pouvez utiliser la fonction de notes pour joindre un message «Cette validation a été reçue le [date]» à chaque validation telle qu'elle est reçue par le référentiel partagé.
Voir
git help notes
pour plus de détails.Comment enregistrer la date
Voici l'approche que je recommande:
post-receive
hook de votre référentiel partagé pour parcourir chaque commit nouvellement accessible pour chaque référence mise à jour.Pour chaque commit, ajoutez quelque chose comme "[utilisateur] de [repository_url] a ajouté ce commit à [ref] le [date]" à la note du commit.
Vous pouvez utiliser une référence de notes dédiée à cet effet (comme
refs/notes/received-on
) au lieu de la référence par défautrefs/notes/commits
. Cela évitera les conflits avec les notes créées à d'autres fins.receive
hook pour refuser les mises à jour de la référence de vos notes (pour empêcher les utilisateurs de jouer accidentellement ou intentionnellement avec les notes).Dites à tous les utilisateurs d'exécuter les commandes suivantes depuis leur arbre de travail:
Cette étape est nécessaire car Git ignore par défaut les références sans branche et sans balise dans les référentiels en amont.
Ce qui précède suppose que les références sont uniquement avancées, jamais supprimées ou mises à jour de force. Vous voudrez probablement que le
post-receive
crochet ajoute également des notes «supprimé le [date]» pour gérer ces cas.la source
Cela semble fonctionner assez bien pour moi. La date de validation (% cd) est trompeuse car elle n'est pas nécessairement la même que la date d'envoi. L'option --date = iso, cependant , affichera la date push / fetch .
Notez que si vous avez récupéré à partir de l'origine / maître, il imprimera la date à laquelle vous l'avez récupéré; PAS la date à laquelle quelqu'un d'autre a poussé la validation.
Bonus: vous pouvez bien sûr faire un formatage plus joli. Jusqu'à présent, j'aime ce code couleur. C'est un peu difficile à taper cependant. Cela donnera le SHA au rouge, le sélecteur de reflog au cyan et le reflog au vert.
la source
Jetez un œil à
git reflog show master
. Probablement pas le format exact que vous souhaitez, mais devrait vous orienter dans la bonne direction.Une autre idée consiste à exécuter un script dans un crochet push.
la source
git reflog show master
? Je souhaite pouvoir afficher la date de diffusion des validations individuelles de chaque utilisateur..git/logs/refs/heads/master
il montre un horodatage.git reflog
pour cette question.Cette réponse concernant l'inspection du reflog sur la télécommande pourrait aider ( https://stackoverflow.com/a/8791295/336905 ) en vous donnant des informations sur quelle branche a été poussée même à travers elle ne montre pas quels commits ont été poussés, mais vous pourrait inter-corréler en trouvant la prochaine poussée après la date de validation locale. Pas infaillible, mais pratique si vous n'avez pas déjà implémenté l'excellente suggestion de notes de @RichardHansen publiée plus tôt
la source
origin/branch
ne montrera que les changements effectués sur la machine actuelle , c'est extrêmement utile! Pour une utilisation quotidienne, je ne veux pas implémenter de hooks, donc pour une simple question "Hmmm, quand j'ai poussé ce commit la semaine dernière?" - cela fonctionne très bien.Vous pouvez également consulter l'heure de modification du fichier du fichier objet de validation dans le répertoire "objects" du référentiel git sur le serveur lui-même.
la source
Pourquoi git AuthorDate est-il différent de CommitDate?
AuthorDate
correspond à la première création du commit.CommitDate
correspond à la dernière modification du commit (ex: rebase).Vous pouvez les obtenir avec les
--pretty
options de formatage:Donc, si vous et d'autres développeurs faites
git rebase
avantgit push
, vous vous retrouverez avec une date de validation postérieure à la date de l' auteur .Cette commande affiche la date de validation:
git log --pretty=fuller
la source
Je suppose que vous pouvez utiliser la notation suivante pour obtenir la date d'envoi: git log -g --date = local
la source