254 votes

Mettre à jour et valider uniquement les permissions d'un fichier en utilisant le contrôle de version git

Je viens de transformer un some.sh en un fichier exécutable ( chmod 755 ... ), les permissions ont été mises à jour mais pas le contenu. Existe-t-il un moyen de commettre le fichier dans git, de façon à ce que le bit exécutable soit restauré/établi lors de la mise à jour du fichier. clone / caisse / tirer ?

Mise à jour : comment puis-je savoir que les nouvelles permissions ont été soumises à github ?

297voto

ewwink Points 424

L'article de @fooMonster a fonctionné pour moi.

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Comme vous pouvez le voir, le fichier a une permission de 644 (en ignorant le 100). Nous voudrions le changer en 755 :

# git update-index --chmod=+x script.sh

valider les changements

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

12 votes

Il convient de noter que vous devez en fait utiliser '-x/+x'. Vous ne pouvez pas définir d'autres permissions ou un masque de bits.

1 votes

Note utilisant git commit -a n'a rien fait pour moi, mais la définition du message sur la ligne de commande l'a fait. Une petite bizarrerie

1 votes

L'ordre de commandement devrait être : # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push

243voto

Vincent B. Points 913

Par défaut, git mettra à jour les permissions d'exécution des fichiers si vous les modifiez. Il ne modifiera ni ne suivra aucune autre permission.

Si vous ne voyez aucun changement en modifiant la permission d'exécution, vous avez probablement une configuration dans git qui ignore le mode fichier.

Regardez dans votre projet, dans le .git pour le dossier config et vous devriez voir quelque chose comme ceci :

[core]
    filemode = false

Vous pouvez soit le changer en true dans votre éditeur de texte préféré, ou exécutez :

git config core.filemode true

Ensuite, vous devriez être en mesure de livrer normalement vos fichiers. Il ne validera que les changements de permission.

0 votes

Merci ! Comment puis-je vérifier que les changements de permission ont été soumis à github ?

2 votes

Vous pouvez le voir lorsque vous visualisez un fichier (par exemple, sur Fichier gitignore de Rails vous trouverez 100644 comme permission du fichier).

11 votes

Modifier les permissions sous Windows avec git (modifier les permissions des fichiers et les valider) : blog.lesc.se/2011/11/comment-changer-les-fichiers-premissions-dans-git.html

32voto

Otheus Points 71

Ça ne marche pas pour moi.

Le mode est vrai, les perms du fichier ont été modifiés, mais git dit qu'il n'y a pas de travail à faire.

git init
git add dir/file
chmod 440 dir/file
git commit -a

Le problème semble être que git ne reconnaît que certains changements de permission.

53 votes

Correct - git ne fait que vérifier si un fichier est exécutable ou non, et non l'ensemble des permissions *nix. Il faudrait donc que vous passiez d'un fichier exécutable à un fichier non exécutable pour qu'il pense que vous avez modifié quelque chose qui mérite d'être enregistré...

0 votes

Je n'ai pas trouvé de documentation claire : quel déclencheur post-action puis-je utiliser pour régler les paramètres en conséquence ?

2 votes

Eh bien, il y a un post-checkout accrocher git qui couvrirait certains cas, mais je ne suis pas sûr que cela couvre toutes les choses possibles qui mettent à jour les fichiers dans votre arbre de travail. Vous pourriez être mieux d'avoir simplement un shell script supplémentaire dans votre repo qui définit les choses en conséquence. Alternativement, il y a quelques projets qui augmentent les fonctionnalités de git pour stocker des métadonnées, mais je n'ai jamais vraiment essayé l'une d'entre elles...

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