Forum: PC Hard- und Software GIT und Zeitstempel nach Checkout


von Jonas (Gast)


Lesenswert?

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

von Carl D. (jcw2)


Lesenswert?

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

von Skippy (Gast)


Lesenswert?

>> 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.

von asdf (Gast)


Lesenswert?

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.

von LOL (Gast)


Lesenswert?

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.

von Hans Ulli K. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.