Je prévois d'écrire quelques hooks git en tant que projet qui enregistre les actions de l'utilisateur dans une base de données. Cette base de données peut ensuite être utilisée pour interroger toutes ses activités. Les actions que je suis en train de se connecter sontPersonnalisation du hook global Git
- commettras
- traction
- pousser
- fusion
- branche
Je veux obtenir ce emballé dans distros qui peuvent être installés via directeur chargé d'emballage. Git permet crochets globaux en plaçant dans une telle $PREFIX/share/templates/hooks
Il a actuellement quelques crochets qui sont désactivées (.sample
est jointe à leur nom). Lorsqu'un nouveau référentiel est créé, ces crochets sont copiés dans le dossier .git
du dépôt
Maintenant, si un utilisateur installe le paquet pour ces crochets et crochets comme post-commit
et post-update
sont déjà activés. Dans ce cas, le fichier de script sera écrasé! Cela semble mauvais
Cela signifie que git n'a qu'un seul fichier hook par action. Si je dois garder trois crochets pour une action, cela signifie que ce n'est pas possible. Cela signifie que l'installation automatisée à partir du gestionnaire de paquets peut entraîner des conflits. Maintenant, pensez que nous avons empaqueté les crochets pour écraser le fichier activé par défaut. Si un utilisateur veut ajouter d'autres actions à ces fichiers et a ensuite décidé de désinstaller mon paquet, alors sa commande personnalisée aurait également disparu?
Je pensais que git était assez intelligent à cet égard et je me suis trompé :(
Il doit être un dossier nommé post-commit
et post-update
ou quelles que soient les actions et git doivent exécuter tous les scripts dans ce dossier. Je suis Toujours chercher un moyen de gérer la situation actuelle
Vous pourriez jeter un coup d'oeil à ceci [question sur le suivi des crochets de git] (http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository) - J'ai posté une implémentation barebones d'installer des liens symboliques dans le répertoire hooks, qui exécute les hooks appropriés - il est facilement extensible à plusieurs hooks pour la même tâche, et permet également aux utilisateurs de laisser derrière eux leurs propres hooks locaux. – Cascabel
Note: Une simple "exécution d'une liste de scripts" ne fonctionnera pas correctement pour tous les types de hook car certains d'entre eux s'attendent à recevoir des données sur stdin (par exemple pré-réception, post-réception, post-réécriture); dans la plupart des implémentations naïves, le premier script à exécuter saisirait toutes les données et le reste ne recevrait rien (EOFs). Cela peut fonctionner pour capturer les données une fois et les alimenter pour chaque script, mais cela peut ne pas convenir à tous les scripts/situations. –
Jefromi, merci. Cela semble bien que la symétrie peut être une solution, mais encore une fois le problème est que comment patcher git sur chaque machine afin que git init copies croise des liens symboliques vers un dossier? Des bons exemples? –