Как предотвратить git в Cygwin для установки core.filemode = true
Я использую git из установки Cygwin на моем ПК с ОС Windows. Хотя cygwin поддерживает биты разрешения Unix в файловой системе NTFS, родные программы Windows, подобные моему Eclipse, не знают о них, так что все файлы, созданные программами Windows, имеют установленный бит бит (755
).
Мне редко приходится проверять файл с исполняемым битом, установленным в репозиторий git. Поэтому я хотел бы иметь core.filemode=false
по умолчанию. Я установил это значение в своей глобальной конфигурации, но, к сожалению, это обычно не имеет никакого эффекта: как документировано, git clone
проверяет файловую систему, чтобы увидеть, поддерживает ли она разрешения и устанавливает core.filemode
соответственно на каждый репозиторий, и поэтому у меня есть конфигурация core.filemode=true
в каждой конфигурации репозитория, переопределяя мой желаемый по умолчанию.
Есть ли способ предотвратить git clone
от установки core.filemode
автоматически?
Ответы
Ответ 1
Вы можете настроить Bash так, чтобы каждый раз, когда вы cd
, он проверяет, является ли этот каталог репозиторием и правильно настроил его. В ~/.bash_profile
добавить
PROMPT_COMMAND=pc
pc () {
[ -d .git -a ! -g .git/config ] || return
git config core.filemode 0
chmod +s .git/config
}
Ответ 2
Обычный способ - инициализировать или клонировать ваше репо с помощью каталога шаблонов git.
git clone --template=<template directory>
В этом каталоге вы можете указать конфигурационный файл, который будет использоваться в качестве локальной конфигурации репо для git для нового init'd или клонированного репо.
OP oberlies отчеты, хотя это не будет работать для core.filemode
и core.ignorecase
, для git config
справочная страница:
git-clone
или git-init
будет проверять и устанавливать core.filemode
false, если это необходимо, когда создается репозиторий.
Ответ 3
Параметр core.fileMode = true
может быть очищен автоматически при помощи git hook. В этом случае я считаю, что наилучшим вариантом является хук после проверки, который будет запускаться каждый раз, когда ветка извлекается или клонируется репо. Создайте скрипт bash с именем post-checkout
(без расширения файла) со следующим содержимым:
#!/usr/bin/env bash
core_file_mode=$( git config --local core.fileMode )
if [[ "${OSTYPE}" == 'cygwin' && "${core_file_mode}" == 'true' ]]; then
git config --local --unset core.fileMode
fi
Если вы хотите, чтобы хук применялся к отдельному репо, поместите скрипт в $GIT_DIR/hooks
(по умолчанию $GIT_DIR
равен <path-to-your-repo>/.git
). Если хотите, чтобы хук применялся ко всем проектам, добавьте следующую запись в ваш глобальный файл gitconfig:
[core]
hooksPath = '<path-to-folder-containing-your-hook(s)>'