Как сделать git игнорировать изменения режима файла (chmod)?

у меня есть проект, в котором я должен изменить режим файлов с chmod до 777 при разработке, но который не должен меняться в основном РЕПО.

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

11 ответов


попробуй:

git config core.fileMode false

С 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.

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

git -c core.fileMode=false diff

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

git config --global core.fileMode false

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

core.fileMode Не самая лучшая практика и должна быть использована осторожно. Этот параметр охватывает только исполняемый бит mode и никогда биты чтения/записи. Во многих случаях вы думаете, что вам нужна эта настройка, потому что вы сделали что-то вроде 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, за исключением очень редких окружающая среда.


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

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

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

git config --global core.filemode false

если это не работает, вы, вероятно, используете более новую версию git, так что попробуйте .

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

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

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

если

git config --global core.filemode false

не работает для вас, делаем это вручную:

cd into yourLovelyProject folder

cd в .папка git:

cd .git

редактировать конфигурационный файл:

nano config

изменить true на false

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

сохранить, выйти, перейти в верхнюю папку:

cd ..

reinit git

git init

вы молодец!


добавлять к Грег Hewgill ответ (через core.fileMode переменной config):

можно использовать на git update-index (низкоуровневая версия "git add") для изменения разрешений на выполнение в индексе, откуда он будет подобран, если вы используете "git commit" (а не "git commit-a").


вы можете настроить его глобально:

git config --global core.filemode false

Если выше не работает для вас, причиной может быть ваша локальная конфигурация переопределяет глобальную конфигурацию.

удалите локальную конфигурацию, чтобы глобальная конфигурация вступила в силу:

git config --unset core.filemode

кроме того, вы можете изменить локальную конфигурацию на правильное значение:

git config core.filemode false


если вы используете chmod команда уже тогда проверяет разницу файла, она показывает предыдущий режим файла и текущий режим файла, такой как:

новый режим : 755

старый режим : 644

установить старый режим всех файлов, используя следующую команду

sudo chmod 644 .

сейчас поставил ядро.fileMode в false в файле конфигурации либо с помощью команды, либо вручную.

git config core.fileMode false

затем примените команду chmod для изменения разрешения всех файлов, таких как

sudo chmod 755 .

и снова установите core.fileMode в true.

git config core.fileMode true

для лучших практик не держите ядро.fileMode false всегда.


Если вы хотите установить filemode в false в файлах конфигурации рекурсивно (включая подмодули) : find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'


по definining следующие псевдонимы (в ~/.gitconfig) вы можете легко временно отключить fileMode для команды git:

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

когда этот псевдоним имеет префикс к команде git, изменения режима файла не будут отображаться с командами, которые в противном случае показывали бы их. Например:

git nfm status

простое решение:

хит этого просто отметить в папке проекта(он не удалит ваши исходные изменения) ...это только удалить изменения что было!--1-->сделал в то время как вы изменили папку проекта разрешения

отмечаем ниже:

ядро конфигурации git.содержит filemode ложные

почему этот ненужный файл получить изменено: поскольку вы изменили разрешения папки проекта с признательность sudo chmod-R 777 ./ yourProjectFolder

когда вы будете проверять изменения, что не ты сделал? вы нашли, как показано ниже, при использовании git diff filename

enter image description here


это работает для меня:

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

или наоборот, в зависимости от вашей операционной системы

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