Sind Git-Repositorys zwischen Betriebssystemen und Dateisystemen portierbar?

Sind Git-Repositorys zwischen Betriebssystemen und Dateisystemen portierbar?

... insbesondere beim Verschieben über FAT32- oder exFAT-USB-Sticks?

Auch wenn die Arbeitskopie wahrscheinlich unter Änderungen der Berechtigungen und der offensichtlichen Entfernung symbolischer Links (falls diese verwendet werden) leiden wird ... Änderungen, die Git problemlos erkennt, abgesehen davon,Sind die .git/Verzeichnisinhalte stabil genug, um ein Repository von einem Betriebssystem und/oder Dateisystem auf ein anderes verschieben zu können?zB Windows, gängige Linux-Distributionen, macOS, NTFS, ext FS,APFS...

Ich kann bei Bedarf von Git Version 2+ ausgehen.

Antwort1

Ja, die Repository-Datenbank istnormalerweiseportierbar auf allen modernen Betriebssystemen,einschließlichWindows. Es ist nicht auf erweiterte Attribute angewiesen und bisher auch nicht auf Groß- und Kleinschreibung. Dateinamen in der Datenbank scheinen maximal 52 Zeichen lang zu sein.

Die wichtigste Anforderung ist, dass Dateinamenbewahrenin ihrem Fall, selbst bei Dateisystemen, die die Groß- und Kleinschreibung nicht berücksichtigen (wenn Sie beispielsweise .git/HEAD von ext4 nach FAT32 nach APFS nach HFS+ nach ext4 kopieren, sollte es .git/HEAD bleiben und nicht zu .git/head werden). Glücklicherweise sind alle oben aufgeführten DateisystemeSindGroß-/Kleinschreibung wird beibehalten, also ist das in Ordnung.

Beachten Sie, dass jeder Zweig oder Tag als separate Datei unter .git/refs dargestellt wird. Git legt eine strikte Zeichensatzbeschränkung fest, um mit jedem Dateisystem zu arbeiten, aber das ist nicht immer ausreichend – wenn Sie zu einem Dateisystem wechseln, bei dem die Groß-/Kleinschreibung nicht beachtet wird (wie APFS oder NTFS), sollten Sie besser hoffen, dass das Repository nicht mehrere Zweige oder Tags enthält, die sich nur in der Groß-/Kleinschreibung unterscheiden. Ebenso verbietet Git nicht die Verwendung von älteren DOS-Gerätenamen wie auxoder nulals Zweig-/Tag-Namen.


(Technisch gesehen können beim Verschieben des Repository zwischen verschiedenen Dateisystemen einige Dateimetadaten verloren gehen, beispielsweise der „schreibgeschützte“ ( a-w) Status von Objektblobs, aber das ist etwas, worauf Git selbst ohnehin nicht achtet.)


Wenn Sie FAT32 nur als temporäres Transportmittel verwenden, sollten Sie git pack-refs --all --pruneund verwenden rm -rf .git/logs, um Probleme mit Zweignamen zu vermeiden, so unwahrscheinlich diese auch sein mögen. Führen Sie außerdem ein aus, git repack -d; git pruneum die Anzahl loser Objektdateien zu verringern.

Sie können es sogar verwenden, git bundleum einen transportfreundlichen Blob zu erstellen, der den gesamten oder einen Teil des Commit-Verlaufs enthält.

Antwort2

Obwohl das Kopieren des .gitVerzeichnisses in den meisten Fällen funktioniert, müssen einige Einschränkungen beachtet werden:

  • git-svn merkt sich möglicherweise einige Benutzerinformationen, die Sie nicht kopieren möchten, wie beispielsweise Name und E-Mail-Adresse, beispielsweise in .git/logs/refs/remotes/trunk.

  • Ein geklontes Repository enthält einen Link zurück zum übergeordneten Repository, den der Kopierbefehl nicht aufhebt. Sie können diesen Link mithilfe von entfernen git remote remove origin.

  • Wenn Sie symbolische Links im .gitVerzeichnis haben, sollten Sie sicherstellen, dass Sie diese dereferenzieren. Beispiel:

    cp -r -L <source-repo-dir> <destination-repo-dir>
    
  • Einige Konfigurationselemente können sich plattformübergreifend unterscheiden, z. B. benutzerdefinierte Diff-Treiber und Hook-Skripte, die auf externe Programme verweisen. Beim Kopieren zwischen verschiedenen Plattformen sollten Elemente wie , , core.ignorecaseund core.autocrlfwahrscheinlich einige andere überprüft werden.core.safecrlfcore.fileMode

  • Git-Klon ist ein sicherer Vorgang, der zwischen Computern ausgeführt werden kann:

    git clone ssh://[email protected]/path/to/my-project.git
    

    Beim Klonen wird automatisch eine Remote-Verbindung namens „Ursprung“ erstellt, die auf das ursprüngliche Repository zurückverweist und so die Interaktion mit einem zentralen Repository erleichtert.

Möglicherweise ist das folgende Tutorial zum selektiven Verschieben eines Git-Verzeichnisses für Sie interessant:

So verschieben Sie ein vollständiges Git-Repository

verwandte Informationen