Ich habe meinen eigenen benutzerdefinierten Post-Merge-Hook geschrieben und jetzt meinem Hauptprojektordner ein "Hooks" -Verzeichnis hinzugefügt (da git keine Änderungen in .git / hooks verfolgt). Irgendwo habe ich gelesen, dass ich aus Hooks einen symbolischen Link erstellen kann in .git / hooks, damit ich die Datei nicht jedes Mal von einem Ordner in den anderen kopieren muss, wenn jemand sie ändert, also habe ich versucht:
ln -s -f hooks/post-merge .git/hooks/post-merge
Aber es scheint nicht zu funktionieren, irgendwelche Ideen warum? "ln hooks / post-merge .git / hooks / post-merge" funktioniert gut, aber das Erstellen eines harten Links ist dasselbe wie das Kopieren, denke ich ....
.git/hooks/
diesem Punkthooks/post-merge
wird aufgelöst.git/hooks/hooks/post-merge
, der nicht vorhanden ist. Du willstln -s -f ../../hooks/post-merge .git/hooks/post-merge
. Oder machen Sie Ihr Leben leichter :ln -s -f ../hooks .git/hooks
. Dein Problem hat nichts mit Git zu tun..git/hooks
.Antworten:
Sie haben gerade einen falschen Pfad verwendet, es sollte sein:
quelle
cd
. Sollte es nicht einfach so seinln -s ./hooks/
?.git/hooks
als Arbeitsverzeichnis verwendet, daher sollten relative Pfade relativ zu diesem Verzeichnis sein. Dies ist selbsterklärend , wenn Sie zum ersten Malcd
in.git/hooks
vor dem symbolischen Link und Figur aus dem relativen Pfad von dort zu machen.ln
wird als Ziel gespeichert und relativ zum Standort des Links aufgelöst.cd
in ing ,.git/hooks
bevor Sie den Link zu machen, helfen Ihnen den Befehl schreiben, da Sie dann auf den richtigen Pfad automatisch vervollständigen können.prepare-commit-msg
. Das Problem ist, wenn ich die Festschreibungsnachricht mit nano bearbeite und dann Ctl + X zum Abbrechen ausgibt, git git trotzdem ein Festschreiben abschließt, anstatt wie früher abzubrechen, bevor ich diese Änderung vorgenommen habe. Gibt es eine Möglichkeit, einen Nano-Exit durchzuführen, ohne dass dieses Commit abgeschlossen wird?Während Sie symbolische Links verwenden können, können Sie den Hooks-Ordner für Ihr Projekt in Ihren Git-Einstellungen auch ändern mit:
Dies ist standardmäßig lokal, damit Git-Hooks für Ihre anderen Projekte nicht ruiniert werden. Es funktioniert für alle Hooks in diesem Repository. Daher ist es besonders nützlich, wenn Sie mehr als einen Hook haben.
Wenn Sie bereits benutzerdefinierte Hooks haben
.git/hooks/
, die Sie nicht mit Ihrem Team teilen möchten, können Sie diese in Hooks / hinzufügen und ein hinzufügen,.gitignore
damit sie nicht geteilt werden.quelle
Vor dem Verknüpfen das Verzeichnis wechseln
quelle
cd
:ln -s -f ../../hooks/post-merge
Die Pfadberechnung erfolgt relativ zum Symlink. Lassen Sie uns anhand eines Beispiels verstehen:
ln -s path/to/file symlink/file
Hier sollte der Pfad zur Datei tatsächlich der relative Pfad vom Symlink-Pfad sein.
Das System berechnet den Dateipfad tatsächlich wie folgt:
symlink/path/path/to/file
Der obige Befehl sollte wie folgt umgeschrieben werden:
ln -s ../path/to/file symlink/path
Die Ordnerstruktur lautet:
quelle
Anhand des Kommentars von Michael Cihar finden Sie hier ein Beispiel für ein Bash-Skript, das ich geschrieben habe, um diese Symlinks einfach zu erstellen. Dieses Skript befindet sich in git_hooks / dir, das sich im Projektstamm befindet. Mein .git / -Ordner befindet sich ebenfalls auf derselben Verzeichnisebene.
Mein Skript muss aus dem tatsächlichen Verzeichnis git_hooks / ausgeführt werden. Sie können es ändern, um sich anders zu verhalten, wenn Sie möchten.
Dieses Skript verknüpft alle Dateien, denen keine Dateierweiterung im Verzeichnis git_hooks / zugeordnet ist. Ich habe eine README.txt in diesem Verzeichnis + dieses Skript (mit dem Namen symlink.sh). Alle tatsächlichen Git-Hooks heißen "Pre-Commit", "Pre-Push" usw., sodass sie miteinander verknüpft werden.
quelle
warum nicht einfach cp ./hooks/* .git / hooks /
Das hat bei mir unter Mac OS funktioniert
quelle
I don't have to copy the file from one folder to the other every time someone changes