экспорт всей конфигурации git для использования с GIT_CONFIG - PullRequest
1 голос
/ 19 марта 2019

есть ли способ вывести конфигурацию git вся , которая в данный момент находится в действии (локальная, глобальная, системная), в файл, который затем можно использовать как файл GIT_CONFIG?

Что-то вроде:

$ git config --list > mygit.cfg
$ GIT_CONFIG=mygit.cfg git clone /path/to/repo.git

К сожалению, вышеприведенное на самом деле ничего не делает (конфигурация читается не из файла mygit.cfg, а из стандартных расположений).

Также что-то делаетнапример:

$ git config --file mygit.cfg --unset foo.bar

завершается с ошибкой:

фатально: неверная строка конфигурации 1 в файле mygit.cfg

AFAICT, причина в том, что все файлы конфигурации git должны быть INI стиля.Тем не менее, git config --list выводит простой список key=value строк, который git не может использовать как файл GIT_CONFIG.

Мой пример использования следующий:

  • У меня естьнекоторые проблемы с git (связанные с клонированием стороннего репозитория) на хосте с автоматической сборкой (CI), вызванные настройкой конфигурации git
    • , так как изменения в автостроителе не являются постоянными.поэтому я должен иметь возможность изменять систему в сценарии
  • Мне действительно все равно (и я не хочу беспокоиться), на каком уровне существует эта конфигурация (локальная, глобальная,система, ...) так как конфигурация создается с помощью autobuilder
  • , решение проблемы git включает unsetting одно из значений конфигурации
    • к сожалению, похоже, что -c флаг git позволяет только устанавливать значения, но не сбрасывать их
  • моя идея состоит в том, чтобы просто создать накопленную конфигурацию git, удалить вызывающий ошибку ключиз этой конфигурации и используйте измененный конфиг, чтобы выполнить несколько операций, которые мне нужно сделать.после этого я хочу вернуться к исходной конфигурации

Один наивный подход - просто объединить файлы для различных уровней конфигурации:

cat /etc/gitconfig ~/.gitconfig .git/config > mygit.cfg

К сожалению, этого не произойдет, поскольку я не знаю расположения файлов конфигурации (уууу: многоплатформенные сборщики!).(Также: фактическое расположение файлов конфигурации - это деталь реализации git; я не хочу полагаться на такие детали реализации)

Итак: могу ли я вывести свою конфигурацию git таким образом, чтобы я мог использоватьэто с мерзавцем?

1 Ответ

1 голос
/ 20 марта 2019

Проблема в том, что git config --list выводит результат в формате, не подходящем для использования в GIT_CONFIG.Выходные данные должны быть проанализированы, и новый файл конфигурации должен быть воссоздан.Этот скрипт может помочь вам начать:

git config --list |
while read line; do
    git config -f cfg \
        "`echo $line | sed 's/=.\+//'`" \
        "`echo $line | sed 's/^.\+=//'`"
done

Два seds разделить key=some value на два отдельных параметра;они заключаются в кавычки, если они содержат пробелы.

Сценарий создает новый (или обновляет существующий) файл конфигурации cfg.

Альтернативная реализация - выводить только ключи и получать значения отдельно:

git config --list --name-only |
while read key; do
    git config -f cfg "$key" "`git config $key`"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...