Расширение переменной оболочки в конфигурации git

У меня есть переменная оболочки, которая указывает на каталог, где расположены все мои файлы конфигурации. Предположим, что переменная создана с помощью export RC=$HOME/rc. У меня есть глобальный файл игнорирования в каталоге конфигурации: ~/rc/globalgitignore.

Мой вопрос: как я могу расширить переменную RC в моем файле .gitconfig?

Я уже пробовал следующее:

  • excludesfile = $RC/globalgitignore

  • excludesfile = !$RC/globalgitignore

  • excludesfile = !echo $RC/globalgitignore

  • excludesfile = !$(echo $RC/globalgitignore)

Ни одно из этих решений не работает.

Единственный способ, которым это работает, если я вхожу в полный путь: excludesfile = ~/rc/globalgitignore, но тогда я должен изменить путь, если переместить мой каталог RC в другое место.

Ответ 1

Вы не можете. git -config (1) не поддерживает расширение переменной среды, но только ограниченное преобразование типов и расширение пути:

Спецификатор типа может быть либо -int или --bool, чтобы make git config гарантировал, что переменная данного типа и преобразует значение в каноническую форму (простое десятичное число для int, "истинная" или "ложная" строка для bool), или -path, которая делает некоторое расширение пути (см. ниже -path). Если спецификатор типа не передан, не выполняется никаких проверок или преобразований.

В документации для --path указано:

- путь

git -config будет расширять начало ~ значением $HOME и ~ пользователем в домашнем каталоге для указанного пользователя. Эта опция не действует при установке значения (но вы можете использовать git config bla ~/из командной строки, чтобы ваша оболочка делала расширение).

Термин "расширение" не отображается ни в каком другом контексте в git-config(1). Итак, как вы даже поняли, что это нужно, учитывая, что ни одна такая функция не документирована нигде?

Чтобы расширять переменные среды, вам необходимо предварительно обработать файл конфигурации git самостоятельно, то есть путем создания файла шаблона и развернуть переменные с помощью script перед копированием файла в каталог $HOME.

Если это касается управления dotfile, тогда сделайте, что делают все люди: поместите их в каталог и добавьте символические ссылки в этот каталог из вашего $HOME.

Ответ 2

Я использую сценарии bash в моей конфигурации, чтобы включить расширение переменной. Просто экспортируйте переменную, которая вам нужна в вашем .bashrc, и используйте ее в скриптах:

В моем ~/.bashrc:

export TESTVARIABLE="hello"

В моем ~/.gitconfig:

[alias]
    test = !bash -c '"echo \"Value: $TESTVARIABLE\";"'

В моей приглашении bash:

bash> git test
    Value: hello 

Другой способ сделать это - добавить команду git config в свой shell rc. Я, например, имею в своем .bashrc:

git config --global user.name "[email protected]$HOSTNAME"

У меня такая же конфигурация на всех моих машинах, и, добавляя это, я могу различать коммиты с разных машин. Вы можете сделать то же самое и добавить в свою оболочку rc:

export RC="$HOME/rc"
git config --global core.excludesfile "$RC/globalgitignore"