У меня есть проект, в котором я должен изменить режим файлов chmod
на 777 при разработке, но который не должен меняться в основном репо.
Git забирает chmod -R 777 .
и помечает все файлы как измененные. Есть ли способ заставить Git игнорировать изменения режима, которые были внесены в файлы?
git diff
, и кто поэтому не хочет изменять свои файлы конфигурации Git: вы можете использоватьgit diff -G.
в Zed в ответ здесь .Ответы:
Пытаться:
Из git-config (1) :
-c
Флаг может быть использован для установки этой опции для разовых команд:И
--global
флаг сделает это поведение по умолчанию для вошедшего в систему пользователя.Изменения глобального параметра не будут применены к существующим репозиториям. Кроме того,
git clone
и вgit init
явном виде установитьcore.fileMode
дляtrue
в конфигурации репо , как описано в Git глобальной core.fileMode ЛОЖЬ переопределяется локально на клонеПредупреждение
core.fileMode
это не лучшая практика и должна использоваться осторожно. Этот параметр охватывает только исполняемый бит режима и никогда не считывает / записывает биты. Во многих случаях вы думаете, что вам нужен этот параметр, потому что вы сделали что-то вродеchmod -R 777
, сделав все ваши файлы исполняемыми. Но в большинстве проектов большинство файлов не нужно и не должно быть исполняемым по соображениям безопасности .Правильный способ решения такой ситуации - отдельно обрабатывать права доступа к папкам и файлам, например:
Если вы сделаете это, вам никогда не придется использовать
core.fileMode
, кроме как в очень редких условиях.источник
git config --global core.filemode false
сделаете, вам нужно будет сделать это только один раз для всех репозиториев.git config
команда записывает настройки в правильный файл конфигурации (.git/config
только для текущего репозитория или~/.gitconfig
при использовании с--global
).изменение режима отмены в рабочем дереве:
Или в Mingw-Git
источник
-d'\n'
часть,xargs
поскольку это недопустимый аргумент (и не нужен).tr '\n' '\0'
и затем использовать-0
arg для xargs, чтобы использовать NUL в качестве разделителя.tr
вещь сработала! Вот полная команда для OSX:git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 chmod -x
Если вы хотите установить эту опцию для всех своих репозиториев, используйте эту
--global
опцию.Если это не работает, вы, вероятно, используете более новую версию git, поэтому попробуйте эту
--add
опцию.Если вы запустите его без опции --global и ваш рабочий каталог не будет репозиторием, вы получите
источник
--add
, как вgit config --add --global core.filemode false
Если
у вас не работает, делайте это вручную:
Перейдите в папку .git:
отредактируйте файл конфигурации:
изменить истину на ложь
->
сохранить, выйти, перейти в верхнюю папку:
переосмыслить мерзавца
вы сделали!
источник
.git/config
достаточно простогоgit config core.fileMode false
корня вашего проекта. Если вы отредактируете файл конфигурации, вам лучше полностью удалить директиву, чтобы была выбрана глобальная.global
опции делает то же самое, что и ручное редактирование .git / config~/.gitconfig
, и~/project/.git/config
)git init
мы должны установить для filemode значение true?Добавление к ответу Грега Хьюгилла (об использовании
core.fileMode
переменной config):Вы можете использовать
--chmod=(-|+)x
опцию 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
источник
git config -l
(перечислите текущую конфигурацию - как локальную, так и глобальную)Если вы уже использовали команду chmod, проверьте разницу в файле. Она показывает предыдущий режим файла и текущий режим файла, например:
новый режим: 755
старый режим: 644
установить старый режим всех файлов, используя команду ниже
sudo chmod 644 .
Теперь установите для core.fileMode значение false в файле конфигурации, используя команду или вручную.
затем примените команду chmod, чтобы изменить права доступа ко всем файлам, таким как
и снова установите для core.fileMode значение true.
Для лучшей практики не оставляйте core.fileMode false всегда.
источник
For best practises don't Keep core.fileMode false always
что вы имеете в виду, вы должны это объяснить.For best practises don't Keep core.fileMode false always.
Некоторые файловые системы (например, FAT) не поддерживают права доступа к файлам, поэтому ОС сообщит значение по умолчанию (в любом случае 766 в моей системе). В этом случаеcore.filemode
это абсолютно необходимо в локальной конфигурации, если только вы не хотите раздувать историю коммитов с ненужными и непреднамеренными изменениями разрешенийcore.filemode=false
то git будет игнорировать изменения битов выполнения, не нужно менять локальные права доступа. Если вы уже не добавили изменения разрешений в индекс, в этом случае вы пропускаете шаг, который вам понадобитсяgit add
после выключенияcore.filemode
.Определив следующий псевдоним (в ~ / .gitconfig), вы можете легко временно отключить команду fileMode per git:
Когда этот псевдоним добавляется к команде git, изменения режима файла не будут отображаться с командами, которые в противном случае отображали бы их. Например:
источник
Если вы хотите установить для filemode значение false в файлах конфигурации рекурсивно (включая подмодули):
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
источник
git submodule foreach git config core.fileMode false
Простое решение:
Нажмите эту простую команду в папке проекта ( она не удалит ваши исходные изменения) ... она удалит только те изменения , которые были сделаны, пока вы изменили разрешение папки проекта
Команда ниже:
git config core.fileMode false
Почему все эти ненужные файлы модифицируются: потому что вы изменили права доступа к папке проекта с помощью commend sudo chmod -R 777 ./yourProjectFolder
когда вы будете проверять изменения, что вы не сделали? вы нашли как показано ниже при использовании git diff filename
источник
Это работает для меня:
или наоборот, в зависимости от вашей операционной системы
источник