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
Keine direkte Hilfe, aber viele Antworten auf einer normalerweise hochwertigen Seite. Zum Selberdurcharbeiten: https://stackoverflow.com/questions/2179722/checking-out-old-file-with-original-create-modified-timestamps
>> 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 !
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.