Globaler Git-Hook

Globaler Git-Hook

Ist es möglich, alle Möglichkeiten zum Erstellen eines Git-Repos zu verknüpfen? So kann ich ein Skript ausführen, wenn das Repo geklont, initialisiert usw. wird (gibt es außer dem Verschieben/Kopieren von Ordnern noch andere Möglichkeiten?).

Meine Absicht besteht darin, alle Repos zu verfolgen, sodass ich nicht alle Verzeichnisse durchgehen muss, um eine Aktion auszuführen (hauptsächlich, git statusweil ich manchmal vergesse, Änderungen zu committen usw. git gc --auto).

Antwort1

Hooks werden (derzeit) ausschließlich pro Repository konfiguriert, sodass vor der Erstellung eines Repositorys keine aktiven Hooks vorhanden sein können.

Wenn Sie nur einige repository-spezifische Einstellungen für alle neuen Repositories identisch initialisieren möchten, können Sie möglicherweise denRepository-Vorlagenmechanismus.

Durch die Verwendung Ihrer eigenen Vorlage können Sie

  • aktivierte Hooks installieren (durch Bereitstellung einer <template‑dir>/hooks/<hook‑name>Datei),
  • Festlegen von Konfigurationsvariablen (durch Bereitstellung einer <template‑dir>/configDatei) und
  • Konfigurieren Sie Ausschlussregeln oder Attribute pro Repository (indem Sie eine <template‑dir>/info/excludeoder <template‑dir/info/attributes>Datei bereitstellen).

Jede Konfigurationsdatei, die in einem .gitVerzeichnis gespeichert ist, kann in einer Vorlage abgelegt werden, um als erste Kopie für diese Datei in neuen, aus der Vorlage initialisierten Repositorys zu dienen. Ich nehme an, Sie könnten sogar erste Objekte und Referenzen bereitstellen.

Sobald Sie ein Vorlagenverzeichnis mit Ihren Anpassungen erstellt haben, müssen Sie angeben git init, git clonewo es zu finden ist. Dies kann explizit mit der --templateOption (Git 0.99.4 oder höher) oder implizit mit der GIT_TEMPLATE_DIRUmgebungsvariable (Git 1.5.0 oder höher) oder implizit durch Festlegen der init.templatedirKonfigurationsvariable in den „globalen“ (benutzerspezifischen) oder „systemspezifischen“ Git-Konfigurationsdateien (d. h. ~/.gitconfigoder /etc/gitconfig(variiert je nach Installation); Git 1.7.1 oder höher) erfolgen.

Antwort2

Sie können Git-Repos nicht „verfolgen“ (im Sinne von „eine zentrale Referenz nach der Liste der aktuell aktiven Git-Repos fragen“).
Jedes Git-Repo ist unabhängig von den anderen.

Zwei Lösungen könnten in Betracht gezogen werden:

  • eine Git-Vorlage wie in Chris' Antwort, mit einem derClientseitige Hooksbei der ersten Verwendung kann das Git-Repo in einer „zentralen“ Datei registriert
    werden. Diese Datei wird dann von einem externen Skript (extern zu Git) gelesen, um die relevanten git statusoder git gcgewünschten Aktionen auszuführen.

  • Wenn alle Ihre Git-Repos im selben gemeinsamen Verzeichnis deklariert sind, können Sie ein globales übergeordnetes Git-Repo deklarieren und alle Unterrepos alsUntermodule.
    Seitgit1.7.0, git statusweiß, wenn ein Untermodul nicht festgeschriebene Änderungen enthält.

verwandte Informationen