2 votes

Chmod automatique d'un fichier lors d'un git add ?

J'ai un système de développement ubuntu utilisant git pour gérer les fichiers, mais j'aime faire mon édition dans QTCreator sur un système différent (Windows), donc j'ai un lecteur réseau Windows mappé au serveur ubuntu.

Cependant, il semble que chaque fois que j'enregistre un fichier, il ajoute l'indicateur d'exécution sur Windows. Parfois il passe de 664 à 764, et parfois je l'ai vu passer à 777.

J'ai donc fait un chmod 644 avant de faire mon ajout git, mais c'est plutôt une douleur dans le cul, et parfois j'oublie.

Existe-t-il un bon moyen d'empêcher Windows/QT d'ajouter le +x, ou de faire en sorte que "git add" donne automatiquement le chmod 664 à mes fichiers .c et .h avant de les mettre en scène et de les valider ?

Gracias

4voto

MyCwoissant Points 31

Edit :

Une solution pourrait être de définir core.fileMode à la variable false dans votre ~/.gitconfig . Cela permet à git d'ignorer le bit exécutable.

Si vous utilisez un système de fichiers FAT, vous pourriez vouloir configurer core.ignorecase a true également.

Ancienne réponse

En supposant que vous commit sur la boîte Linux, vous pouvez utiliser un hook, dans ce cas-ci .git/hooks/pre-commit :

#!/bin/sh
find . -type f -not -perm 0644 -exec chmod 644 {} \+
find . -type d -not -perm 0755 -exec chmod 755 {} \+
git add .

C'est un peu brutal dans le sens où cela force tous les fichiers et répertoires à une certaine permission. Vous pouvez ajouter chmod pour des fichiers spécifiques s'ils ont besoin d'avoir d'autres permissions que celles de la commande find y git add . D'autre part, il est court et simple.

Une solution plus complexe pourrait utiliser git diff --cached --name-only pour vérifier quels fichiers vont effectivement être livrés et ne corriger que ceux-là. Mais cela serait plus complexe et ne permettrait pas de corriger les changements de permission aléatoires.

#!/bin/sh
FILES=$(git diff --cached --name-only)
chmod 644 $FILES

0voto

Dans le cas où vous devez corriger des fichiers dans un repo existant, par exemple des bits exécutables, essayez ceci :

git ls-files “*.sh” | xargs git update-index –add –chmod=+x
git ls-files “*.exe” | xargs git update-index –add –chmod=+x

git ls-files est plus rapide que "find".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X