Вопрос: Как мне изменить Git игнорировать режим файла (chmod)?


У меня есть проект, в котором я должен изменить режим файлов с помощью chmodдо 777 при разработке, но которые не должны меняться в основном репо.

Гит берет chmod -R 777 .и маркирует все файлы как измененные. Есть ли способ сделать изменения режима Git игнорировать, которые были внесены в файлы?


1866


источник


Ответы:


Пытаться:

git config core.fileMode false

Из ГИТ-конфигурация (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.

-cфлаг может использоваться для установки этой опции для однократных команд:

git -c core.fileMode=false diff

И --globalфлаг сделает это по умолчанию для зарегистрированного пользователя.

git config --global core.fileMode false

Предупреждение

core.fileModeне является лучшей практикой и ее следует использовать осторожно. Этот параметр охватывает только исполняемый бит режима и никогда не записывает биты чтения / записи. Во многих случаях вы считаете, что вам нужна эта настройка, потому что вы сделали что-то вроде chmod -R 777, делая все ваши файлы исполняемыми. Но в большинстве проектов большинство файлов не нужны и не должны исполняться по соображениям безопасности ,

Правильный способ решить такую ​​ситуацию - обращаться с правами на папку и файл отдельно, с чем-то вроде:

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

Если вы это сделаете, вам никогда не понадобится использовать core.fileMode, за исключением очень редкой среды.


3065



изменение режима отмены в рабочем дереве:

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

Или в 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



Если вы хотите установить этот параметр для всех своих репозиториев, используйте --globalвариант.

git config --global core.filemode false

Если это не работает, вы, вероятно, используете более новую версию git, поэтому попробуйте --addвариант.

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

Если вы запустите его без опции -global, и ваш рабочий каталог не является репо, вы получите

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

115



If

git config --global core.filemode false

does not work for you, do it manually:

cd into yourLovelyProject folder

cd into .git folder:

cd .git

edit the config file:

nano config

change true to false

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

save, exit, go to upper folder:

cd ..

reinit the git

git init

you are done!


64



Adding to Greg Hewgill answer (of using core.fileMode config variable):

You can use --chmod=(-|+)x option of git update-index (low-level version of "git add") to change execute permissions in the index, from where it would be picked up if you use "git commit" (and not "git commit -a").


48



You can configure it globally:

git config --global core.filemode false

If the above doesn't work for you, the reason might be your local configuration overrides the global configuration.

Remove your local configuration to make the global configuration take effect:

git config --unset core.filemode

Alternatively, you could change your local configuration to the right value:

git config core.filemode false


32



If you have used chmod command already then check the difference of file, It shows previous file mode and current file mode such as:

new mode : 755

old mode : 644

set old mode of all files using below command

sudo chmod 644 .

now set core.fileMode to false in config file either using command or manually.

git config core.fileMode false

then apply chmod command to change the permissions of all files such as

sudo chmod 755 .

and again set core.fileMode to true.

git config core.fileMode true

For best practises don't Keep core.fileMode false always.


15



If you want to set filemode to false in config files recursively (including submodules) : find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'


14



By definining the following alias (in ~/.gitconfig) you can easily temporarily disable the fileMode per git command:

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

When this alias is prefixed to the git command, the file mode changes won't show up with commands that would otherwise show them. For example:

git nfm status

14



Simple solution:

Hit this Simple commend in project Folder(it won`t remove your original changes) ...it will only remove changes what had been done while you changed project folder permission

commend is below:

git config core.fileMode false

Why this all unnecessary file get modified: because you have changed the project folder permissions with commend sudo chmod -R 777 ./yourProjectFolder

when will you check changes what not you did? you found like below while using git diff filename

enter image description here


1