
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 status
weil 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>/config
Datei) und - Konfigurieren Sie Ausschlussregeln oder Attribute pro Repository (indem Sie eine
<template‑dir>/info/exclude
oder<template‑dir/info/attributes>
Datei bereitstellen).
Jede Konfigurationsdatei, die in einem .git
Verzeichnis 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 clone
wo es zu finden ist. Dies kann explizit mit der --template
Option (Git 0.99.4 oder höher) oder implizit mit der GIT_TEMPLATE_DIR
Umgebungsvariable (Git 1.5.0 oder höher) oder implizit durch Festlegen der init.templatedir
Konfigurationsvariable in den „globalen“ (benutzerspezifischen) oder „systemspezifischen“ Git-Konfigurationsdateien (d. h. ~/.gitconfig
oder /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 relevantengit status
odergit gc
gewü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 status
weiß, wenn ein Untermodul nicht festgeschriebene Änderungen enthält.