Распространение конфигурации git с помощью кода - PullRequest
43 голосов
/ 25 февраля 2010

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

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

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

Ответы [ 4 ]

73 голосов
/ 01 марта 2010

Я всегда считал свойство конфигурации autocrlf проблемным. (как указано в моем ответе 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), который можно отправить куда угодно.
5 голосов
/ 25 февраля 2010

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

ln -s .git/config git-config
git add git-config
git commit -m "Now tracking git config file"
2 голосов
/ 08 марта 2016

.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 в 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
0 голосов
/ 19 января 2015

Может быть лучше использовать жесткую ссылку :

В * 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...