245 Stimmen

git --git-dir funktioniert nicht wie erwartet

Ich versuche, git von einem anderen Verzeichnis aus zu starten, in dem ich mich gerade befinde. Wenn ich also zum Beispiel in:

cd /home/domain/
git status << runs perfect ie
# On branch master
# Your branch is ahead of 'origin/master' by 6 commits.

Jetzt möchte ich diesen Befehl von einem anderen Verzeichnis aus ausführen, indem ich die --git-dir option.

Sagen wir also, ich bin in root/ und versuchen Sie dies:

git --git-dir="/home/domain/" status
## Error 
fatal: Not a git repository: '/home/domain/'

Ich habe auch versucht, die .git Ordner z.B.

git --git-dir="/home/domain/.git/" status

Aber das sieht so aus, als würde es versuchen, Git vom Root aus zu starten, d.h. alles aus meinem Domain-Ordner zu löschen und alles im Root hinzuzufügen.

Ich hoffe, jemand kann mir sagen, was ich falsch mache.

5 Stimmen

Jetzt funktioniert status perfekt, aber pull gibt Fehler. d.h. Root@erx [/]# git --git-dir=/home/domain/.git --work-tree=/home/domain/ pull origin master fatal: /usr/local/libexec/git-core/git-pull kann nicht ohne einen Arbeitsbaum verwendet werden. Aber status funktioniert ?? irgendwelche Ideen Jon

6 Stimmen

Dies ist der größte Fehler in Git im Moment. Die Nichtbeachtung der Parameter --work-tree und/oder --git-dir.

5 Stimmen

Ab git 1.8.5 haben Sie die Wahl zwischen no einstellen. --git-dir y --work-tree für einen einfachen Befehl: siehe meine Antwort unten

351voto

Jon Gretar Punkte 5222

Sie müssen auch das Arbeitsverzeichnis festlegen. Ich weiß, das ist verwirrend, aber es geht um die Flexibilität.

git --git-dir=/mycode/.git --work-tree=/mycode status

Sie können ein wenig mehr lesen ici

159voto

VonC Punkte 1117238

Start: git 1.8.5 (das nächste Woche erscheinen soll), wird es noch einfacher sein:

 git -C "/home/domain/" status

Keine Einstellung erforderlich --git-dir y --work-tree mehr!

Allerdings, wie von OmarL sur die Kommentare :

Ich habe festgestellt, dass -C ist nicht ganz gleichwertig mit --git-dir --work-tree denn -C überschreibt nicht die GIT_DIR Umgebungsvariable .


Siehe 44e1e4 festlegen von Nazri Ramliy :

Es sind mehr Tastendrücke erforderlich, um den Befehl git in einem anderen Verzeichnis aufzurufen, ohne das aktuelle Verzeichnis zu verlassen:

  1. (cd ~/foo && git status) git --git-dir=~/foo/.git --work-tree=~/foo status GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  2. (cd ../..; git grep foo)
  3. for d in d1 d2 d3; do (cd $d && git svn rebase); done

Die oben gezeigten Methoden sind für die Skripterstellung akzeptabel, aber zu umständlich für schnelle Befehlszeilenaufrufe.

Mit dieser neuen Option können die oben genannten Aufgaben mit weniger Tastenanschlägen erledigt werden:

  1. git -C ~/foo status
  2. git -C ../.. grep foo
  3. for d in d1 d2 d3; do git -C $d svn rebase; done

42voto

Greg Hewgill Punkte 882617

Ausgehend von Ihrem obigen Kommentar klingt es so, als hätten Sie immer noch ein Problem:

root@erx \[/\]# git --git-dir=/home/domain/.git --work-tree=/home/domain/ pull origin master
fatal: /usr/local/libexec/git-core/git-pull cannot be used without a working tree

Es hört sich an, als ob Sie beabsichtigen, dies von crontab oder so ähnlich. Es ist vielleicht besser, wenn Sie cd um zuerst in Ihr Arbeitsverzeichnis zu wechseln. Zum Beispiel:

root@erx \[/\]# (cd /home/domain && git pull origin master)

Dadurch wird vorübergehend (in einer Subshell, was die Klammern bewirken) das aktuelle Verzeichnis in /home/domain und führen Sie dann git pull origin master . Nach Abschluss des Befehls bleibt Ihr aktuelles Verzeichnis so, wie es vor dem Befehl war.

2voto

VonC Punkte 1117238
git --git-dir="/home/domain/" status
## Error 
fatal: Not a git repository: '/home/domain/'

Mit Git 2.26 (Q1 2020) ist die Dokumentation klarer.

Eine Auswirkung der Festlegung, wo die GIT_DIR ist (entweder mit der Umgebungsvariablen oder mit dem " git --git-dir=<where> cmd Option") ist die Repository-Erkennung deaktivieren .

Dies wurde in der Dokumentation etwas stärker betont, da neue Benutzer oft verwirrt sind.

Siehe Übergabe d82ad54 (30 Jan 2020) von Heba Waly ( HebaWaly ) .
(Zusammengefasst von Junio C. Hamano -- gitster -- sur 17e4a1b festlegen , 12. Februar 2020)

git : Aktualisierung der Dokumentation für --git-dir

Abgezeichnet von: Heba Waly
Unterstützt von: Junio C Hamano

git --git-dir <path> ist ein wenig verwirrend und funktioniert manchmal nicht so, wie der Benutzer es erwartet.

Wenn der Benutzer zum Beispiel Folgendes ausführt git --git-dir=<path> status überspringt git den Algorithmus zur Repository-Erkennung und weist den Arbeitsbaum dem aktuellen Arbeitsverzeichnis des Benutzers zu, sofern nichts anderes angegeben ist.
Wenn diese Zuordnung falsch ist, entspricht die Ausgabe nicht den Erwartungen des Benutzers.

Dieser Patch aktualisiert die Dokumentation, um sie klarer zu gestalten.

Also die Dokumentation für git --git-dir umfasst jetzt:

--git-dir=<path>:

Setzen Sie den Pfad zum Repository (" .git Verzeichnis").
Dies kann auch durch die Einstellung der GIT_DIR Umgebungsvariable.
Es kann ein absoluter Pfad oder ein relativer Pfad zum aktuellen Arbeitsverzeichnis sein.

Angabe des Speicherortes der " .git " Verzeichnis mit dieser Option (oder GIT_DIR Umgebungsvariable) schaltet die Repository-Erkennung aus, die versucht, ein Verzeichnis mit " .git "Unterverzeichnis (so werden das Repository und die oberste Ebene des Arbeitsbaums entdeckt) und teilt Git mit, dass Sie sich auf der obersten Ebene des Arbeitsbaums befinden.

Wenn Sie sich nicht im obersten Verzeichnis des Arbeitsbaums befinden, sollten Sie Git mitteilen, wo sich die oberste Ebene des Arbeitsbaums befindet, und zwar mit dem Befehl --work-tree=<path> Option (oder GIT_WORK_TREE Umgebungsvariable)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X