Распространение конфигурации git с помощью кода

Пытаясь стандартизировать платформу для разработчиков, одной из моих потребностей было бы .git/config так что все имеют одинаковую конфигурацию CRLF, не забывая устанавливать ее вручную.

Как мне это настроить?

Я немного обеспокоен всем этим негативом против autocrlf, Почему бы не удалить эту функцию, если она не работает? Либо создателей этой функции неправильно поняли, либо они провели неудачный эксперимент с ней, и ее следует удалить, чтобы больше людей не тратили впустую свое время (читая неясную справочную страницу, задавая вопросы, люди, отвечающие на эти вопросы и т. Д.).

4 ответа

Решение

Я всегда находил autocrlf свойство config проблематично. (как указано в моем ответе Git 1.6.4 beta для Windows (msysgit) - завершение строки Unix или DOS)

Примечание: msysgit выпуск 538 для установки его в значение true (которое является значением по умолчанию, установленным установщиком msysgit), но я не уверен.

Я бы предпочел одно из трех следующих решений:

  • настройка одного стиля конца строки
  • заставляя эту конфигурацию распространяться через различные репозитории Git

1. Использование нового параметра конфигурации core.eol (1.7.2+)

Устанавливает тип окончания строки для использования в рабочем каталоге для файлов с установленным свойством text.
Альтернативы lf ',' crlf ' а также ' native ', который использует окончание родной строки платформы.
Значение по умолчанию является родным.

2. проверка / проверка .gitattribute, Смотрите справочную страницу gitattributes: crlf или же core.autocrlf это способ записи в .gitattributes файл, который ранее был атрибутом локальной конфигурации.

3. драйвер фильтра атрибутов git, который может:

  • применять любые стандарты форматирования, которые вы можете установить
  • применять эти стандарты к определенным файлам / каталогам
  • записываться как файл конфигурации (.gitattributes) может быть вытолкнут в любом месте.

Если вы используете операционную систему семейства Unix, я бы порекомендовал просто создать символическую ссылку.

ln -s .git/config git-config
git add git-config
git commit -m "Now tracking git config file"

.git/config может быть переопределено локально ~/.gitconfig,

Таким образом, как часть сборки, Makefile или сценария обеспечения, вы можете предложить изменения для пользователей в их ~/.gitconfigили загрузите локальный скрипт .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 config в 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 (not recommended).
#*         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

Может быть, лучший способ использовать hardlink:

В *nix или OS X системе:

ln .git/config git-config
git add git-config
git commit -m "Now tracking git config file"

В Windows на NTFS-файловой системе:

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-файловой системе:

git clone FROM_PROJ_URL
del .git\config
mklink /H .git\config git-config
Другие вопросы по тегам