J'ai un projet dans lequel je dois changer le mode des fichiers avec chmod
777 lors du développement, mais qui ne devrait pas changer dans le référentiel principal.
Git reprend chmod -R 777 .
et marque tous les fichiers comme modifiés. Existe-t-il un moyen de faire en sorte que Git ignore les modifications de mode qui ont été apportées aux fichiers?
git diff
, et qui ne veut donc pas modifier leurs fichiers de configuration Git: vous pouvez utilisergit diff -G.
par Zed réponse ici .Réponses:
Essayer:
Depuis git-config (1) :
L'
-c
indicateur peut être utilisé pour définir cette option pour les commandes uniques:Et l'
--global
indicateur en fera le comportement par défaut pour l'utilisateur connecté.Les modifications du paramètre global ne seront pas appliquées aux référentiels existants. En outre,
git clone
etgit init
définir explicitementcore.fileMode
àtrue
la configuration des prises en pension comme indiqué dans faux core.fileMode global Git surchargée localement sur le cloneAttention
core.fileMode
n'est pas la meilleure pratique et doit être utilisée avec précaution. Ce paramètre ne couvre que le bit de mode exécutable 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 commechmod -R 777
, rendre tous vos fichiers exécutables. Mais dans la plupart des projets, la plupart des fichiers n'ont pas besoin et ne doivent 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 séparément les autorisations de dossier et de fichier, avec quelque chose comme:
Si vous faites cela, vous n'aurez jamais besoin de l'utiliser
core.fileMode
, sauf dans un environnement très rare.la source
git config --global core.filemode false
vous n'aurez qu'à le faire une fois pour toutes les dépôts.git config
commande écrit le paramètre dans le fichier de configuration correct (.git/config
uniquement pour le référentiel actuel ou~/.gitconfig
s'il est utilisé avec--global
).annuler le changement de mode dans l'arborescence de travail:
Ou en mingw-git
la source
-d'\n'
partiexargs
car il s'agit d'un argument illégal (et non nécessaire).tr '\n' '\0'
puis utiliser l'-0
argument vers xargs pour utiliser NUL comme délimiteur.tr
chose a fonctionné! Voici la commande complète pour OSX:git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 chmod -x
Si vous souhaitez définir cette option pour tous vos référentiels, utilisez l'
--global
option.Si cela ne fonctionne pas, vous utilisez probablement une version plus récente de git, essayez donc l'
--add
option.Si vous l'exécutez sans l'option --global et que votre répertoire de travail n'est pas un dépôt, vous obtiendrez
la source
--add
, comme dansgit config --add --global core.filemode false
Si
ne fonctionne pas pour vous, faites-le manuellement:
cd dans le dossier .git:
éditez le fichier de configuration:
changer vrai en faux
->
enregistrer, quitter, aller dans le dossier supérieur:
réinitialisez le git
vous avez terminé!
la source
.git/config
, un simplegit config core.fileMode false
à la racine de votre projet suffit. Si vous modifiez le fichier de configuration, vous feriez mieux de supprimer complètement la directive, de sorte que celle globale soit récupérée.global
option fait exactement la même chose que l'édition manuelle de .git / config~/.gitconfig
~/project/.git/config
git init
devons-nous remettre le mode de fichier à true?Ajout à la réponse de Greg Hewgill (à l'aide de la
core.fileMode
variable de configuration):Vous pouvez utiliser l'
--chmod=(-|+)x
option de git update-index (version de bas niveau de "git add") pour modifier les autorisations d'exécution dans l'index, d'où il serait récupéré si vous utilisez "git commit" (et non "git commit -a ").la source
Vous pouvez le configurer globalement:
git config --global core.filemode false
Si ce qui précède ne fonctionne pas pour vous, la raison 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
la source
git config -l
(lister la configuration actuelle - locale et globale)Si vous avez déjà utilisé la commande chmod, vérifiez la différence de fichier, il montre le mode de fichier précédent et le mode de fichier actuel tels que:
nouveau mode: 755
ancien mode: 644
définir l'ancien mode de tous les fichiers à l'aide de la commande ci-dessous
sudo chmod 644 .
définissez maintenant core.fileMode sur false dans le fichier de configuration à l'aide de la commande ou manuellement.
puis appliquez la commande chmod pour modifier les autorisations de tous les fichiers tels que
et définissez à nouveau core.fileMode sur true.
Pour les meilleures pratiques, ne laissez pas toujours core.fileMode false.
la source
For best practises don't Keep core.fileMode false always
que voulez-vous dire, vous devez expliquer cela.For best practises don't Keep core.fileMode false always.
Certains systèmes de fichiers (FAT par exemple) ne prennent pas en charge les autorisations de fichiers, donc le système d'exploitation signalera une valeur par défaut (766 sur mon système de toute façon). Dans ce cas,core.filemode
est absolument nécessaire dans la configuration locale, sauf si vous voulez gonfler l'historique des validations avec des modifications d'autorisation inutiles et non intentionnellescore.filemode=false
git ignorera les modifications des bits d'exécution, pas besoin de modifier les autorisations locales. À moins que vous n'ayez déjà ajouté des modifications de permission à l'index, auquel cas il vous manque l'étape à laquelle vous devez procédergit add
après avoir désactivécore.filemode
.En définissant l'alias suivant (dans ~ / .gitconfig), vous pouvez facilement désactiver temporairement la commande fileMode per git:
Lorsque cet alias est préfixé à la commande git, les changements de mode de fichier ne s'afficheront pas avec des commandes qui autrement les afficheraient. Par exemple:
la source
Si vous souhaitez définir le mode de fichier sur false dans les fichiers de configuration de manière récursive (y compris les sous-modules):
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
la source
git submodule foreach git config core.fileMode false
Solution simple:
Appuyez sur cette commande simple dans le dossier du projet ( elle ne supprimera pas vos modifications d'origine) ... elle supprimera uniquement les modifications qui ont été effectuées lorsque vous avez modifié l' autorisation du dossier de projet
la commande est ci-dessous:
git config core.fileMode false
Pourquoi tout ce fichier inutile est modifié: parce que vous avez modifié les autorisations du dossier de projet avec la commande sudo chmod -R 777 ./yourProjectFolder
quand vérifierez-vous les modifications que n'avez-vous pas faites? vous avez trouvé comme ci-dessous lors de l'utilisation de git diff filename
la source
Cela fonctionne pour moi:
ou inversé, selon votre système d'exploitation
la source