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?
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.
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
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
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!
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").
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
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.
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/'
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
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
ç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 {} \;