Как сделать git игнорировать изменения режима файла (chmod)?
у меня есть проект, в котором я должен изменить режим файлов с chmod
до 777 при разработке, но который не должен меняться в основном РЕПО.
Git берет на chmod -R 777 .
и помечает все файлы как измененные. Есть ли способ сделать в Git игнорировать изменения режима, которые были внесены в файлы?
11 ответов
попробуй:
git config core.fileMode false
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
это работает для меня:
find . -type f -exec chmod a-x {} \;
или наоборот, в зависимости от вашей операционной системы
find . -type f -exec chmod a+x {} \;