103 votes

Pourquoi mon crochet de pré-engagement Git n'est-il pas exécutable par défaut ?

Si vous consultez la réponse acceptée dans : Aggrégation et minification de JavaScript dans un crochet précommit Git, vous verrez que j'ai dû faire un chmod +x sur mon crochet précommit pour le faire fonctionner.

Pourquoi cela n'est-il pas exécutable par Git par défaut ?

134voto

Roman Points 1983

Mon contexte - développement web avec Node.js. J'avais besoin d'ajouter la fonctionnalité husky, mais j'ai obtenu une erreur, probablement liée à l'accès au disque. Cela m'a aidé dans ma situation :

chmod ug+x .husky/*
chmod ug+x .git/hooks/*

56voto

Dave Newton Points 93112

Parce que les fichiers ne sont pas exécutables par défaut ; ils doivent être configurés pour être exécutables.

Les fichiers d'exemple issus d'un git init sont tous exécutables ; s'ils sont copiés ou renommés en tant que fichiers non exemples, ils conserveront le drapeau x du fichier original.

De nouveaux fichiers seront créés avec les paramètres par défaut actuels. Dans votre cas, consultez ces paramètres par défaut avec la commande umask:

$ umask
0022

Par défaut, les nouveaux fichiers ne seront pas u+x à moins d'être explicitement configurés comme tels.

31voto

VonC Points 414372

J'ai dû faire un chmod +x sur mon crochet pre-commit pour le faire fonctionner

Le problème est de réaliser qu'il n'était pas exécutable au départ.
Ce sera plus facile avec Git 2.15.x/2.16 (T1 2018)

Voir commit f805a00 (06 oct 2017) par Damien Marié (mdamien).
(Intégré par Junio C Hamano -- gitster -- dans commit 130b512, 06 nov 2017)

run-command: ajouter un indice lorsque un crochet est ignoré

Lorsqu'un crochet est présent mais que le fichier n'est pas défini comme exécutable, git ignorera le crochet.
Pour l'instant c'est silencieux ce qui peut être déroutant.

Ce commit ajoute cet avertissement pour améliorer la situation:

indice : Le crochet 'pre-commit' a été ignoré car il n'est pas défini comme exécutable.
indice : Vous pouvez désactiver cet avertissement avec `git config advice.ignoredHook false`

Pour permettre l'ancien cas d'utilisation d'activer/désactiver les crochets via le drapeau exécutable, un nouveau paramètre est introduit : advice.ignoredHook.

8voto

Dhaval L. Points 16

Tout comme une référence, après avoir rendu le fichier exécutable, si cela apparaît dans les modifications de fichier git en raison de changements de mode de fichier, ce qui suit fonctionnerait: (essayé sous Ubuntu/Linux)

chmod ug+x .husky/pre-commit # rendre le fichier exécutable
git config core.filemode false # pour ignorer les changements de mode de fichier

Référence: Comment supprimer les fichiers indiquant "old mode 100755 new mode 100644" des modifications non indexées dans Git ?

7voto

박경은 Points 25

J'ai pu résoudre le problème en exécutant simplement la commande ci-dessous.

chmod ug+x .husky/*

J'ai initialisé husky dans Windows. Après cela, le problème est survenu dans WSL, et il s'agit probablement d'un problème qui n'a pas été créé en tenant compte des autorisations de fichier de Linux au moment de l'initialisation dans Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X