Как изменить режим git ignore file mode (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.
The
-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
, за исключением очень редких окружающая среда.
отменить изменение режима в рабочем дереве:
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 .
и снова установить ядро.fileMode в true.
git config core.fileMode true
для лучших практик не держите ядро.fileMode false всегда.
Если вы хотите установить filemode в false в файлах конфигурации рекурсивно (включая подмодули) :
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
определив следующий псевдоним (в~/.gitconfig) вы можете легко временно отключить fileMode для команды git:
nfm = "!f(){ git -c core.fileMode=false $@; };f"
когда этот псевдоним имеет префикс к команде git, изменения режима файла не будут отображаться с командами, которые в противном случае показывали бы их. Например:
git nfm status
простое решение:
хит этого просто отметить в папке проекта(он не будет удалять исходные изменения) ...это только удалить изменения что было!--1-->сделал в то время как вы изменили папку проекта разрешения
отмечаем ниже:
git config core.fileMode false
почему это все ненужные файлы изменено: потому что вы изменили разрешения папки проекта с похвалой sudo chmod-R 777 ./yourProjectFolder
когда вы будете проверять изменения, что вы не сделали? вы нашли, как показано ниже, при использовании git diff filename