Je veux git commettre un fichier .sh, mais je veux qu'il soit exécutable lorsque je récupère ce même fichier sur un autre serveur.
Y at-il un moyen de le faire sans chmod manuellement ce fichier dans les serveurs qui extraient le fichier?
Je veux git commettre un fichier .sh, mais je veux qu'il soit exécutable lorsque je récupère ce même fichier sur un autre serveur.
Y at-il un moyen de le faire sans chmod manuellement ce fichier dans les serveurs qui extraient le fichier?
Selon la documentation officielle, vous pouvez définir ou supprimer le "exécutable" drapeau sur n'importe quel fichier suivi à l'aide de update-index
sous-commande.
Utilisation
git update-index --chmod=+x path/to/file
pour définir le drapeau et
git update-index --chmod=-x path/to/file
pour l'enlever.
Sous le capot
Bien que cela ressemble à la régulière des fichiers unix système d'autorisation, en fait il ne l'est pas. Git maintient un spécial "mode" pour chaque fichier dans la mémoire de stockage interne:
100644
pour les fichiers standard100755
pour ceux exécutableVous pouvez le visualiser à l'aide de ls-file
sous-commande, avec --stage
option:
$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0 .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0 my_executable_script.sh
Par défaut, lorsque vous ajoutez un fichier à un référentiel, Git va essayer d'honorer son système de fichier d'attributs et de définir la bonne filemode en conséquence. Vous pouvez désactiver cette fonction en définissant core.fileMode
option à false:
git config core.fileMode false
Dépannage
Si, à un certain point le Git filemode n'est pas fixé, mais le fichier est correct du système de fichiers drapeau, essayez de supprimer le mode, puis de nouveau:
git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file
Bonus
Départ avec Git 2.9, vous pouvez transférer un fichier ET mettre le drapeau en une seule commande:
git add --chmod=+x path/to/file
Antwane la réponse est correcte, et cela devrait être à un commentaire, mais les commentaires n'ont pas assez d'espace et ne permettent pas la mise en forme. :-) Je veux juste ajouter que dans Git, les autorisations de fichier sont enregistrées seulement1 comme 644
ou 755
(orthographié (100644
et 100755
; 100
"correspond à "un fichier régulier"):
diff --git a/path b/path
new file mode 100644
L'ex-644-signifie que le fichier doit pas être exécutable, et le second signifie qu'il doit être exécutable. Comment cela se transforme en un véritable fichier de modes à l'intérieur de votre système de fichiers est un peu dépendants. Sur les systèmes Unix, les bits sont transmis par le biais de votre umask
, ce qui devrait normalement être 022
de retirer l'autorisation d'écriture de "groupe" et "les autres", ou 002
pour retirer la permission d'écrire que "d'autres". Il pourrait également être 077
si vous êtes particulièrement préoccupé par la confidentialité et souhaitez supprimer, lire, écrire, et exécuter la permission de les deux "groupe" et "autres".
1les premières versions de Git enregistré des autorisations de groupe, de sorte que certains dépôts ont entrées dans l'arborescence avec mode d' 664
. Moderne Git n'est pas, mais depuis aucune partie de n'importe quel objet peut jamais être modifié, ces vieux autorisations bits, persistent dans de vieux objets de l'arborescence.
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.