Hi,
ich arbeite mich gerade in Git ein und habe etwas mit Checkouts etc.
herumgespielt. Dabei ist mir aufgefallen, dass die Änderungsdaten
bestimmter Dateien sich mit jedem Checkout ändern bzw. auf die aktuelle
Systemzeit gesetzt werden. Ich meine zu verstehen, dass Git die Dateien,
die sich zwischen zwei Commits verändert haben, auf den jeweils
aktuellen Stand des Checkouts bringt und sich vermutlich genau deswegen
der Zeitstempel dieser Dateien bei jedem Checkout ändert.
So richtig nützlich finde ich das jedoch nicht, denn wenn ich
gelegentlich den Stand eines Checkouts anhand der Datei-Zeitstempel mit
anderen Ordnern bzw. Archiven vergleichen will, dann funktioniert das
natürlich nicht, weil im Git-Repo im Gegensatz zum Archiv etliche
Dateien das aktuelle Datum tragen, obwohl sie inhaltlich identisch sind.
Git hat IM Repo natürlich die Übersicht, ob die Dateien geändert wurden,
aber außerhalb des Repos zieht man ja doch oft das Änderungsdatum heran,
um Dateien abzugleichen.
Gibt es eine Möglichkeit, die zum Zeitpunkt des Commits ursprünglich
vorhandenen Datei-Zeitstempel wiederherzustellen, so dass ein
Dateivergleich mit einem entpackten Archiv/BackUp mit dem selben Stand
keine Unterschiede bei den Zeitstempeln zeigen würde?
Viele Grüße
Jonas
>> aber außerhalb des Repos zieht man ja doch oft das Änderungsdatum heran
Mache ich nie, wozu auch?
Man kann doch Branches vergleichen etc., das macht das vergleichen nach
dem Zeitstempel der Dateien nicht nur ueberfluessig, sondern auch
umstaendlich, mal abgesehen davon dass es wie du sagst nicht funzt.
Nein kann man nicht, ist so by-design.
Stell dir vor der Zeitstempel würde auf das Commit-date (oder sonstiges
historisches Datum) gestellt, dann würde Make nicht mehr funktionieren.
Jonas schrieb:> So richtig nützlich finde ich das jedoch nicht, denn wenn ich> gelegentlich den Stand eines Checkouts anhand der Datei-Zeitstempel mit> anderen Ordnern bzw. Archiven vergleichen will, dann funktioniert das> natürlich nicht, weil im Git-Repo im Gegensatz zum Archiv etliche> Dateien das aktuelle Datum tragen, obwohl sie inhaltlich identisch sind.
Zwei git-Bäume bzw. Archive kann und soll man nur mit git untereinander
vergleichen, das ist bei SVN auch nicht anders, deshalb nennt sich das
Versions/Revisionskontrollsystem.
Das Dateidatum ist noch niemals eine irgendwie relevante Größe gewesen
(selbst für ein Backup ist es nur sehr begrenzt aussagefähig) - zu
leicht lassen sich Zeitstempel (versehentlich) ändern.
Davon abgesehen erlaubt das Dateidatum auch immer nur eine Aussage zum
lokalen System / der lokalen Uhr - Computer untereinander müssen nicht
synchron sein (und sind es nicht), und verschiedene Dateisysteme haben
auch ganz andere Konzepte vom Dateidatum, dessen Auflösung, Zeitzonen
etc.
Im Falle git ist es jedoch relativ einfach, die Revision rauszubekommen,
da alles Zentral in einem einzigen .git Verzeichnis gespeichert ist.
Archiviert man das mit, hat man das Commit-Log, die komplette Historie
und den aktuellen Stand.
Davon abgesehen sind die Anwendungsfälle für "vergleichen mit extern"
vermutlich extrem selten, warum sollte man mit "anderen Ordnern bzw.
Archiven" (die kein .git enthalten) überhaupt arbeiten?:
A) jedes git-Repo/Verzeichnis in das ich push bzw. pull ausführe ist
ein aktuelles Backup (für diesen push/pull), inkl. kompletter Historie,
Branches etc. pp.
B) Wenn ich wissen will, was zwischen Tag X und Y gelaufen ist, frage
ich git log.
C) Wenn ich ein Offline-Backup haben will, nehme packe ich mein lokales
Repo ein und denke nicht drüber nach. Das jeweils aktuellste Backup
enthält immer alle vorherigen Revisionen. Insofern brauche ich da kein
differentielles Backup, mehrere alte Backups oder ähnliches.
Jonas schrieb:> Hi,> ich arbeite mich gerade in Git ein und habe etwas mit Checkouts etc.> herumgespielt. Dabei ist mir aufgefallen, dass die Änderungsdaten> bestimmter Dateien sich mit jedem Checkout ändern bzw. auf die aktuelle> Systemzeit gesetzt werden.
Das hat seinen Sinn im Zusammenhang von make, dort wird eben die mtime
geprüft
> Gibt es eine Möglichkeit, die zum Zeitpunkt des Commits ursprünglich> vorhandenen Datei-Zeitstempel wiederherzustellen, so dass ein> Dateivergleich mit einem entpackten Archiv/BackUp mit dem selben Stand> keine Unterschiede bei den Zeitstempeln zeigen würde?
Dafür gibt es die git archive Funktionen. Wenn ich mich richtig erinnere
werden dort die Committime genommen.
So wird es z.B. beim Linux Kernel gemacht.
Du kannst dir das Archiv erzeugen und mit der Signatur prüfen, jederzeit
!
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.