Gilt es als schlechte Praxis, wenn man .git/hooks
in das Projekt-Repository (z. B. über Symlinks). Wenn ja, wie lassen sich dieselben Hooks am besten an verschiedene Git-Benutzer verteilen?
Antworten
Zu viele Anzeigen?En Vorabüberweisung npm Paket handhabt dies auf elegante Weise, indem es Ihnen erlaubt, Pre-Commit-Hooks in Ihrer paket.json Datei.
Pour PHP-Komponist -basierten PHP-Projekten können Sie automatisch an Ingenieure verteilen. Hier ist ein Beispiel für pre-commit und commit-msg hooks.
Erstellen einer hooks
Ordner und dann in Ihrem komponist.json Datei:
},
"scripts": {
"post-install-cmd": [
"cp -r 'hooks/' '.git/hooks/'",
"php -r \"copy('hooks/pre-commit', '.git/hooks/pre-commit');\"",
"php -r \"copy('hooks/commit-msg', '.git/hooks/commit-msg');\"",
"php -r \"chmod('.git/hooks/pre-commit', 0777);\"",
"php -r \"chmod('.git/hooks/commit-msg', 0777);\"",
],
Dann können Sie sie sogar aktualisieren, während das Projekt weiterläuft, da jeder composer install
auf regelmäßiger Basis.
Hier ist ein Skript, add-git-hook.sh die Sie als reguläre Datei im Repository bereitstellen können und die ausgeführt werden kann, um den Git-Hook an die Skriptdatei anzuhängen. Stellen Sie den zu verwendenden Hook (pre-commit, post-commit, pre-push usw.) und die Definition des Hooks in der Datei cat heredoc ein.
#!/usr/bin/bash
# Adds the git-hook described below. Appends to the hook file
# if it already exists or creates the file if it does not.
# Note: CWD must be inside target repository
HOOK_DIR=$(git rev-parse --show-toplevel)/.git/hooks
HOOK_FILE="$HOOK_DIR"/post-commit
# Create script file if doesn't exist
if [ ! -e "$HOOK_FILE" ] ; then
echo '#!/usr/bin/bash' >> "$HOOK_FILE"
chmod 700 "$HOOK_FILE"
fi
# Append hook code into script
cat >> "$HOOK_FILE" <<EOF
########################################
# ... post-commit hook script here ... #
########################################
EOF
Es könnte sinnvoll sein, diesem Skript Ausführungsrechte zu geben, oder der Benutzer kann es direkt ausführen. Ich habe es verwendet, um git-pull automatisch auf anderen Rechnern auszuführen, nachdem ich es übertragen habe.
Ich habe die einfachere Frage beantwortet, die nicht gestellt wurde und nicht das war, wonach der Auftraggeber gesucht hat. In den Kommentaren unten habe ich mich zu den Anwendungsfällen und Argumenten für die Auslieferung von Hook-Skripten im Repository gegenüber der externen Verwaltung geäußert.
Es sieht so aus, als ob viele der Beiträge veraltet sind, zumindest wenn man pre-commit im Python Ökosystem verwendet (+ ich habe festgestellt, dass das Ändern des Git-Hook-Pfades bei etwas älteren Versionen von Git, z.B. 2.3, nicht funktioniert). Mit einer .pre-commit-config.yaml in einem hooks-Verzeichnis im Root deines Repos ist die einfachste Lösung die Ausführung:
pre-commit install -f --config hooks/.pre-commit-config.yaml
Sie könnten eine verwaltete Lösung für die Verwaltung von Pre-Commit Hooks verwenden, wie Vorabüberweisung . Oder eine zentralisierte Lösung für serverseitige Git-Hooks wie Datree.io .
Es verfügt über integrierte Richtlinien wie:
- Erkennen und verhindern Verschmelzung von Geheimnissen .
- Durchsetzung der ordnungsgemäßen Git-Benutzerkonfiguration .
- durchsetzen. Integration von Jira-Tickets - Erwähnen Sie die Ticketnummer im Namen der Pull-Anfrage / Commit-Nachricht.
Es wird nicht alle Ihre Hooks ersetzen, aber es könnte Ihren Entwicklern bei den offensichtlichsten helfen, ohne die Konfigurationshölle der Installation der Hooks auf dem Computer/Repository eines jeden Entwicklers.
Haftungsausschluss: Ich bin einer der Gründer von Datrees
- See previous answers
- Weitere Antworten anzeigen