154 votes

Pourquoi git AuthorDate est-il différent de CommitDate ?

J'ai regardé dans mes journaux git et j'ai constaté que l'AuthorDate et le CommitDate sont légèrement différents pour certains de mes commits. De la git log --pretty=fuller sortie :

commit 3a5912f90dc5227f308e99f95152fbee2301c59a
Author:     <hidden>
AuthorDate: Fri Jun 15 10:57:22 2012 +0800
Commit:     <hidden>
CommitDate: Fri Jun 15 11:14:37 2012 +0800

L'Auteur et l'Engagé sont les mêmes (moi).

Comment cela se fait-il ? Je suis perplexe depuis des jours.

Il y en a plus - cela s'est produit dans 17 des 341 commits :

+------------------------------+-------------------------------+
| from_unixtime(authored_date) | from_unixtime(committed_date) |
+------------------------------+-------------------------------+
| 2012-06-15 10:57:22          | 2012-06-15 11:14:37           |
| 2012-06-15 14:39:54          | 2012-06-15 14:48:57           |
| 2012-06-19 12:28:21          | 2012-06-19 12:29:41           |
| 2012-06-21 18:16:25          | 2012-06-21 18:28:48           |
| 2012-06-26 17:30:54          | 2012-06-26 17:33:55           |
| 2012-07-13 11:41:43          | 2012-07-13 11:42:17           |
| 2012-07-13 11:56:02          | 2012-07-13 12:13:22           |
| 2012-07-13 12:05:09          | 2012-07-13 12:12:24           |
| 2012-07-12 18:38:49          | 2012-07-13 12:26:35           |
| 2012-07-13 11:00:47          | 2012-07-13 12:25:15           |
| 2012-07-16 14:10:54          | 2012-07-16 14:15:01           |
| 2012-07-13 12:56:51          | 2012-07-16 13:49:48           |
| 2012-07-16 14:10:54          | 2012-07-16 14:19:46           |
| 2012-07-24 16:05:05          | 2012-07-24 16:05:48           |
| 2012-07-24 17:42:58          | 2012-07-24 17:43:33           |
| 2012-07-24 17:42:58          | 2012-07-24 17:45:18           |
| 2012-07-26 16:55:40          | 2012-07-26 16:55:53           |
+------------------------------+-------------------------------+

226voto

eckes Points 17277

Le site date de l'auteur notez quand cette livraison a été faite à l'origine (c'est-à-dire quand vous avez terminé le git commit ). Selon la documentation de git commit la date de l'auteur peut être remplacée par l'option --date interrupteur.

Le site date d'engagement est modifié à chaque fois que le commit est modifié, par exemple lors du rebasage de la branche dans laquelle se trouve le commit sur une autre branche ( plus ).

La même chose pourrait se produire si vous faites votre commit et envoyez votre patch à un autre afin d'appliquer le patch dans un autre repo : la date de l'auteur sera la date de votre commit. git commit la date de livraison sera fixée à cette date lorsque le patch sera appliqué dans l'autre dépôt.

Si vous envoyez le patch à deux collègues, il y aura une seule date d'auteur mais deux dates de livraison différentes.

Ceci est également mentionné dans le Livre Git :

Vous vous demandez peut-être quelle est la différence entre auteur y commettant . Le site auteur est la personne qui a écrit le correctif à l'origine, alors que l'option commettant est la personne qui a appliqué le patch en dernier. Ainsi, si vous envoyez un correctif à un projet et que l'un des membres du noyau applique le correctif, vous êtes tous les deux crédités - vous en tant qu'auteur et le membre du noyau en tant que commettant.

41voto

Michael Anderson Points 21181

La date de l'auteur sur un commit est préservée sur rebase / cherry-pick etc. Mais la date du commit est modifiée.

4voto

Rishav Points 1731

Je me suis retrouvé dans une situation où github affichait des dates de livraison différentes pour les éléments suivants . git log et je pensais que c'était un bug de Github.

Il s'avère que github montre le CommitDate y git log montre le AuthorDate (sans le fuller drapeau).

C'est arrivé parce que j'ai pris deux commits d'une branche différente. Pendant le cherry picking, l'horodatage des commits change comme lors de l'exécution de la commande commit --append .

Git rebase a retenu la date de validation dans mon cas.

Pour vérifier l'AuthorDate et le CommitDate dans le journal git, utilisez aussi --format=fuller Docs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X