Experimentell scheint es, dass Git-Hooks mit dem aktuellen Verzeichnis ausgeführt werden, das als Stamm des Repositorys festgelegt ist. Ich kann jedoch keine Garantie dafür in der Git-Dokumentation sehen. Sollte ich mich auf das aktuelle Arbeitsverzeichnis verlassen, um das Git-Repository zu finden, oder gibt es eine bessere Möglichkeit, das mit dem Hook verknüpfte Git-Repository zu ermitteln?
81
.git
sondern erstellengit reset --hard
tatsächlich die Arbeitsverzeichnisstruktur innerhalb des.git
Verzeichnisses, was meiner Meinung nach völlig falsch ist!Antworten:
Es basiert auf dem Wert, der für die Umgebungsvariable festgelegt wurde
GIT_DIR
. Es wird auf das Stammverzeichnis des Repositorys gesetzt, wenn der Hook ausgeführt wird. Viele Hooks, insbesondere diejenigen, die aus einem anderen Repo ziehen, setzen diese Umgebungsvariable nach Bedarf zurück (und setzen sie zurück).quelle
.git/hooks/post-commit: 1: .git/hooks/post-commit: post-commit_push_gitweb.sh: not found
Die aktuellen Antworten scheinen veraltet zu sein. Ab 2.9.0 wird in den Dokumenten Folgendes angegeben:
https://git-scm.com/docs/githooks/2.9.0
quelle
.git
Verzeichnis besteht und in dem keine DateienSie können die Umgebungsvariable verwenden
$GIT_DIR
.$GIT_DIR
zeigt auf das.git
Verzeichnis.quelle
$GIT_DIR/..
auf das Repository-Stammverzeichnis verwiesen wird?$GIT_DIR/..
. Das wird kaputt gehen, wenn das Repo ein nacktes Repo ist. Ein nacktes Repo hat kein Arbeitsverzeichnis, daher kein "Repository-Stammverzeichnis". Außerdem wird es unterbrochen, wenn .git stattdessen ein Link ist.