git –git-dir funktioniert nicht wie erwartet

Lesezeit: 6 Minuten

git git dir funktioniert nicht wie erwartet
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.

  • 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

1647295088 964 git git dir funktioniert nicht wie erwartet
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

  • Danke das hat funktioniert! Einverstanden, dass dies verwirrend ist. Es heißt Keep It Simple Stupid. Sie können fast immer Flexibilität zulassen und gleichzeitig Standardwerte angeben, die am sinnvollsten sind, VS wenn ein Befehl überhaupt nicht funktioniert.

    – Nein

    18. Januar 2012 um 6:34 Uhr

  • @ Nick stimmte zu, Sie würden denken, wenn --git-dir nicht angegeben wurde, würde es prüfen, ob /mycode/.git vorhanden und verwenden Sie diese, bevor Sie einen Fehler ausgeben.

    – GP89

    20. November 2012 um 15:58 Uhr

  • @NickYeates abgeordnet! Außerdem hatte ich ein Problem, wenn ich zum Beispiel ~ verwendet habe, um auf mein Home-Verzeichnis zu verweisen git --git-dir=~/src/s3cmd/.git --work-tree=~/src/s3cmd pull hat aber nicht funktioniert git --git-dir=/home/username/src/s3cmd/.git --work-tree=/home/username/src/s3cmd pull Tat

    – Jamie Cook

    12. Februar 2013 um 3:16 Uhr

  • Beachten Sie, dass nicht alle Befehle den Arbeitsbaum erfordern, zum Beispiel funktioniert “git –git-dir=/mycode/.git log” gut. Einverstanden, dass dies verwirrend ist!

    – Jojo

    13. Juni 2013 um 21:25 Uhr

  • Kleine Klarstellung: git --git-dir="$HOME/foo/.git" --work-tree="$HOME/foo" status

    – Haris Krajina

    17. Februar 2014 um 11:36 Uhr


git git dir funktioniert nicht wie erwartet
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-treeda -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:

  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 für schnelle Befehlszeilenaufrufe zu umständlich.

Mit dieser neuen Option kann das obige 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

  • Ich bin beim Versuch, das Flag -C zu verwenden, gestolpert nach dem Der git-Befehl (zB git status -C <path> geht nicht!)

    – Kedar Paranjape

    21. März 2019 um 14:36 ​​Uhr


  • @OmarL Guter Punkt, danke. Ich habe Ihren Kommentar zur besseren Sichtbarkeit in die Antwort aufgenommen.

    – VonC

    2. September 2021 um 14:17 Uhr

  • Hinweis: Verwenden Sie Git 2.35 (Q1 2022)

    – VonC

    22. Dezember 2021 um 23:02 Uhr

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/domainund dann laufen git pull origin master. Nach Abschluss des Befehls bleibt Ihr aktuelles Verzeichnis so, wie es vor dem Befehl war.

  • Die Verwendung einer Subshell ist einfach und elegant. Ich weiß nicht, warum ich nicht früher daran gedacht habe!

    – Ehtesh Choudhury

    14. Mai 2012 um 18:09 Uhr

  • Entschuldigung @Greg, die andere Antwort von Jon wurde positiv bewertet, da sie die gestellte Frage beantwortete – aber ich denke, Sie sind genau richtig, wenn es darum geht, die Absicht zu erkennen und zu beantworten, und Ihre Einsicht, dh die () s, ist genau das, wonach ich gesucht habe +10

    – Darren Bishop

    31. Mai 2012 um 10:25 Uhr

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)

1003240cookie-checkgit –git-dir funktioniert nicht wie erwartet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy