Ich schreibe ein Skript für einige Kollegen auf ihre Git-Repositories zu verwenden, und ich bin verwirrt, wie zuverlässig finden Sie das Stammverzeichnis der Repo-Arbeitsbaum:Gibt es eine Möglichkeit, den Arbeitsbaum eines Git-Repos zu finden, wenn man das .git-Verzeichnis verwendet?
In der Regel, wenn das aktuelle Verzeichnis in einem ist Arbeit Baum, die Befehle ...
git rev-parse --git-dir
git rev-parse --show-toplevel
... würden die Wurzeln des .git
Verzeichnis und Arbeitsbaum zurückkehren, respectively. Wenn das aktuelle Verzeichnis jedoch innerhalb ein Verzeichnis .git
ist, funktioniert nur der erste Befehl. Der Befehl git rev-parse --show-toplevel
zeigt nicht die oberste Ebene des Arbeitsbaums (zumindest nicht für mich, die git 1.8.4.4 unter Linux verwendet).
Unter der Annahme, dass git rev-parse --is-bare-repository
kehrt false
, würde ich normalerweise vermuten, dass das übergeordnete Verzeichnis von git rev-parse --git-dir
ist entweder das Arbeitsverzeichnis (oder irgendwo im Arbeitsverzeichnis), aber wenn die Benutzer-GIT_DIR
gesetzt, dass das .git
Verzeichnis nicht innerhalb der Arbeitsverzeichnis, das wird nicht funktionieren. (Zum Beispiel, wenn der Benutzer mit Submodule arbeiten, ihre GIT_DIR vielleicht nicht in ihrer Arbeit Baum sein.)
Was ich verwirrend ist, dass, wenn innerhalb einer GIT_DIR
, git rev-parse --show-toplevel
drucken keine Fehlermeldungen laufen und gibt 0:
$ cd $(git rev-parse --git-dir); git rev-parse --show-toplevel ; echo $?
0
Während irgendwo den gleichen Befehl ausgeführt wird, ist eindeutig kein Git Repository einen Fehlercode zurück:
$ cd /; git rev-parse --show-toplevel ; echo $?
fatal: Not a git repository (or any of the parent directories): .git
128
Wenn there'a eine Möglichkeit, die Arbeit Baum vom GIT_DIR
zu finden, könnte jemand te Wie kann ich ... oder wenn es einfach nicht möglich ist, den Standort des Arbeitsbaums aus dem .git-Verzeichnis abzuleiten, mir helfen zu verstehen, warum das .git-Verzeichnis philosophisch gesehen keinen Verweis auf seinen Arbeitsbaum enthält?
Vielen Dank im Voraus für Hilfe/Zeiger!