Как установить зависимый от версии флаг Git global config
Для синхронизации всех моих конфигурационных файлов у меня есть Github-репозиторий со всеми моими настройками. Хотя в большинстве случаев это работает довольно хорошо, некоторые приложения имеют разные версии на разных машинах.
Итак, теперь мне интересно... Есть ли способ установить глобальные настройки конфигурации Git, как этот (который вызывает предупреждение на моем ноутбуке), не вызывая ошибок на разных машинах с более старыми версиями Git?
Одним из вариантов может быть упаковка git push
Команда для добавления флагов, когда поддерживается, но это похоже на взлом.
3 ответа
Отдельные конфиги для отдельных машин
Создайте разные конфигурационные файлы для разных машин и на каждой машине символическую ссылку, одну из них в качестве реальной конфигурации. Сама ссылка не будет отслеживаться, добавьте ее в .gitignore
,
Симлинкинг может быть сделан в post-checkout
крюк Вам необходимо идентифицировать текущий хост (например, uname -n
) и иметь файл, который содержит соответствующие настройки для ловушки.
Недостатком этого решения является то, что это не динамично. После того, как новая версия Git установлена на хосте, вы должны проверить, что соответствующий конфиг работает с ним.
Что невозможно
Если вы хотите что-то, что проверяет, поддерживается ли значение для опции, и используете другое значение в качестве запасного, вам придется анализировать manpages и полагаться на их содержимое. Git ничего подобного не реализовал. Вы не можете проверить, поддерживается ли значение, вы не можете написать файл конфигурации, который динамически выбирает само значение.
Динамически генерируемый конфиг
Тем не менее, можно генерировать конфигурацию динамически. Аналогично тому, как вы заменяете обычный файл символической ссылкой для выбора между несколькими статическими файлами, вы можете заменить его именованным каналом, подключенным к демону, который генерирует конфигурацию.
В демоне вы можете проверить git --version
и на основании этого выберите значения параметров конфигурации. Хотя это умное решение, полностью использующее возможности файловой системы Unix, оно довольно хакерское. Вы должны поддерживать работу демона, и если он остановится, Git не сможет прочитать конфигурацию и зависнет.
Скрытый каталог со специально созданным git фарфоровым скриптом, который вы проверяете в каждом репо, над которым работаете. (Или отдельную утилиту репо, которую вы могли бы затем проверить с помощью манифеста и утилиты командной строки репо.) Ваш скрипт будет вызывать push с любыми необходимыми вам флагами в зависимости от версии git, независимо от того, на какой машине вы находитесь.
Не всеобъемлющее решение, но я использую одну хитрость, чтобы добавить опции 1.7.12+ (например, push.default=simple
) в ~/.config/git/config
, которые старые читы не читают.
Я установил все применимо ко всем версиям git в ~/.gitconfig
,