Распределение конфигурации git с кодом
При попытке стандартизации платформы для разработчиков одна из моих потребностей заключалась в том, чтобы зафиксировать .git/config
, чтобы у всех была одна и та же конфигурация CRLF, не забывая ее вручную.
Как мне настроить это?
Меня немного беспокоит вся эта негативность против autocrlf
. Почему бы не удалить эту функцию, если она не работает? Либо создатели этой функции неправильно поняты, либо они сделали неудачный эксперимент с ней, и ее следует удалить, чтобы остановить больше людей, тратящих свое время (читая неясную страницу руководства, задавая вопросы, люди отвечающие на эти вопросы и т.д.).
Ответы
Ответ 1
Я всегда нашел свойство конфигурации autocrlf
проблематичным.
(как выражено в моем ответе Git 1.6.4 beta в Windows (msysgit) - завершение линии Unix или DOS)
Примечание: msysgit issue 538 для установки его в true (который является значением по умолчанию, установленным установщиком MSysgit), но я не убедило.
Я предпочел бы одно из трех следующих решений для:
- настройка одного стиля конца строки
- передача этой конфигурации через различные репозитории Git
1. Используя новый конфигурационный параметр core.eol
(1.7.2 +)
Устанавливает тип окончания строки для использования в рабочем каталоге для файлов, у которых есть свойство текста.
Альтернативами являются "lf
", "crlf
" и "native
", где используется окончательная строка на основе платформы.
Значение по умолчанию - native.
2. a checkout/check .gitattribute
.
См. gitattributes man-страница:
crlf
или core.autocrlf
- это способ записи в файле .gitattributes
того, что ранее было локальным атрибутом конфигурации.
3. a Git драйвер фильтра атрибутов, который может:
- применяйте любой стандарт форматирования, который вы можете установить
- применять эти стандарты к определенным файлам/каталогам
- записывается как файл конфигурации (
.gitattributes
), который можно нажать куда угодно.
Ответ 2
Если вы используете операционную систему семейства Unix, я бы рекомендовал просто создать символическую ссылку.
ln -s .git/config git-config
git add git-config
git commit -m "Now tracking git config file"
Ответ 3
Может быть лучшим способом использовать hardlink:
В системе * nix или OS X:
ln .git/config git-config
git add git-config
git commit -m "Now tracking git config file"
В Windows на NTFS файловой системе System:
mklink /H git-config .git\config
git add git-config
git commit -m "Now tracking git config file"
Но мы должны помнить, что при клонировании проекта применяются настройки для выполнения обратной процедуры:
В системе * nix или OS X:
git clone FROM_PROJ_URL
rm .git/config
ln git-config .git\config
В Windows на NTFS файловой системе System:
git clone FROM_PROJ_URL
del .git\config
mklink /H .git\config git-config
Ответ 4
.git/config
может быть локально заменен на ~/.gitconfig
.
Итак, как часть сборки, Makefile или обеспечения script, вы можете предложить изменение для пользователей в их ~/.gitconfig
или загрузить локальный script .gitconfig
через git config
.
Например, создайте новый .gitconfig
с некоторыми настройками и загрузите его:
git config --local include.path "/path/to/.gitconfig"
или попросите пользователей иметь в своих ~/.gitconfig
следующие строки:
[include]
path = .gitconfig
Если вы используете Vagrant как часть вашего дистрибутива кода, вы можете загрузить git config из Vagrantfile
с помощью:
system('GIT_TRACE=1 git config --local include.path "$(git rev-parse --show-toplevel)/git/gitconfig"');
затем скопируйте конфигурацию git в git/gitconfig
, поэтому каждый раз, когда пользователи запускают подготовку своей виртуальной машины, этот файл будет загружаться автоматически для своего git на хост-компьютере (например, для принудительного использования core.filemode
для отключения, поэтому Windows не будет иметь проблем с правами на файл).
Чтобы заставить конечные строки для пользователей использовать, вместо этого следует использовать .gitattributes
, который должен работать из коробки. Пример синтаксиса для использования Unix-подобных строк (LF
):
# Drupal git normalization
# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
# @see https://www.drupal.org/node/1542048
# Define text file attributes.
# - Treat them as text.
# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
# - Detect whitespace errors.
# - Exposed by default in `git diff --color` on the CLI.
# - Validate with `git diff --check`.
# - Deny applying with `git apply --whitespace=error-all`.
# - Fix automatically with `git apply --whitespace=fix`.
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
# Auto-detect text files, ensure they use LF.
* text=auto eol=lf
# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.gz -text diff