
Lee
Ich versuche, Git aus einem anderen Verzeichnis auszuführen, als ich mich befinde. Wenn ich mich also beispielsweise 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 also von einem anderen Verzeichnis aus ausführen, indem ich die --git-dir
Möglichkeit.
Sagen wir also, ich bin dabei root/
und versuch das:
git --git-dir="/home/domain/" status
## Error
fatal: Not a git repository: '/home/domain/'
Ich habe auch versucht, die einzubeziehen .git
Ordner dh
git --git-dir="/home/domain/.git/" status
Aber das sieht so aus, als würde es versuchen, Git vom Stammverzeichnis aus auszuführen, dh alles aus meinem Domänenordner zu löschen und alles im Stammverzeichnis hinzuzufügen.
Hoffe, jemand kann beraten, was ich falsch mache.

Jon Gretar
Sie müssen auch das Arbeitsverzeichnis definieren. Verwirrend, ich weiß, aber es ist eine Sache der Flexibilität.
git --git-dir=/mycode/.git --work-tree=/mycode status
Sie können ein wenig mehr lesen Hier

VonC
Beginnend git 1.8.5 (das nächste Woche erscheinen soll), wird es noch einfacher:
git -C "/home/domain/" status
Keine Notwendigkeit zu setzen --git-dir
und --work-tree
mehr!
Wie jedoch von OmarL in den Kommentaren angemerkt:
Das habe ich gefunden -C
ist nicht ganz gleichwertig --git-dir --work-tree
da -C
setzt die nicht außer Kraft GIT_DIR
Umgebungsvariable.
Sehen Commit 44e1e4 durch Nazri Ramliy:
Es sind mehr Tastendrücke erforderlich, um den git-Befehl in einem anderen Verzeichnis aufzurufen, ohne das aktuelle Verzeichnis zu verlassen:
(cd ~/foo && git status) git --git-dir=~/foo/.git --work-tree=~/foo status GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
(cd ../..; git grep foo)
for d in d1 d2 d3; do (cd $d && git svn rebase); done
Die oben gezeigten Methoden sind für die Skripterstellung akzeptabel, aber für schnelle Befehlszeilenaufrufe zu umständlich.
Mit dieser neuen Option kann das obige mit weniger Tastenanschlägen erledigt werden:
git -C ~/foo status
git -C ../.. grep foo
for d in d1 d2 d3; do git -C $d svn rebase; done
Basierend auf Ihrem obigen Kommentar scheint es, als ob Sie immer noch auf ein Problem stoßen:
[email protected] [/]# 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 so an, als ob Sie beabsichtigen, dies zu vertreiben crontab
oder so. Sie können besser dran sein, zu verwenden cd
um zuerst in Ihr Arbeitsverzeichnis zu wechseln. Zum Beispiel:
[email protected] [/]# (cd /home/domain && git pull origin master)
Dadurch wird vorübergehend (in einer Subshell, was die Klammern tun) das aktuelle Verzeichnis geändert /home/domain
und dann laufen git pull origin master
. Nach Abschluss des Befehls bleibt Ihr aktuelles Verzeichnis so, wie es vor dem Befehl war.
git --git-dir="/home/domain/" status
## Error
fatal: Not a git repository: '/home/domain/'
Mit Git 2.26 (Q1 2020) ist die Dokumentation übersichtlicher.
Ein Effekt der Angabe, wo die GIT_DIR
ist (entweder mit der Umgebungsvariable oder mit dem “git --git-dir=<where> cmd
“Option) ist zu Deaktivieren Sie die Repository-Erkennung.
Dies wurde in der Dokumentation etwas stärker betont, da neue Benutzer oft verwirrt werden.
Sehen d82ad54 übergeben (30. Januar 2020) von Heba Waly (HebaWaly
).
(Zusammengeführt von Junio C. Hamano — gitster
— in Commit 17e4a1b12. Februar 2020)
git
: Dokumentation für –git-dir aktualisieren
Unterzeichnet von: Heba Waly
Unterstützt von: Junio C Hamano
git --git-dir <path>
ist etwas verwirrend und funktioniert manchmal nicht so, wie der Benutzer es erwarten würde.
Zum Beispiel, wenn der Benutzer läuft git --git-dir=<path> status
überspringt git den Repository-Erkennungsalgorithmus und weist den Arbeitsbaum dem aktuellen Arbeitsverzeichnis des Benutzers zu, sofern nicht anders angegeben.
Wenn diese Zuordnung falsch ist, entspricht die Ausgabe nicht den Erwartungen des Benutzers.
Dieser Patch aktualisiert die Dokumentation, um sie klarer zu machen.
Also die Dokumentation für git --git-dir
beinhaltet jetzt:
--git-dir=<path>:
Legen Sie den Pfad zum Repository fest (“.git
” Verzeichnis).
Dies kann auch durch die Einstellung gesteuert werden GIT_DIR
Umgebungsvariable.
Es kann ein absoluter Pfad oder ein relativer Pfad zum aktuellen Arbeitsverzeichnis sein.
Angabe des Speicherorts des “.git
” Verzeichnis Mit dieser Option (bzw GIT_DIR
Umgebungsvariable) deaktiviert die Repository-Erkennung, die versucht, ein Verzeichnis mit “.git
” Unterverzeichnis (auf diese Weise werden das Repository und die oberste Ebene des Arbeitsbaums erkannt) und teilt Git mit, dass Sie sich auf der obersten Ebene des Arbeitsbaums befinden.
Wenn Sie sich nicht im Verzeichnis der obersten Ebene des Arbeitsbaums befinden, sollten Sie Git mitteilen, wo sich die oberste Ebene des Arbeitsbaums befindet --work-tree=<path>
Möglichkeit (bzw GIT_WORK_TREE
Umgebungsvariable)
10032400cookie-checkgit –git-dir funktioniert nicht wie erwartetyes
Jetzt habe ich einen Status, der perfekt funktioniert, aber Pull gibt Fehler. dh [email protected] [/]# git –git-dir=/home/domain/.git –work-tree=/home/domain/ pull origin master fatal: /usr/local/libexec/git-core/git-pull kann nicht ohne a verwendet werden Arbeitsbaum. Aber Status funktioniert ?? Irgendwelche Ideen Jon
– Lee
6. September 2009 um 18:51 Uhr
Dies ist derzeit der größte Fehler in Git. Missachten der Parameter –work-tree und/oder –git-dir.
– Adam Dymitruk
24. Juni 2011 um 23:27 Uhr
Ab git 1.8.5 haben Sie die Wahl nicht einstellen
--git-dir
und--work-tree
für einen einfachen Befehl: siehe meine Antwort unten– VonC
21. November 2013 um 8:20 Uhr