Mein Home-Verzeichnis befindet sich in einer remote bereitgestellten NFS-Partition auf einem Dateiserver und wird routinemäßig gesichert. Ich möchte das git-Repository meines Projekts unter meinem Home-Verzeichnis haben (so dass es gesichert ist), aber ich möchte, dass mein Arbeitsbaum in einer lokalen Festplattenpartition meiner Workstation ist (damit das Bauen schnell ist). Die lokale Festplattenpartition wird nicht gesichert.
Irgendwelche Ideen, wie man das macht? Ich weiß, dass ich das NFS-Repository klonen und dorthin schieben kann, aber das scheint ein unnötiger Overkill zu sein.
Könnte es so einfach sein, eine symbolische .git-Verknüpfung in der lokalen Partition zum .git-Verzeichnis in der entfernten NFS-Partition zu erstellen?
Sie können Ihr Git Repo mit erstellen:
.git
dir wird mit --git-dir=<path>
oder angegeben $GIT_DIR
Umgebungsvariable und Bezug auf einen Pfad innerhalb Ihres (gesicherten) Home-Verzeichnisses. Der git init
Befehl berücksichtigt Die Umgebungsvariable $GIT_DIR
:
Wenn die Umgebungsvariable
$GIT_DIR
festgelegt ist, gibt sie einen Pfad an, der anstelle von./.git
für die Basis des Repositorys verwendet werden soll.
Alternativ können Sie Ihr Repo in Ihrem Home-Verzeichnis erstellen, aber fügen Sie das folgende git config
hinzu:
Legen Sie den Pfad zum Stamm des Arbeitsbaums fest.
Dies kann durch die UmgebungsvariableGIT_WORK_TREE
und die Befehlszeilenoption--work-tree
außer Kraft gesetzt werden.
Dies kann ein absoluter Pfad oder ein relativer Pfad zum Verzeichnis.git
sein, der entweder von--git-dir
oderGIT_DIR
angegeben oder automatisch ermittelt wird.
Wenn--git-dir
oderGIT_DIR
angegeben sind, aber keines von--work-tree
,GIT_WORK_TREE
undcore.worktree
angegeben ist, wird das aktuelle Arbeitsverzeichnis als Stammverzeichnis des Arbeitsbaums betrachtet.Beachten Sie, dass diese Variable auch dann berücksichtigt wird, wenn sie in einer Konfigurationsdatei im Unterverzeichnis "
.git
" eines Verzeichnisses festgelegt ist und sich ihr Wert vom letzteren Verzeichnis unterscheidet (zB "/path/to/.git/config
" hatcore.worktree
auf "gesetzt" gesetzt)/different/path
"), was höchstwahrscheinlich eine Fehlkonfiguration ist.
Das Ausführen von git-Befehlen im Verzeichnis "/path/to
" verwendet weiterhin "/different/path
" als Stammverzeichnis des Arbeitsbaums und kann für die Benutzer zu großer Verwirrung führen.
Das OP fügt hinzu:
Könnte es so einfach sein, eine .git-Verknüpfung in der lokalen Partition zum .git-Verzeichnis in der entfernten NFS-Partition zu erstellen?
Zumindest mit Einstellungen (wie git-dir
oder core.worktree
), die denselben Effekt erzielen, ohne auf die OS-spezifischen Funktionen wie den symbolischen Link angewiesen zu sein (der nicht verfügbar ist) jedes Betriebssystem)
Update 2018 (8 Jahre später): Tom Russell fügt in den Kommentaren :
Offensichtlich wird das Flag
--separate-git-dir
jetzt verwendet, um auf dem NFS-Server auf.git/
zu verweisen, wenn das Repository auf der lokalen Arbeitsstation (NFS-Client) initialisiert wird.
Nachfolgendes Verhalten ist jedoch ungerade: Änderungen, die auf dem NFS-Client festgeschrieben werden, werden nicht automatisch an den Server weitergegeben, wobei auf dem Server eingit checkout -- <file>
erforderlich ist.Ich habe später herausgefunden, dass ein
git reset --hard
im Server Repo nach einem Commit im Client Repo (oder umgekehrt) der einfachste Weg ist, ein Arbeitsverzeichnis auf den neuesten Stand zu bringen.
Erstellen Sie wie gewohnt Ihr Repo in Ihrem Home-Verzeichnis, und verwenden Sie dann auf Ihrer schnellen lokalen Festplatte das Skript git-new-workdir
(auf meiner Box unter /usr/share/doc/git-core/contrib/workdir
). Es ist kein Teil des Gitkerns; Es ist ein mitgebrachter Skript, aber das Git-Paket der Distro hat es vielleicht installiert. Verwendung ist:
Dadurch wird ein neues, eindeutiges Arbeitsverzeichnis erstellt, das mit Ihrem ursprünglichen Repository verknüpft ist.
Ich bin mir nicht sicher, was Sie mit Overkill meinen, aber mein Vorschlag wäre, in NFS einen Klon zu erstellen und darauf zu drücken.
Sie können einen Post-Commit-Hook einrichten, der git push --mirror my-nfs-thing
ausführt und nicht einmal darüber nachdenken muss.
Am wichtigsten ist, dass Sie immer schnellen und zuverlässigen Zugriff auf die Repository-Daten haben (ohne Angst davor, Daten an Systemausfälle zu verlieren usw.).