2014-05-21 5 views
6

Ich mache ein Git-Protokoll, um alle Commits aufzulisten und dann zu analysieren. Mit diesem Befehl:Datum für nicht datierten Commit suchen?

git log --encoding=UTF-8 --date=local --pretty=format:'%H,%P,%at,%ct,%an,%s' 

In einigen seltsamen repos i verpflichtet sowohl Autor ohne Datum erhalten und Termine zu begehen. Ich habe versucht, mit dem einfach:

git log 

und was ich bekam, war ein 1970 Datum.

Ein Repo, wo dies passiert ist SamWM/jQuery-Plugins, zum Beispiel in der Commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48.

Obwohl in GitHub wir haben und interessantes Datum, wenn wir es suchen gehen.

Kann mir jemand helfen, ein interessantes Date für dieses Commit zu bekommen, das irgendwo in der Mitte sein sollte?

Antwort

4

git show --format=raw zeigt:

 
commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 
tree d63aeb159635cb231e191505a95a129a3b4a7b38 
parent 9276202f1c0dcc360433df222c90f7874558f072 
author SamWM <[email protected]> 1288370243 --700 
committer SamWM <[email protected]> 1288370243 --700 

Die Zeitzone Informationen hier ist ungültig, und ich bin nicht sicher, wie er Autor, dies zu schaffen verwaltet. Andere Commits verwenden das korrekte -0700 Format.

Sie können dieses mit GNU Datum konvertieren, mit dem Wissen, dass --700-0700 sein sollen:

 
$ TZ=Etc/GMT+7 date -d @1288370243 
Fri 29 Oct 09:37:23 GMT+7 2010 

so die richtige Antwort in Git üblichem Format Fri 29 Oct 09:37:23 2010 -0700 ist.

Hinweis: Ich verwende TZ=Etc/GMT+7, nicht GMT-7. Sie können sehen, indem Sie den gleichen Befehl mit verschiedenen Commits ausführen, die korrekte Zeitzoneninformationen haben, dass das Ergebnis genau das ist, was es sein soll. date 's Zeitzone Konvertierung ist genau das falsche Weg herum für das, was hier benötigt wird, und durch die Negierung des Offsets ich den Fehler stornieren.

Sie können solche Commits in einer lokalen Kopie mit git hash-object und git replace beheben. Zunächst wird eine Plausibilitätsprüfung, dass meine Befehle sind in dieser Reihenfolge:

 
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 | 
> git hash-object -t commit -w --stdin 
e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 

Dieser Befehl geladen die angegebene begehen, schrieb sie unmodifizierten zurück und zeigte die neu geschriebenen den Hash begehen. Ich benutze das als einen Plausibilitätscheck: wenn ich einen anderen Hash habe, müsste etwas in meinem Befehl falsch sein.

Jetzt ist es möglich, etwas einfügen eine feste verpflichten zu erstellen:

 
$ git cat-file commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 | 
> sed -e 's/--700/-0700/' | 
> git hash-object -t commit -w --stdin 
46694249ed3d519b0c934222520b9dc6d8557fa1 

und Verwendung, die stattdessen verpflichten behoben:

 
$ git replace e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 46694249ed3d519b0c934222520b9dc6d8557fa1 

Danach werden alle Verweise auf e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 bei 46694249ed3d519b0c934222520b9dc6d8557fa1 aussehen wird statt und git show e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 beginnt jetzt mit:

 
commit e9dddaf24c9de45d9b4efdf38eff7c30eb200f48 
Author: SamWM <[email protected]> 
Date: Fri Oct 29 09:37:23 2010 -0700 

    Update version number, make text formatting and indentation consistent with the rest of the code 
+0

@rt fpessoa Sie müssen rohe verwenden, um das Problem zu überprüfen, aber Sie können das Problem lokal beheben, so dass Sie nie wieder darunter leiden werden, und ich habe meine Antwort geändert, um zu zeigen, wie. – hvd

+0

@rtfpessoa Sie müssen nicht zum Repository wechseln, Sie können die neuen Objekte in Ihrem lokalen Klon dieses Repositorys erstellen, wie ich es getan habe, und Sie sehen immer noch die ursprünglichen Commit-IDs. – hvd

+0

@rtfpessoa Das ist wahr, es ist in der Tat eine sehr spezifische Lösung, aber es ist auch eine sehr spezifische Situation. So etwas habe ich noch nie gesehen oder gelesen; Ich bin mir ziemlich sicher, dass dies kein weit verbreiteter Fehler ist und sehr wenige Repositories davon betroffen sein werden. Sie haben es in mehreren Repositories gesehen, enthalten sie vielleicht Commits desselben Autors? – hvd

Verwandte Themen