git erzwingt eine Indexaktualisierung nach dem Wechsel zwischen Windows und Linux

Lesezeit: 5 Minuten

git erzwingt eine Indexaktualisierung nach dem Wechsel zwischen Windows und
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 statuswenn 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?

  • Erleben Sie dies auch unter Windows 10 Bash

    – gut

    13. September 2020 um 1:56 Uhr

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

  • Danke, torik. Ich benenne die .git/index-Datei in .git/windows_index und .git/linux_index um. Es funktioniert gut. Ich habe versucht, die Umgebungsvariable GIT_INDEX_FILE festzulegen, und festgestellt, dass sie sich auf alle meine Git-Repositories auswirkt. Wie kann ich nur die git_index_file nur für ein bestimmtes Repository ändern, z. B. die .git/config-Datei ändern?

    – Ramwin

    6. Dezember 2019 um 8:51 Uhr

  • @ramwin Leider gibt es dafür keine wirklich einfache Möglichkeit. Das ist einer von mehreren Gründen, warum ich diese Idee nicht empfehle. Wenn Sie jedoch bereit sind, Git aus seiner Quelle zu erstellen, können Sie einen Patch daran erstellen, der den standardmäßigen Indexdateipfad dazu bringt, ein Stück davon hinzuzufügen uname Daten. Das würde alle Ihre Repositories betreffen, aber dort “einfach funktionieren”, wo dies der Fall ist GIT_INDEX_FILE Trick erfordert viel manuelles Eingreifen.

    – Torek

    6. Dezember 2019 um 17:32 Uhr

  • Danke. Es ist gut genug für mich, sowohl die windows_index-Datei als auch die linux_index-Datei zu behalten.

    – Ramwin

    9. Dezember 2019 um 7:43 Uhr

  • Achten Sie auf eine andere Sache: git gc scannt diese zusätzlichen Indexdateien nicht, also alle Dateien, die Sie git add zum (maschinenspezifischen) Index muss innerhalb von ca. 2 Wochen festgeschrieben werden.

    – Torek

    9. Dezember 2019 um 8:05 Uhr

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

1647095290 659 git erzwingt eine Indexaktualisierung nach dem Wechsel zwischen Windows und
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 

  • Toller Fund, aber soweit ich sehen kann, nichts mit der Frage zu tun? =}

    – klingeln

    20. April 2021 um 20:32 Uhr

  • Es wird die Verwendung unterschiedlicher Indizierungen vermieden, wenn jemand nicht mehrere Indizierungslösungen befolgen möchte.

    – Vishal Kumar Sahu

    20. April 2021 um 20:36 Uhr

  • Dies löste das Problem für mich. Ich verwende zwischen Windows Powershell und WSL2 Ubuntu 20.04

    – Ace Eusebio

    13. Mai 2021 um 3:10 Uhr

git erzwingt eine Indexaktualisierung nach dem Wechsel zwischen Windows und
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.

993960cookie-checkgit erzwingt eine Indexaktualisierung nach dem Wechsel zwischen Windows und Linux

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy