2010-12-16 14 views
34

Gibt es eine Möglichkeit, Änderungen am Git-Hook zu verfolgen? Ich habe drei Haken, die nur auf meiner Maschine angezeigt werden, nicht wenn meine anderen Entwickler holen. Der Versuch, git add zu versuchen, funktioniert nicht.Verfolgen von Änderungen an Hooks in .git/hooks

+0

Ich würde die Antwort auch dazu lieben! Ich kann keine Beschreibung an meinen Webserver senden. Ich habe Vorschläge gesehen, einen Symlink im kontrollierten Verzeichnis zu verwenden und auf die Datei unter .git zu zeigen, aber ich konnte es nicht zum Laufen bringen. – Robert

+0

mögliches Duplikat von [Kann Git Hookscripts zusammen mit dem Repository verwaltet werden?] (Http ://Paketüberfluss.com/questions/427207/can-git-hook-scripts-verwaltet-zusammen mit-der-repository) – Cascabel

+0

Ich habe gewählt, um mit dem ältesten genauen Duplikat zu schließen. Hier sind zwei weitere: http://stackoverflow.com/questions/2050450/git-hooks-management und http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository/3464399#3464399 Der General Vorschlag ist es, die Haken, entweder das ganze Verzeichnis, oder eins nach dem anderen in einer schickeren Weise, wie ich in der zweiten dieser beiden Links vorgeschlagen. – Cascabel

Antwort

32

http://benjamin-meyer.blogspot.com/2008/10/git-hooks.html

Dateien im .git/Haken-Verzeichnis sind nicht Teil des Endlagers und so sind sie nicht verfolgt. Eine Problemumgehung besteht darin, ein git_hooks-Verzeichnis oben im Repository zu haben, wie in Arora, und symbolisieren Sie git/hooks mit git_hooks, wenn Sie klonen. Auf diese Weise werden die Hooks Teil des Projekts sein, unter Revisionskontrolle und für jeden zugänglich.

+0

BEARBEITEN: Dateien im .git/* Verzeichnis gehören nicht zum Repository und werden daher nicht verfolgt. – Jaseem

+2

+1 großer Tipp - nur daran zu erinnern, Symlink, aber das git_hooks Verzeichnis zu sehen sollte eine gute Erinnerung sein ... – kfmfe04

+0

@ kfmfe04 Sie müssen sich an nichts erinnern :) verwenden Sie einfach [Build-Skript] (https: // en .wikipedia.org/wiki/Build_automation) – sobi3ch

10

Ich weiß, dass diese Frage Jahre alt ist, aber ich denke, das muss für Reisende wie mich gesagt werden, die hier landen: Haken werden nicht vom Design verfolgt! Brians Antwort wird funktionieren, aber der Deal damit ist, dass du effektiv allen anderen Leuten, mit denen du arbeitest, vertraust, keinen bösartigen Code in das Repository zu legen, den deine Hooks dann ohne Frage ausführen; Das ist die Definition eines Sicherheitslochs.

+0

Guter Punkt! Dies könnte jedoch dadurch gelöst werden, dass dieses "git_hooks" -Verzeichnis in ein völlig separates Projekt eingefügt wird und die Erlaubnis zum Repo nur Personen erteilt wird, die über ausreichend Wissen verfügen und für Änderungen verantwortlich sind. – sobi3ch

+0

Ich laufe 'rake spec' die ganze Zeit und vertraue darauf, dass ich nicht mit irgendeinem Psychopathen arbeite, der' System ("rm -rf/--no-preserve-root") 'in das Rakefile gesetzt hat. Ich sehe nicht, wie vertrauensvoll meine Mitbearbeiter keinen bösartigen Code an den Git-Hooks begangen haben ... ist anders ... – lamont

+0

@lamont manchmal ist der Code bösartig, aber der Programmierer ist es nicht. Wenn Sie der Meinung sind, dass Sie den Leuten, mit denen Sie arbeiten, in diesem Ausmaß vertrauen können, dann ist das großartig, aber das ändert nichts daran, dass die Hooks nicht vom Design und aus diesem Grund verfolgt werden. –

2

Antwort Ändern Brians zu berücksichtigen Philipps wichtiger Punkt:

Wenn Benutzer mit Schreibzugriff haben, die einen Haken erzeugt (etwa post-commit) mit ‚#!/Bin/sh rm -rf ~ "Da geht dein Home-Verzeichnis. (Oder vielleicht etwas gutartiger, aber immer noch dumm.)

Um sich davor zu schützen, wäre es am besten, das Verzeichnis nicht zu symbolisieren, sondern manuell in und aus einem git_hooks-Verzeichnis zu kopieren. Ja, Sie müssen daran denken, diese Dateien manuell zu kopieren, wenn Sie sie aktualisieren, aber besser als nichts, und trotzdem geben Sie keinem Benutzer Zugriff auf Befehle auf Ihrem Computer auf Benutzerebene.

AKTUALISIERUNG: Wie unten erwähnt, wenn Sie planen, Ihre Hooks zu ändern, könnten Sie ein Wrapper-Skript erstellen, das die Dateien kopiert und dann das Commit ausführt. Allerdings ist das Automatisieren eines Commits (mit git Hinzufügen und Eingeben einer automatisierten Nachricht) wirklich chaotisch. Eine bessere Idee wäre, dass einer Ihrer Hooks die Kopie in dieses "git_hooks" -Verzeichnis vor dem Commit kopiert. Auf diese Weise wäre ein böswilliger Benutzer nicht in der Lage, eine Datei zu committen, die beim nächsten Hook-Aufruf ausgeführt wird.

+0

Sie müssen sich an nichts erinnern :) Verwenden Sie einfach [Build-Skript] (https://en.wikipedia.org/wiki/Build_automation). Dann können Sie symlink oder kopieren oder was auch immer, wenn Sie andere Idee haben. – sobi3ch

0

Verwenden Sie Vorlage dirs. Von einem Git-Klon können Sie uns die Flagge --template=<template_directory> hinzufügen, um Dateien zu $GIT_DIR hinzuzufügen. Sie müssen auch ein Verzeichnis erstellen, in dem Ihre Vorlage gespeichert ist, oder den von gits bereitgestellten Speicherort /usr/share/git-core/templates verwenden. Wenn Sie ein Template-Verzeichnis verwenden, können Sie einen aktiven Hook für die Ausführung im Hooks-Verzeichnis erstellen.

Ich bin mir nicht sicher, wie oft Ihre Leute Änderungen vornehmen, aber Sie könnten diese Vorlage in einem Repo speichern, auf das alle Zugriff haben. Eigentlich sollte dies ein Hook sein, der eine Datei im Repo ausführt, die den gesamten Code enthält, den Sie automatisch ausführen müssen.

Wie andere bereits erwähnt haben, öffnen Sie sich selbst, wenn Sie unbekannten Code automatisch ausführen.

1

Wenn Sie diesen alten Thread wiederbeleben, könnten Sie ein separates versionsgesteuertes Verzeichnis haben, das Ihre Hooks enthält, und dann das git configcore.hooksPath verwenden, um auf dieses Verzeichnis zu zielen.

Verwandte Themen