Wird es als eine schlechte Methode betrachtet, .git/hooks in das Projekt-Repository zu stellen (z. B. mit Hilfe von Symlinks). Wenn ja, was ist der beste Weg, die gleichen Hooks an verschiedene Git-Benutzer zu liefern?Git-Hooks in das Repository einfügen
Antwort
Nein, sie in das Repository zu legen ist in Ordnung, ich würde sogar vorschlagen, dies zu tun (wenn sie auch für andere nützlich sind). Der Benutzer muss sie explizit aktivieren (wie Sie es zum Beispiel durch Symlinking gesagt haben), was einerseits ein wenig schmerzhaft ist, andererseits Benutzer jedoch davor schützt, beliebigen Code ohne ihre Zustimmung auszuführen.
Ich stimme Scytale im Allgemeinen zu, mit ein paar zusätzlichen Vorschlägen, genug, dass es eine separate Antwort wert ist.
Zuerst sollten Sie ein Skript schreiben, das die entsprechenden symbolischen Verknüpfungen erstellt, insbesondere wenn diese Hooks Richtlinien erzwingen oder nützliche Benachrichtigungen erstellen. Menschen werden viel eher die Haken benutzen, wenn sie einfach bin/create-hook-symlinks
eingeben können, als wenn sie es selbst tun müssten.
Zweitens, die direkte Verknüpfung von Hooks verhindert, dass Benutzer ihre eigenen persönlichen Hooks hinzufügen. Zum Beispiel gefällt mir der Beispiel-Pre-Commit-Hook, der sicherstellt, dass ich keine Leerzeichenfehler habe. Ein guter Weg, um dies zu tun ist in ein Haken Wrapper-Skript in Ihrem Repo, und symbolischen alle der Haken zu ihm. Der Wrapper kann dann $0
untersuchen (vorausgesetzt, es handelt sich um ein Bash-Skript; ein Äquivalent wie argv[0]
), um herauszufinden, auf welchem Hook es aufgerufen wurde. Rufen Sie dann den entsprechenden Hook in Ihrem Repo sowie den entsprechenden Hook des Benutzers auf umbenannt werden und alle Argumente an alle übergeben. Schnelles Beispiel aus dem Speicher:
#!/bin/bash
if [ -x $0.local ]; then
$0.local "[email protected]" || exit $?
fi
if [ -x tracked_hooks/$(basename $0) ]; then
tracked_hooks/$(basename $0) "[email protected]" || exit $?
fi
Das Installationsskript würde alle vorbestehenden Haken an der Seite bewegen (append .local
auf ihre Namen) und Symlink alle bekannten Haken Namen zu dem obigen Skript:
#!/bin/bash
HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc"
# assuming the script is in a bin directory, one level into the repo
HOOK_DIR=$(git rev-parse --show-toplevel)/.git/hooks
for hook in $HOOK_NAMES; do
# If the hook already exists, is executable, and is not a symlink
if [ ! -h $HOOK_DIR/$hook -a -x $HOOK_DIR/$hook ]; then
mv $HOOK_DIR/$hook $HOOK_DIR/$hook.local
fi
# create the symlink, overwriting the file if it exists
# probably the only way this would happen is if you're using an old version of git
# -- back when the sample hooks were not executable, instead of being named ____.sample
ln -s -f ../../bin/hooks-wrapper $HOOK_DIR/$hook
done
Ich habe 'chmod + x .git/hooks/*' zu deinem 'bin/create-hook-symlinks' hinzugefügt, um es zu benutzen. – guneysus
@guneysus Sie sollten das nicht brauchen, da die Hooks bereits ausführbar sein sollten (sie sollten auf diese Weise überprüft werden) und die Links brauchen keine speziellen Berechtigungen, nur die Dateien, zu denen sie verlinken. – Cascabel
Eine bessere Möglichkeit, das Hook-Verzeichnis zu erhalten, ist 'HOOK_DIR = $ (git rev-parse --show-toplevel) /. Git/hooks'. –
von http://git-scm.com/docs/git-init#_template_directory, könnten Sie einen dieser Mechanismen verwenden, um den .git/Haken dir jeden neu erstellen git Repo zu aktualisieren:
Das Vorlagenverzeichnis enthält Dateien und direkte ories, die kopiert werden, nach der Erstellung in $ GIT_DIR.
wird das Template-Verzeichnis eine der folgenden (in der Reihenfolge) sein:
das Argument mit der --template Option gegeben;
der Inhalt der Umgebungsvariablen $ GIT_TEMPLATE_DIR;
die Konfigurationsvariable init.templateDir; oder
das Standardvorlagenverzeichnis:/usr/share/git-core/templates.
"Sie könnten einen dieser Mechanismen verwenden", aber Sie geben nur einen an. – Otheus
Das https://www.npmjs.com/package/pre-commit npm Paket behandelt diese elegant so dass Sie pre-commit Haken in Ihrem package.json angeben.
- 1. Spezifikationsmuster für das Repository?
- 2. Variablen in das Webpack einfügen
- 3. Gehört Datenverschlüsselung in das Repository-Muster?
- 4. Das Repository-Muster mit DI
- 5. Sperrt "svnadmin dump" das Repository?
- 6. Einfügen von Daten mit Doctrine - Repository Vs Entity
- 7. R - Etiketten in das Kreisdiagramm einfügen
- 8. Ausgabe Formatierungsdaten für das Einfügen in Influxdb
- 9. MySQL Ein Skript in das Skript einfügen
- 10. XML-Daten in das Windows-Ereignisprotokoll einfügen
- 11. Tkinter Einfügen von Video in das Fenster
- 12. Subversion SVN: Das Repository wurde verschoben Das Repository wurde dauerhaft nach XXX verschoben. Bitte verschieben Sie
- 13. TimelineJS3 wie das Datum in das Popup einfügen?
- 14. Welcher Art ist das Repository-Muster?
- 15. Wie initialisierst du das Git-Repository?
- 16. LINQ to SQL und das Repository-Muster
- 17. nuget.config wird ignoriert, speziell das Repository-Pfad
- 18. Ist das PHP Composer Repository-Protokoll definiert?
- 19. Git log ohne das Repository zu klonen?
- 20. Android Studio kann das Repository nicht auflösen
- 21. NHibernate-Sitzung an das Repository übergeben
- 22. Wie wird das Repository-Muster korrekt verwendet?
- 23. Unit of work und das Repository-Muster
- 24. Was ist das Maven-Repository-Protokoll?
- 25. Was ist das Repository-Limit für github.com
- 26. Arbeitsverzeichnisstruktur für das SVN Visual Studio-Repository
- 27. Befolgt das Repository-Muster SOLID-Prinzipien?
- 28. hg Zugriffskontrolle auf das zentrale Repository
- 29. Das Github-Repository kann nicht aufgelöst werden
- 30. Installieren Sie das Paket, das von der CRAN-Repository leicht
was ist, wenn es ein Unternehmen Politik Sache ist, dann ist der Code nicht "willkürlich" das ist Code erforderlich, so würde dies als eine Einschränkung in GIT, für nicht ein anderes (vordefiniertes) Verzeichnis, das verfolgt wird, betrachtet werden, was auch zusammen mit den regulären Hooks ausgeführt wird –
Das automatische Liefern von Hooks ist ein Sicherheitsproblem. Ich bin froh, dass Git es nicht direkt tut - um Team-/Unternehmensrichtlinien durchzusetzen, Hooks auf der Serverseite zu verwenden oder Benutzer manuell entscheiden zu lassen Aktivieren Sie sie als @scy beschreibt :) –
"schützt Benutzer [...] von der Ausführung von beliebigem Code ohne ihre Zustimmung". Wenn ein Entwickler das tun würde, was Sie vorschlagen (Symlinking), dann könnte der Hook von jemand anderem geändert werden und "beliebigen Code ohne deren Zustimmung" ausführen. – MiniGod