Alte Datei mit originalen Zeitstempel für Erstellung / Änderung auschecken
Gibt es eine Möglichkeit zu wissen, oder Holen Sie sich die original-erstellen/modified-Zeitstempel? Danke.
Kommentar zu dem Problem
dies ist ein cleaner Seite, aber sowohl die Frage und die meisten stimmten zu beantworten, sind im Grunde genommen dupliziert: stackoverflow.com/questions/1964470/...
InformationsquelleAutor der Frage Scud | 2010-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, dass das nur die aufgezeichneten Zeitstempeln, die in der Git Datenbank sind der Autor und commit-Zeitstempel. Ich sehe nicht, eine option für Git, ändern Sie die Datei - Zeitstempel entsprechen dem letzten commit, und es macht Sinn, dass, wäre dies nicht das Standardverhalten (wenn es Sie denn gab, Makefiles würde nicht richtig funktionieren).
Könnten Sie ein Skript schreiben um die änderung Datum der Dateien, die die Zeit von dem letzten commit. Es könnte wie folgt Aussehen:
InformationsquelleAutor der Antwort Dietrich Epp
JA, metastore-oder git-cache-meta - speichern können solche (meta-)Informationen! Git von selbst, ohne Drittanbieter-tools nicht. Metastore oder git-cache-meta speichern können Datei-Metadaten für eine Datei.
Ist die durch design, als metastore-oder git-cache-meta sind bestimmt für diesen Zweck, wie auch die Unterstützung von backup-utilities und Synchronisations-tools.
(Sorry, nur ein wenig Spaß spin auf Jakub Antwort)
InformationsquelleAutor der Antwort B T
KEINE, Git einfach nicht speichern, solche (meta-)Informationen, es sei denn, Sie verwenden Sie tools von Drittanbietern, wie metastore oder git-cache-meta. Das einzige, Zeitstempel gespeichert werden, ist die Zeit, patch/änderung erstellt wurde (Autor die Zeit), und die Zeit commit erstellt wurde (committer Zeit).
Das so gewollt ist, wie Git version control system, nicht für ein backup-Dienstprogramm oder Synchronisations-tool.
InformationsquelleAutor der Antwort Jakub Narębski
Diesem python-Skript helfen: für jede Datei gilt der Zeitstempel des letzten commit, in dem die Datei geändert wurde:
Unten ist eine wirklich bare-bones-version von das Skript. Für die tatsächliche Nutzung-ich empfehle, eines der robusteren Versionen vor:
Alle Versionen Parsen der vollen log erzeugt von einem einzigen
git whatchanged
- Befehl, der mehrere hundert mal schneller als lopping für jede Datei. Unter 4 Sekunden für git (24,000 verpflichtet, 2.500 Dateien) und weniger als 1 minute für den linux-kernel (rund 40.000 Dateien, die 300.000 verpflichtet)InformationsquelleAutor der Antwort MestreLion
Diese hat er trick für mich auf ubuntu (was OSX fehlt ist das "-j" - flag date(1))
InformationsquelleAutor der Antwort eludom
Sehen https://github.com/przemoc/metastore
Es ist auch enthalten in der debain-repo, nur
apt-get install metastore
.InformationsquelleAutor der Antwort JPT
Ich habe skirmishing mit git und Zeitstempel für einige Zeit schon.
Getestet, einige Ihrer Ideen und meine eigene schrecklich riesigen und Vorgänger - /ram heavy-Skripts, bis ich gefunden (auf einige git-wiki) ein Skript in perl, die macht fast das, was ich wollte.
https://git.wiki.kernel.org/index.php/ExampleScripts
Und was ich wollte ist, um in der Lage sein, zu bewahren die Letzte änderung der Dateien auf commit-Termine.
Also nach einigen Neueinstellung das Skript ist in der Lage zu ändern, Erstellung und änderung Datum 200k Dateien in rund 2-3min.
Davon aus, dass Ihre repositories haben nicht 10k+ Dateien soll dies in Sekunden ausgeführt werden, so können Sie Haken Sie es an der Kasse, ziehen oder anderen git grundlegenden Haken.
InformationsquelleAutor der Antwort Lukasz Kruszyna
Hier ist meine Lösung, die berücksichtigt, dass Pfade mit Leerzeichen:
Beachten Sie, dass dies nicht die Zeit nehmen, die
git log
Berichte, es ist die Zeit durch das system mitgeteilt. Wenn Sie möchten, dass die Zeit da wurden die Dateien commited verwendengit log
Lösung stattdate -r
InformationsquelleAutor der Antwort Lilian A. Moraru
Native git hat nicht die Funktionalität, aber es kann erreicht werden durch hook-Skripte oder tools von Drittanbietern.
Ich habe versucht
metastore
. Es ist sehr schnell, aber ich mag es nicht installieren zu müssen, und die Metadaten werden nicht gespeichert im nur-text-format.git-cache-meta
ist ein einfaches Werkzeug, ich habe es versucht, aber es ist sehr langsam für große Pensionsgeschäfte (repo-mit Zehntausenden von Dateien, dauert es Minuten, aktualisieren Sie die Metadaten-Datei) und könnte die cross-Plattform-Kompatibilität Probleme.setgitperms
und andere Ansätze haben auch Ihre Mängel, die ich nicht mag.Endlich machte ich ein hook-Skript für diese Aufgabe: git-store-meta. Es hat sehr leichte Abhängigkeit (*nix-shell
sort
, undperl
, die erforderlich ist, gespeichert, und Optionalchown
,chgrp
undtouch
), so dass nichts zusätzliches installiert sein für eine Plattform, die ausgeführt werden kann git, wünschenswert performance (für ein repo mit Zehntausenden von Dateien, es dauert < 10 Sekunden aktualisieren Sie die Metadaten-Datei; obwohl mehr zu schaffen), speichert die Daten in nur-text-format, und die Metadaten, um "gerettet" oder "geladen" ist anpassbare.Es hat funktionierte gut für mich. Versuchen Sie dies, wenn Sie nicht zufrieden sind mit metastore, git-cache-meta-und anderen Ansätze.
InformationsquelleAutor der Antwort Danny Lin
Für die Windows-Umgebung schrieb ich ein kleines (quick and dirty) - EXE in Delphi 10.1 Berlin, sammelt alle Datei Daten in den source-tree in der Datei .gitfilattr und können Sie anwenden, auf die überprüft unseren source-tree wieder.
Natürlich Teile ich den code in GitHub:
https://github.com/michaschumann/gitfiledates/blob/master/gitFileDates.dpr
Ich benutze es in meinem build-system basierte auf GitLab Läufer.
InformationsquelleAutor der Antwort MichaSchumann
Mit GNU-tools.
.
InformationsquelleAutor der Antwort Ярослав Рахматуллин
Gibt es einige Unklarheiten in meiner (und anderer) interpretation der OP darüber, ob dies bedeutet, dass die commit-Zeitpunkt oder etwas anderes, aber in der Annahme, es bedeutet commit-Zeit, dann ist dieses simple one-liner funktioniert in linux (basierend auf der Antwort-snippet von Dietrich Epp):
Aber es gibt noch mehr anspruchsvolle Antworten (einschließlich git hooks), die mit aus einem Kommentar auf die ursprüngliche Frage von cregox.
InformationsquelleAutor der Antwort mza