Где мне разместить мой глобальный файл gitattributes?
Я понял, что есть (несмотря на отсутствие документации) способ установить атрибуты Git глобально; но мне не понятно, где разместить необходимое gitattributes
файл. В инструкциях говорится, что они принадлежат
$(prefix)/etc/gitattributes
Но где $(prefix)
? В частности, где бы это было для OS X (с Git в /usr/local/git/bin/git
)? Альтернативно (или в дополнение) будет ~/.gitattributes
работать?
3 ответа
Глобальные и общесистемные настройки
В терминологии вашего вопроса есть некоторая неопределенность. В контексте Git "глобальный" обычно означает "пользовательский уровень"; другими словами, глобальные настройки влияют на все репозитории для одного конкретного пользователя. Напротив, общесистемный параметр влияет на все репозитории для всех пользователей машины.
Gitattributes уровня репозитория
(Я упоминаю это только для полноты.)
Согласно соответствующему разделу книги Pro Git,
Если вы хотите воздействовать только на один репозиторий (т. Е. Назначать атрибуты файлам, относящимся к рабочему процессу одного пользователя для этого репозитория), то атрибуты следует поместить в
$GIT_DIR/info/attributes
файл.
$GIT_DIR
обычно расширяется до <path-to-repo-root-directory>/.git
,
Глобальные (на уровне пользователя) gitattributes
Согласно соответствующему разделу книги Pro Git,
Атрибуты, которые должны влиять на все репозитории для одного пользователя, должны быть помещены в файл, указанный
core.attributesfile
опция конфигурации [...]. Значение по умолчанию$XDG_CONFIG_HOME/git/attributes
, Если$XDG_CONFIG_HOME
либо не установлен, либо пуст,$HOME/.config/git/attributes
используется вместо
Вы также можете запустить следующую команду,
git config --global core.attributesfile <path>
указать Git на пользовательский путь <path>
для вашего глобального файла gitattributes, например ~/.gitattributes
,
Общесистемные gitattributes
Согласно соответствующему разделу книги Pro Git,
Атрибуты для всех пользователей в системе должны быть помещены в
$(prefix)/etc/gitattributes
файл.
что, естественно, вызывает вопрос:
[...] Но где это
$(prefix)
?
Смотрите, что такое $(префикс) в $(префикс)/etc/gitconfig? за ответ. Если вы не назначены prefix
пользовательское непустое значение, $(prefix)
по умолчанию расширяется до нуля; следовательно, ваша система в целом gitattributes
файл должен находиться в /etc/
,
Если вы дочитали до этого места и до сих пор не знаете, где
$prefix
есть (т.е. это не просто пустое или
/usr/local
) или почему ваш
/etc/gitattributes
не читается, вы можете использовать
strace
или аналогичные инструменты, чтобы увидеть все места, которые проверяет git. Strace выводит огромное количество отладочной информации на stderr, поэтому используйте
2>&1
и отфильтровать его, как я делаю ниже, с помощью
grep
. Команда git, которую я выбрал для примера, использует файл атрибутов из-за
--stat
который меняется в зависимости от
-diff
атрибут, но любая команда git, которую вы пытаетесь запустить в это время, должна быть в порядке.
Например, с обновленным git, установленным на RHEL с использованием SCL, вы можете получить следующее:
$ strace -f git log --stat -1 2>&1 | grep --color 'open.*attr'
open("/opt/rh/rh-git218/root/usr/etc/gitattributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/home/username/.config/git/attributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open(".gitattributes", O_RDONLY) = -1 ENOENT (No such file or directory)
open(".git/info/attributes", O_RDONLY) = -1 ENOENT (No such file or directory)
. . . и это показывает, что префикс $ здесь
/opt/rh/rh-git218/root/usr
.
Strace здесь не нужен, но если вы не знаете и вам все равно, будет ли разветвляться какая-то команда, добавьте
-f
во-первых, может исключить вероятность того, что вы не увидите то, что ищете.
Вы также можете ссылаться на глобальную.gitattribute
через новые переменные среды:
git var GIT_ATTR_GLOBAL
В Git 2.42 (3 квартал 2023 г.) добавьте больше "" (man ) для разработчиков инструментов, чтобы они могли изучить различные местоположения Git, настроенные либо через конфигурацию, либо через жестко закодированные значения по умолчанию.
См. коммит 4db16f5 (27 июня 2023 г.) Джеффа Кинга (
peff
) .
См. коммит ed773a1 , , коммит 15780bb, коммит cdd489e , коммит f74c90d , коммит 1e65721, коммит d6546af (27 июня 2023 г.) Брайана М. Карлсон (
bk2204
) .
(Объединено Джунио К. Хамано --
gitster
-- в коммите 89d62d5, 4 июля 2023 г.)
коммит 576a37f
var
: добавить расположение файлов атрибутовПодпись: Брайан М. Карлсон
В настоящее время существует несколько программ, которые хотели бы читать и анализировать
gitattributes
файлы на глобальном или системном уровне.
Однако не всегда очевидно, где находятся эти файлы, особенно для системного файла, который мог быть жестко запрограммирован во время компиляции или вычисляться динамически на основе префикса времени выполнения.Неразумно ожидать, что все пользователи Git будут интуитивно знать, где дистрибьютор или пользователь Git настроил эти местоположения, поэтому добавьте несколько записей, чтобы мы могли определить их местоположение.
ЧестьGIT_ATTR_NOSYSTEM
переменная среды, если она указана.
Предоставьте функции доступа таким образом, чтобы мы могли повторно использовать их из кода var.Чтобы сделать наши пути согласованными в Windows, а также использовать ту же форму, что и пути, используемые в «
git rev-parse
" (man ) , давайте нормализуем путь, прежде чем возвращать его.
В результате пути в стиле Windows используют косую черту, что удобно для обеспечения единообразной работы наших тестов на разных платформах.
Обратите внимание, что для этого требуется, чтобы некоторые из наших значений были освобождено, поэтому давайте добавим флаг, указывающий, нужно ли освобождать значение, и будем использовать его соответствующим образом.
git var
теперь включает в свою справочную страницу :
GIT_ATTR_SYSTEM
Путь к системному файлу linkgit:gitattributes[5], если он включен.
GIT_ATTR_GLOBAL
Путь к глобальному (для каждого пользователя) файлу linkgit:gitattributes[5].