
Ramwin
Ich habe eine Festplattenpartition (Format: NTFS), die von Windows und Linux gemeinsam genutzt wird. Es enthält ein Git-Repository (ca. 6,7 GB).
Wenn ich nur Fenster verwenden oder verwende nur linux um das git-repository zu manipulieren ist alles ok.
Aber jedes Mal, wenn ich das System wechsle. Die git status
Der Befehl aktualisiert den Index und dauert etwa 1 Minute. Nachdem ich das ausgeführt habe git status
wenn ich die laufe git status
wieder im selben System. Es dauert nur weniger als 1 Sekunde. Hier ist das Ergebnis
# Just after switch from windows
[#5#wangx@manjaro:duishang_design] git status # this command takes more than 60s
Refresh index: 100% (2751/2751), done.
On branch master
nothing to commit, working tree clean
[#10#wangx@manjaro:duishang_design] git status # this time the command takes less than 1s
On branch master
nothing to commit, working tree clean
[#11#wangx@manjaro:duishang_design] git status # this time the command takes less than 1s
On branch master
nothing to commit, working tree clean
Ich vermute, es gibt ein Problem mit dem Git-Cache. Zum Beispiel: Windows und Linux verwenden alle die .git/index
Datei als Cache-Datei, aber das Git im Linux-System kann die nicht erkennen .git/index
durch Fenster geändert. Es kann also nur den Index aktualisieren und die ersetzen .git/index
Datei, die die nächste macht git status
superschnell u git status
in Windows sehr langsam (weil das Windows-System die Indexdatei erneut aktualisiert).
Ist meine Vermutung richtig? Wenn ja, wie kann ich die Indexdatei für ein anderes System festlegen? Wie kann ich das Problem lösen?
Hier sind Sie vollkommen richtig:
-
Das Ding, das Sie hier verwenden, das Git unterschiedlich als the bezeichnet Indexder Bühnenbereichoder der Zwischenspeicherenthält tatsächlich Cache-Daten.
-
Die darin enthaltenen Cache-Daten sind das Ergebnis von Systemaufrufen.
-
Die von einem Linux-System zurückgegebenen Systemaufrufdaten sind unterschiedlich aus den von einem Windows-System zurückgegebenen Systemaufrufdaten.
Daher macht ein Betriebssystemwechsel alle Cache-Daten vollständig ungültig.
… wie kann ich die Indexdatei für verschiedene Systeme setzen?
Ihre beste Wette hier ist, dies überhaupt nicht zu tun. Erstellen Sie zwei verschiedene Arbeitsbäume oder vielleicht sogar zwei verschiedene Repositories. Aber wenn das schmerzhafter ist als diese andere Alternative, probieren Sie diese Ideen aus:
Die eigentliche Indexdatei, die Git lediglich verwendet standardmäßig auf .git/index
. Sie können eine angeben unterschiedlich Datei nach Einstellung GIT_INDEX_FILE
zu einem anderen (relativen oder absoluten) Pfad. Könntest du also haben .git/index-linux
und .git/index-windows
und einstellen GIT_INDEX_FILE
basierend auf dem Betriebssystem, das Sie verwenden.
Einige Git-Befehle verwenden einen temporären Index. Sie tun dies durch Einstellung GIT_INDEX_FILE
sich. Wenn sie un-Setzen Sie es danach, sie könnten versehentlich verwenden .git/index
An diesem Punkt. Eine andere Möglichkeit ist also umbenennen .git/index
aus dem Weg, wenn Betriebssysteme gewechselt werden. Halte ein .git/index-windows
und .git/index-linux
wie zuvor, aber benennen Sie denjenigen um, der verwendet wird .git/index
während es verwendet wird, und benennen Sie es dann um in .git/index-name
bevor Sie auf das andere System wechseln.
Auch hier empfehle ich nicht, eine dieser Methoden auszuprobieren, aber sie werden wahrscheinlich mehr oder weniger funktionieren.
Wie Torek erwähnt hat, möchten Sie dies wahrscheinlich nicht tun. Es ist im Allgemeinen keine gute Idee, ein Repo zwischen Betriebssystemen zu teilen.
Es ist jedoch möglich, ähnlich wie es möglich ist, ein Repo zwischen Windows und dem Windows-Subsystem für Linux zu teilen. Vielleicht möchten Sie die Einstellung versuchen core.checkStat
zu minimal
und wenn das nicht ausreicht, core.trustctime
zu false
. Das führt dazu, dass die minimale Menge an Informationen im Index gespeichert wird, was bedeutet, dass die Daten so portabel wie möglich sind.
Beachten Sie jedoch, dass, wenn Ihr Repository symbolische Links enthält, es wahrscheinlich ist, dass nichts, was Sie tun, Aktualisierungen verhindern wird. Linux betrachtet die Länge eines Symlinks normalerweise als seine Länge in Bytes, und Windows betrachtet es als einen oder mehrere Festplattenblöcke, sodass es zu Größenunterschieden zwischen den Betriebssystemen kommt. Dies lässt sich nicht vermeiden, da die Größe eines der Attribute ist, die im Index verwendet werden und nicht deaktiviert werden können.

Vishal Kumar Sahu
Die Einstellung für das automatische Zeilenende löste mein Problem wie in diese Diskussion. Jetzt kann ich das Repository über Linux, Windows und sogar über ein tragbares Betriebssystem steuern.
git config --global core.autocrlf true

Ted Bigham
Dies gilt möglicherweise nicht für das Originalposter, aber wenn Linux unter dem Windows-Subsystem (WSL) verwendet wird, ist die Verwendung von git.exe eine schnelle Lösung, auch auf der Linux-Seite. Verwenden Sie einen Alias oder etwas, um es nahtlos zu machen.
9939600cookie-checkgit erzwingt eine Indexaktualisierung nach dem Wechsel zwischen Windows und Linuxyes
Erleben Sie dies auch unter Windows 10 Bash
– gut
13. September 2020 um 1:56 Uhr