Как изменить режим git ignore file mode (chmod)?
у меня есть проект, в котором я должен изменить режим файлов с chmod до 777 при разработке, но который не должен меняться в основном РЕПО.
Git берет на себя chmod -R 777 . и помечает все файлы как измененные. Есть ли способ сделать в Git игнорировать изменения режима, которые были внесены в файлы?
11 ответов:
попробуй:
git config core.fileMode falsecore.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 foldercd В.папка 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
