Mit einem einzigen offiziellen Repository als Remote und mehreren lokalen Repositories, die daraus geklont werden, kann ein Pre-Commit-Hook in diesem Haupt-Repository geskriptet und auf allen Klonen davon erzwungen werden?Git Remote/Shared Pre-Commit Hook
Antwort
Ich glaube nicht, da Haken nicht geklont werden.
Kann sein, wenn dieses Hook-Skript selbst versioniert ist, und dann zu (symbolischer Verbindung) in den Clone-Servern verlinkt (vorausgesetzt, ihr Betriebssystem unterstützt diese Link-Funktion).
Oder vielleicht, wenn die Hooks Teil eines git template directory zum Erstellen der Klone verwendet werden (das würde nur ihre Präsenzen im Klon Repo sicherstellen, das würde nicht garantieren, dass sie tatsächlich verwendet und ausgeführt werden).
Aber ich glaube nicht, dass es eine "zentrale" Möglichkeit gibt, ein Commit zu erzwingen.
Wie Jefromi noch deutlicher in den Kommentaren (Hervorhebung von mir) erklärt:
Ich denke, es geht gegen die Idee eines Git Repository wirklich erzwungen Haken mit dem Repo verteilt zu haben.
Mein Klon ist mein Repository. Ich sollte in der Lage sein, git darauf zu verwenden, aber ich mag es, zu entscheiden, ob ich hooks ausführen soll oder nicht.
(Und von einem Standpunkt der Sicherheit aus, dass würde, wirklich etwas beängstigend -. Niemand die Möglichkeit, mich zu zwingen, sollte bestimmte Skripte ausgeführt werden, wenn ich bestimmte git Befehle ausführen)
ich mit diesem Kommentar zustimmen und haben nur Möglichkeiten gesehen, um Regeln durchzusetzen, die lokal in einem bestimmten spezialisierten Repo angewendet werden.
Zum Beispiel würden Sie nicht direkt zum zentralen Repo drängen, sondern zuerst zu einem QA-Repo, der Ihr Commit nur akzeptiert, wenn es bestimmten Regeln folgt. Wenn dies der Fall ist, wird das QA-Repo Ihr Commit auf das zentrale Repo übertragen.
Ein weiteres Beispiel direkt abgeleitet von dem, was ich „Serverless Continuous Integration with Git“ nur wäre erwähnt, eine Art und Weise lokal private bauen, dass sie überall vor drängen arbeitet zu erzwingen.
Ich denke, es ist wirklich gegen die Idee eines Git-Repository zu haben erzwungene Hooks, die mit dem Repo verteilt werden. Mein Klon ist * mein * Repository. Ich sollte in der Lage sein, git darauf zu verwenden, aber ich mag es, zu entscheiden, ob ich hooks ausführen soll oder nicht. (Und aus Sicherheitsgründen wäre das wirklich beängstigend - niemand sollte die Fähigkeit haben, mich dazu zu zwingen, bestimmte Skripte auszuführen, wenn ich bestimmte git-Befehle ausführe.) – Cascabel
@Jefromi: Weißt du, was scarry ist? Als ich den Kommentar eintippte, bevor ich meine bearbeitete Antwort einreichte, begann ich "add ..." zu tippen und FireFox auf meinem Computer schlug mir vor: "add Jefromi's comment". Nicht das erste Mal, dass ich dort gewesen bin, offensichtlich;) – VonC
Hinweis für Selbst: siehe auch http://StackOverflow.com/Questions/3209208/what-is-the-Cleverest-use-of-source-repository-that-you -have-je-gesehen/3209767 # 3209767 – VonC
Kann ein Pre-Commit-Hook auf diesem Haupt-Repository geskriptet werden und auf allen Klonen davon erzwungen werden?
Von githooks(5)
:
pre-commit This hook is invoked by git commit, and can be bypassed with --no-verify option.
Da der Haken leicht umgangen werden kann, so scheint es, die Antwort auf Ihre Frage lautet „Nein“.
Da auch das .git/hooks-Verzeichnis nicht geklont wird, scheint es keinen Mechanismus zu geben, es auf den Client zu übertragen.
Sie können den Pre-Commit-Hook nicht auf lokalen lokalen Repositorys erzwingen, aber in Ihrem zentralen Repo können Sie weiterhin einen Pre-Receive-Hook ausführen.
F. ex Ich musste sicher sein, dass die Commit-Nachrichten bestimmte Regeln befolgten (für Trac-Integration etc) so habe ich folgenden pre-receive-Hook verwendet, der jede Commit-Nachricht überprüft, die an das zentrale Repository gesendet wird, und verweigert drücken, wenn es nicht gut ist.
#!/bin/sh while read rev_old rev_new ref do MALFORMED="$(git rev-list --oneline $rev_old..$rev_new | egrep -v '#[0-9]+' | awk '{print $1}')" if [ x"$MALFORMED" != x ] then echo Invallid commit message on $MALFORMED exit 1 fi done
für weitere Informationen siehe f.ex https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Angenommen, Sie Quellcode in Ihre git Repo haben, die ein Build-System zugeordnet ist, können Sie das Build-System konfigurieren, dass der einzurichten pre-commit hook, dh durch Verschieben oder Verknüpfen eines Pre-Commit-Hooks, der ~ versioniert ist.
Ich habe dies noch nicht versucht. Ich kam hierher, um nach einer besseren Lösung zu suchen.
- 1. Mercurial Hook precommit get Repository-Pfad
- 2. Verwenden Sie gruntjs als Precommit-Hook
- 3. Ist es möglich einen "Precommit Hook" auf TFS hinzuzufügen?
- 4. Git-Hook-Syntax-Check
- 5. Git global hook customization
- 6. Pre Commit Hook für JSLint in Mercurial und Git
- 7. Mercurial precommit Skript eine Datei
- 8. Pre-Fetch-Hook-Funktionalität in Git
- 9. Git-Hook, ändern Sie Commit-Dateien
- 10. Kann gitolite git commit-msg hook verwalten?
- 11. Pass Parameter zu git Pre-Push-Hook
- 12. JIRA Code Validierung Commit Hook für 'Git'
- 13. Git pre-commit hook: geänderte/hinzugefügte Dateien
- 14. git pre-receive hook abgelehnt mit heroku
- 15. Welcher Benutzer führt den Git-Hook aus?
- 16. Git Post-Receive-Hook für Website-Staging
- 17. git pre-commit hook bypass email
- 18. Aufruf 'Git ziehen' von einem Git-Post-Update-Hook
- 19. Gibt es einen Git-Hook, der auf Git-Reset läuft?
- 20. Kann nicht nach dem Commit git Hook auf Git Submodul
- 21. Mercurial vermeiden Pre-Commit Hook auf Fach
- 22. TSLint pre-commit hook
- 23. Ich brauche einen Git-Hook, um MySql-Schema zu synchronisieren
- 24. Wie git Hook-Skript in Windows, Repository über Dateisystem verwenden?
- 25. git pre-commit-Hook-Formatcode - Intellij/Android Studio
- 26. Kann Git-Hook-Skripte zusammen mit dem Repository verwaltet werden?
- 27. Wie bekomme ich Git Pre-Push-Hook Refname
- 28. Git: Post-Empfang E-Mail-Hook, einschließlich Diff-Patches?
- 29. Git-Hook, um anzugeben, dass das Repository veraltet ist
- 30. Schreiben Sie GIT Pre-Commit Hook in Java?
Wenn Sie * erzwingen wollen *, verwenden Sie einen Aktualisierungs-Hook im zentralen Repo. Wenn der Hook eine Pro-Commit-Verifizierung durchführt, können Sie immer noch einen Hook vor dem Commit bereitstellen. Entwickler werden es wahrscheinlich freiwillig übernehmen, so dass sie es sofort herausfinden können, wenn sie etwas falsch gemacht haben, anstatt zu warten, bis sie versuchen, etwas zu unternehmen. – Cascabel
Mögliche Duplikate: (http://stackoverflow.com/questions/3462955/) und (http://stackoverflow.com/questions/427207/) – blong