Comment faire pour modifier le mode fichier ignorez git (chmod)?

j'ai un projet dans lequel je dois changer le mode des fichiers avec chmod à 777 tout en développant, mais qui ne devrait pas changer dans le rapport principal.

git reprend chmod -R 777 . et marque Tous les fichiers tels que modifiés. Y a-t-il un moyen de faire des changements de mode git ignore qui ont été faits aux fichiers?

1928
demandé sur VonC 2009-10-17 01:43:38

11 réponses

, Essayez:

git config core.fileMode false

From 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 drapeau -c peut être utilisé pour définir cette option pour les commandes uniques:

git -c core.fileMode=false diff

Et le --global drapeau de rendre le comportement par défaut pour l'utilisateur connecté.

git config --global core.fileMode false

Avertissement

core.fileMode n'est pas la meilleure pratique et doit être utilisée avec précaution. 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 bonne façon de résoudre ce genre de situation est de gérer la permission des dossiers et des fichiers 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.

3185
répondu Greg Hewgill 2017-08-01 06:21:21

annuler le changement de mode 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 en 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
250
répondu yoda 2011-05-16 14:58:42

si vous voulez définir cette option pour toutes vos repos, utilisez l'option --global .

git config --global core.filemode false

si cela ne fonctionne pas vous utilisez probablement une nouvelle version de git alors essayez l'option --add .

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
117
répondu adrien 2015-04-19 20:12:00

si

git config --global core.filemode false

ne fonctionne pas pour vous, faites-le manuellement:

cd into yourLovelyProject folder

cd dans .dossier git:

cd .git

modifier le fichier de configuration:

nano config

changement de true à false

[core]
        repositoryformatversion = 0
        filemode = true

- >

[core]
        repositoryformatversion = 0
        filemode = false

enregistrer, quitter, allez à la partie supérieure du dossier:

cd ..

réinitialiser le git

git init

vous êtes fait!

67
répondu Sinan Eldem 2013-08-06 13:10:33

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

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

49
répondu Jakub Narębski 2017-05-23 11:47:32

vous pouvez le configurer globalement:

git config --global core.filemode false

si ce qui précède ne fonctionne pas pour vous, la raison pourrait être que votre configuration locale l'emporte sur la configuration globale.

supprimer 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
répondu Tyler Long 2015-01-21 09:12:25

si vous avez utilisé la commande chmod Vérifiez déjà la différence de fichier, elle affiche le mode fichier précédent et le mode fichier courant tel que:

nouveau mode: 755

ancien mode: 644

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

sudo chmod 644 .

définit maintenant core.fileMode à false dans le fichier de configuration en utilisant la commande ou manuellement.

git config core.fileMode false

puis appliquer la commande chmod pour modifier les permissions de tous les fichiers tels que

sudo chmod 755 .

et remettre core.fileMode à true.

git config core.fileMode true

Pour les meilleures pratiques de ne pas Garder de base.fileMode false toujours.

17
répondu Kishor Vitekar 2015-10-13 07:34:57

si vous voulez définir filemode à false dans les fichiers de configuration de façon récursive (y compris les sous-modules)) : find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'

14
répondu dryobs 2013-07-16 12:23:45

en définissant l'alias suivant (in ~/.gitconfig) vous pouvez facilement désactiver temporairement le fileMode par commande 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 des commandes qui les afficheront autrement. Par exemple:

git nfm status
14
répondu Ville 2015-07-24 15:01:35

solution Simple:

Hit Simple félicite dans le Dossier du projet( il ne supprimera pas les originaux de vos changements) ...il ne annuler les modifications ce qui avait été fait alors que vous avez changé projet de dossier d'autorisation

confie est ci-dessous:

git config de base.fileMode faux

pourquoi ce tout fichier inutile obtenir modifié: parce que vous avez changé le dossier du projet d'autorisations avec félicite sudo chmod-R 777 ./ votreprojetfolder

Quand allez-vous vérifier les changements ce que vous n'avez pas fait? vous avez trouvé comme ci-dessous en utilisant git diff nom du fichier

enter image description here

1
répondu ngCourse 2018-03-19 13:13:57

ça marche pour moi:

find . -type f -exec chmod a-x {} \;

ou Marche arrière, selon votre système d'exploitation

find . -type f -exec chmod a+x {} \;
1
répondu Martin Volek 2018-04-30 15:06:11