Co znaczy „autor 7 dni temu; popełnione 14 godzin temu ”na GitHub?

21

Widzę to w tym repozytorium GitHub :

wprowadź opis zdjęcia tutaj

Co to znaczy? Jak coś może być „autorstwa 7 dni temu”, a jednak „popełnione 14 godzin temu”?

Cofnij
źródło
Czy git mógłby mierzyć znaczniki czasu między edytowanymi przez siebie plikami a momentem, w którym faktycznie popełnił i wypchnął? Nie widzę zastosowania takiej funkcji, ale to w pewnym sensie sugeruje to sformułowanie ...
Seth
@Seth Tak myślałem na początku, ale nigdy nie słyszałem, by Git robił cokolwiek ze znacznikami czasu.
Cofnij
@Seth Git ignoruje znaczniki czasu pliku. Osoba zatwierdzająca może zmieniać znacznik czasu autora w locie za pomocą commit --date=. Schwern wyjaśnia to bardzo ładnie.
ADTC
@ I mam nadzieję, że nie mylisz „14 godzin temu” z „14 dni temu” ... To byłoby naprawdę dziwne, mieć coś popełnionego, co najwyraźniej nie było jeszcze autorstwa, aż 7 dni później… m nie jestem pewien, czy Git uniemożliwia ustawienie znacznika czasu autora większego niż znacznik czasu osoby zatwierdzającej; to chyba nie obchodzi.
ADTC

Odpowiedzi:

21

Git ma osobną koncepcję autora (osoby, która napisała kod) i osoby odpowiedzialnej (osoby, która przekazała go do repozytorium). Podobnie mogą być różne daty dla obu. Zazwyczaj są takie same.

Chcielibyście, aby różniły się przede wszystkim, jeśli osoba pisząca kod lub przesyłająca łatkę nie ma dostępu wypychanego do repozytorium, jak w projektach wykorzystujących listy mailingowe do przesyłania poprawek. W takim przypadku osoba z dostępem push zastosuje łatkę i uruchomi git commitsię za pomocą przełączników --authori--date lub używając zmiennych środowiskowych GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL i GIT_AUTHOR_DATE (udokumentowane w drzewie git-commit-tree .

Innym przypadkiem jest użycie git cherry-picklub git rebase. Osoba odpowiedzialna jest osobą wykonującą wybieranie wiśniowe, a autor jest autorem oryginalnego zatwierdzenia. Git zajmie się ustawieniem dla Ciebie tożsamości i daty autora.

Możesz zobaczyć te informacje w repozytorium za pomocą 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
źródło
1
git rebasepowoduje również aktualizację daty zatwierdzenia, podczas gdy data autora pozostaje taka sama.
cjm
@cjm Masz rację! rebase i cherry-pick zachowują się tak samo pod tym względem. To ma sens, rebase można traktować jako wielokrotne wybieranie wiśni.
Schwern
1
Do nakładania łatek z poczty służy też git am , który automatycznie pobiera datę i autora z wiadomości e-mail.
deltab
6

Wygląda to na mieszankę między tym, jak Git działa z datami, a tym, w jaki sposób odniesiono go do zamykających słów kluczowych GitHub .

Git rozdziela daty zatwierdzenia od autora. W Pro Git nieco się różnią :

Autorem jest osoba, która pierwotnie napisała dzieło, a osoba odpowiedzialna to osoba, która jako ostatnia zastosowała dzieło. Tak więc, jeśli wyślesz łatkę do projektu, a jeden z głównych członków zastosuje łatkę, oboje dostaniesz kredyt - ty jako autor, a główny członek jako zlecający.

Tak więc, chociaż sam kod został zatwierdzony / napisany „7 dni temu” (lokalnie), nie został „zastosowany” ani załatany do kodu do „14 godzin temu”, ponieważ nie był widoczny na pilocie, dopóki nie wspomniano o zamknięciu wiadomość.

Osiem dni złego samopoczucia
źródło
2
Chociaż go nie testowałem, nie sądzę, aby informacje o autorze zostały dodane przez słowa kluczowe zamykające Github. Tożsamości podmiotu zatwierdzającego i autora oraz daty są umieszczane w identyfikatorze zatwierdzenia. Gdyby Github zmienił którykolwiek z nich, zmieniłby identyfikator zatwierdzenia na zdalnym końcu. Odległe i lokalne repozytoria byłyby rozbieżne. Autor nie byłby w stanie pchać ani ciągnąć bez wymuszenia.
Schwern
2
Zatwierdzanie to nie to samo, co wypychanie na odległość. Pamiętaj, że prawie wszystko w Git można zrobić lokalnie, łącznie z zatwierdzeniami. Możesz najpierw zatwierdzić (co daje oba znaczniki czasu), a następnie wcisnąć później (co jedynie przesyła zatwierdzenie do pilota, ale nie podaje żadnego znacznika czasu). Nie ma znacznika czasu „push”, ponieważ nie ma znaczenia, kiedy wypychano zatwierdzenie - można go (i często jest) wypychać i wyciągać dowolną liczbę razy.
ADTC