Wie ist das git-Repository in der NFS-Partition und in der Arbeitsbaumstruktur auf der lokalen Partition?

8

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?

    
Steve Emmerson 05.02.2010, 22:49
quelle

4 Antworten

7

Sie können Ihr Git Repo mit erstellen:

  • Der Arbeitsbaum ist ein aktueller Pfad auf der lokalen Festplattenpartition
  • aber .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:

%Vor%
  

Legen Sie den Pfad zum Stamm des Arbeitsbaums fest.
  Dies kann durch die Umgebungsvariable GIT_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 oder GIT_DIR angegeben oder automatisch ermittelt wird.
  Wenn --git-dir oder GIT_DIR angegeben sind, aber keines von --work-tree , GIT_WORK_TREE und core.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 " hat core.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 ein git 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.

    
VonC 05.02.2010, 23:12
quelle
4

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:

%Vor%

Dadurch wird ein neues, eindeutiges Arbeitsverzeichnis erstellt, das mit Ihrem ursprünglichen Repository verknüpft ist.

    
Wayne Conrad 05.02.2010 23:53
quelle
3

Sie können Ihr .git-Verzeichnis auf eine Remote-Freigabe verschieben und dann durch eine Datei namens ".git" ersetzen, die "gitdir:" enthält. Es ist in der Hilfeseite des Repository-Layouts dokumentiert (zB git help repository-layout).

    
julian7 12.02.2011 19:30
quelle
0

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

    
Dustin 06.02.2010 02:34
quelle

Tags und Links