Comment ajouter chmod autorisations de fichier dans GIT?
Je veux git commit une .sh fichier, mais que vous voulez qu'il soit exécutable quand je caisse ce même fichier dans un autre serveur.
Est-il un moyen de le faire sans manuellement chmod u+x fichier sur les serveurs extraire le fichier?
OriginalL'auteur Henley Chiu | 2016-12-05
Vous devez vous connecter pour publier un commentaire.
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
définir l'indicateur et
pour l'enlever.
Sous le capot
Tout 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 réguliers100755
pour le fichier exécutable ceuxVous pouvez le visualiser à l'aide de
ls-file
sous-commande, avec--stage
option: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 paramètre
de base.fileMode
option à 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:
Bonus
De départ avec Git 2.9, vous pouvez transférer un fichier ET mettre le drapeau en une seule commande:
J'ai juste effectué le test sur un de mes référentiel et qu'il fonctionne comme prévu. Les autorisations ont été fixés sur le fichier à l'aide de la commande fourni sous Windows. Sur un de mes serveur (Debian) le fichier -rw-r--r-- les autorisations avant, maintenant défini à -rwxr-xr-x. Ce que git version que vous utilisez sur des ordinateurs locaux ou distants ?
git version 1.9.5 dans mon local, et git 1.7.1 dans le serveur pour le faire passer à la caisse.
Juste essayé de cloner sur un autre (plus) serveur avec git 1.7.10, il fonctionne encore bien, le fichier a x les autorisations. Peut-être que vous avez fait une erreur à un certain point, ou si vous avez des problèmes d'autorisations avec l'utilisateur qui a cloné sur le serveur distant
OriginalL'auteur Antwane
Antwane réponse est correct, 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
ou755
(orthographié (100644
et100755
; la100
partie signifie "fichier régulier"):L'ex—644—signifie que le fichier doit pas être exécutable, et le second signifie qu'il devrait ê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 être022
de retirer l'autorisation d'écriture de "groupe" et "les autres", ou002
pour retirer la permission d'écrire que "d'autres". Il pourrait également être077
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 le mode
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.OriginalL'auteur torek