Распространение конфигурации git с помощью кода
Пытаясь стандартизировать платформу для разработчиков, одной из моих потребностей было бы .git/config
так что все имеют одинаковую конфигурацию CRLF, не забывая устанавливать ее вручную.
Как мне это настроить?
Я немного обеспокоен всем этим негативом против autocrlf
, Почему бы не удалить эту функцию, если она не работает? Либо создателей этой функции неправильно поняли, либо они провели неудачный эксперимент с ней, и ее следует удалить, чтобы больше людей не тратили впустую свое время (читая неясную справочную страницу, задавая вопросы, люди, отвечающие на эти вопросы и т. Д.).
4 ответа
Я всегда находил autocrlf
свойство config проблематично.
(как указано в моем ответе Git 1.6.4 beta для Windows (msysgit) - завершение строки Unix или DOS)
- это не только сделать несколько слияний сложно
- он может варьироваться в зависимости от оболочки, используемой в одной среде
- у него также есть проблема со статусом git
- и с SVN импорта.
Примечание: 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