Как изменить режим git ignore file mode (chmod)?


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

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

11 1928

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.

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

enter image description here

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

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

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

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