Question Comment faire pour que Git ignore les changements de mode de fichier (chmod)?


J'ai un projet dans lequel je dois changer le mode de fichiers avec chmod à 777 en cours de développement, mais qui ne devrait pas changer dans le principal repo.

Git décroche chmod -R 777 . et marque tous les fichiers comme modifiés. Est-il possible de faire en sorte que Git ignore les changements de mode qui ont été apportés aux fichiers?


1882
2017-10-16 21:43


origine


Réponses:


Essayer:

git config core.fileMode false

De git-config (1):

core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

le -c flag peut être utilisé pour définir cette option pour les commandes uniques:

git -c core.fileMode=false diff

Et le --global flag en fera le comportement par défaut de l'utilisateur connecté.

git config --global core.fileMode false

Attention

core.fileMode n'est pas la meilleure pratique et devrait être utilisé avec soin. Ce paramètre ne couvre que le bit exécutable du mode et jamais les bits de lecture / écriture. Dans de nombreux cas, vous pensez que vous avez besoin de ce paramètre parce que vous avez fait quelque chose comme chmod -R 777, rendant tous vos fichiers exécutables. Mais dans la plupart des projets la plupart des fichiers n'ont pas besoin et ne devraient pas être exécutables pour des raisons de sécurité.

La meilleure façon de résoudre ce genre de situation consiste à gérer les autorisations de dossier et de fichier séparément, avec quelque chose comme:

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

Si vous faites cela, vous n'aurez jamais besoin d'utiliser core.fileMode, sauf dans un environnement très rare.


3109
2017-10-16 21:53



changement de mode d'annulation dans l'arbre de travail:

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x

Ou à mingw-git

git diff --summary | grep  'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x

246
2018-01-18 02:20



Si vous souhaitez définir cette option pour tous vos repos, utilisez le --global option.

git config --global core.filemode false

Si cela ne fonctionne pas, vous utilisez probablement une nouvelle version de git alors essayez le --add option.

git config --add --global core.filemode false

Si vous l'exécutez sans l'option --global et que votre répertoire de travail n'est pas un repo, vous obtiendrez

error: could not lock config file .git/config: No such file or directory

115
2018-04-21 12:00



Si

git config --global core.filemode false

ne fonctionne pas pour vous, faites-le manuellement:

cd into yourLovelyProject folder

cd dans le dossier .git:

cd .git

éditez le fichier de configuration:

nano config

changer vrai à faux

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

enregistrer, quitter, aller au dossier supérieur:

cd ..

reinit le git

git init

vous avez terminé!


66
2017-08-06 13:10



Ajouter à Greg Hewgill réponse (d'utilisation core.fileMode variable de configuration):

Vous pouvez utiliser --chmod=(-|+)x option de git update-index (version bas niveau de "git add") pour modifier les permissions d'exécution dans l'index, d'où il serait récupéré si vous utilisiez "git commit" (et non "git commit -a").


48
2017-10-16 22:03



Vous pouvez le configurer globalement:

git config --global core.filemode false

Si ce qui précède ne fonctionne pas pour vous, la raison en est peut-être que votre configuration locale remplace la configuration globale.

Supprimez votre configuration locale pour que la configuration globale prenne effet:

git config --unset core.filemode

Alternativement, vous pouvez changer votre configuration locale à la bonne valeur:

git config core.filemode false


32
2018-01-21 09:12



Si vous avez utilisé chmod commande déjà alors vérifier la différence de fichier, Il montre le mode de fichier précédent et le mode de fichier en cours tels que:

nouveau mode: 755

ancien mode: 644

définir l'ancien mode de tous les fichiers en utilisant la commande ci-dessous

sudo chmod 644 .

Maintenant, définissez core.fileMode sur false dans le fichier de configuration en utilisant la commande ou manuellement.

git config core.fileMode false

puis appliquez la commande chmod pour modifier les autorisations de tous les fichiers tels que

sudo chmod 755 .

et à nouveau définir core.fileMode à true.

git config core.fileMode true

Pour les meilleures pratiques, ne gardez pas core.fileMode false toujours.


15
2017-10-13 07:34



Si vous voulez définir filemode sur false dans les fichiers de configuration récursivement (y compris les sous-modules): find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'


14
2017-07-16 12:23



En définissant l'alias suivant (dans ~ / .gitconfig), vous pouvez facilement désactiver temporairement la commande fileMode per git:

nfm = "!f(){ git -c core.fileMode=false $@; };f"

Lorsque cet alias est préfixé à la commande git, les changements de mode de fichier n'apparaîtront pas avec les commandes qui les afficheraient autrement. Par exemple:

git nfm status

14
2017-07-24 15:01