Que signifie «écrit il y a 7 jours; commis il y a 14 heures »signifie sur GitHub?

21

Je vois cela sur ce référentiel GitHub :

entrez la description de l'image ici

Qu'est-ce que ça veut dire? Comment quelque chose peut-il être "créé il y a 7 jours" et "commis il y a 14 heures"?

annuler
la source
Git pourrait-il mesurer les horodatages entre les fichiers qu'il a édités et quand il a réellement validé et poussé? Je ne vois pas d'utilité pour une telle fonctionnalité, mais c'est un peu ce que le libellé implique ..
Seth
@Seth C'est ce que je pensais au début, mais je n'avais jamais entendu parler de Git faisant quoi que ce soit avec des horodatages.
Annuler
@Seth Git ignore les horodatages des fichiers. Le committer peut modifier l'horodatage de l'auteur à la volée en utilisant commit --date=. Schwern l'explique très bien.
ADTC
@Undo J'espère que vous ne confondez pas "il y a 14 heures" avec "il y a 14 jours" ... Maintenant, ce serait vraiment étrange, d'avoir quelque chose de commis qui, apparemment, n'a même pas été écrit jusqu'à 7 jours plus tard ... Je ' m ne sais pas si Git empêche de définir un horodatage d'auteur supérieur à l'horodatage du committer; il s'en fiche probablement.
ADTC

Réponses:

21

Git a un concept distinct de l'auteur (la personne qui a écrit le code) et de committer (la personne qui l'a engagé dans le référentiel). De même, il peut y avoir des dates différentes pour les deux. Ce sont généralement les mêmes.

Vous voudriez qu'ils soient différents principalement si la personne qui écrit le code ou soumet le correctif n'a pas d'accès push au référentiel comme dans les projets qui utilisent des listes de diffusion pour les soumissions de correctifs. Dans ce cas, la personne disposant d'un accès push appliquerait le correctif et s'exécuterait git commitavec les commutateurs --authoret--date ou en utilisant les variables d'environnement GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL et GIT_AUTHOR_DATE (documentées dans git-commit-tree .

L'autre cas utilise git cherry-pickou git rebase. Le committer est la personne qui fait le choix, et l'auteur est l'auteur du commit d'origine. Git se chargera de définir l'identité et la date de l'auteur pour vous.

Vous pouvez voir ces informations dans le référentiel avec git log --pretty=fuller.

commit 21550561941b078ea1862b882ec89f26696ff5bb (HEAD, origin/master, origin/HEAD, master)
Author:     thiagopnts <[email protected]>
AuthorDate: Tue Nov 18 14:52:49 2014 -0200
Commit:     Thiago Pontes <[email protected]>
CommitDate: Tue Nov 25 09:46:58 2014 -0200

    open repository url if confirmed, closes #1
Schwern
la source
1
git rebaseentraîne également la mise à jour de la date de validation tandis que la date de l'auteur reste la même.
cjm
@cjm Vous avez raison! rebase et cherry-pick se comportent tous deux de la même manière à cet égard. Cela a du sens, un rebase peut être considéré comme plusieurs choix de cerise.
Schwern
1
Pour appliquer des correctifs à partir du courrier, il y a aussi git am , qui prend automatiquement la date et l'auteur du message.
deltab
6

Cela ressemble à un mélange entre la façon dont Git fonctionne avec les dates et la façon dont il a été référencé avec les mots clés de clôture de GitHub .

Git sépare les dates de validation et de création. Dans Pro Git, ils font un peu la différence :

L'auteur est la personne qui a écrit l'œuvre à l'origine, tandis que l'auteur est la dernière personne à avoir appliqué l'œuvre. Donc, si vous envoyez un correctif à un projet et que l'un des membres principaux applique le correctif, vous obtenez tous les deux du crédit - vous en tant qu'auteur et le membre principal en tant que committer.

Ainsi, alors que le code lui-même a été validé / écrit "il y a 7 jours" (localement), il n'a été "appliqué" ou corrigé au code qu'il y a "14 heures", car il n'était pas vu dans la télécommande jusqu'à ce qu'il soit référencé close. message.

Huit jours de malaise
la source
2
Bien que je ne l'ai pas testé, je ne pense pas que les informations sur l'auteur aient été ajoutées par les mots clés de fermeture de Github. Les identités et les dates des auteurs et auteurs sont intégrées dans l'ID de validation. Si Github modifiait l'un de ces éléments, il changerait l'ID de validation sur l'extrémité distante. Les référentiels distants et locaux divergeraient. L'auteur ne pourrait ni pousser ni tirer sans le forcer.
Schwern
2
S'engager n'est pas la même chose que pousser à distance. N'oubliez pas que presque tout dans Git peut être fait localement, y compris les commits. Vous pouvez valider en premier (ce qui donne les deux horodatages) et pousser plus tard (qui télécharge simplement le commit sur distant mais ne donne aucun horodatage). Il n'y a pas d '«horodatage push» car il n'est pas important de savoir quand un commit a été poussé - il peut être (et est souvent) poussé et tiré autant de fois.
ADTC