Git config: перечислить только действующие значения - PullRequest
0 голосов
/ 29 сентября 2018

Некоторые значения git config настраиваются в системе, некоторые на уровне пользователя, а некоторые - в хранилище.При вызове

$ git config --list

я получаю список всех определений во всех файлах.Переопределенные значения будут повторяться.Как получить список действующих значений хранилища (мне все равно, где они настроены)?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Сложность заключается в следующем:

Переопределенные значения будут повторяться.

Это правда, что некоторые элементы, например, user.name и user.email, будутиметь более локальное значение переопределять более глобальное значение.Для других элементов, однако, все применяются настройки.Это верно, например, для значений remote.*.fetch.

Фактическая обработка любого элемента зависит от программы, которая проверяет настройку .Команда git config не знает, как команда git xyzzy - которая еще не написана (это то, что вы напишите в будущем) - использует все настройки xyzzy.*.Так что это просто показывает все из них.Используйте --show-origin, чтобы показать, какой конкретный файл конфигурации был источником какого-либо определенного параметра.

Если вас интересует одно конкретное значение, используйте git config --get:

git config --get core.editor

или:

git config --get-all remote.origin.fetch

Вариант --get показывает настройку last , т.е. наиболее локальную, в то время как вариант --get-all показывает все настройки.Какой из них использовать, конечно, зависит от того, как программа, которую вы будете запускать - может быть, та, которая уже написана или может быть той, которую вы пишете сейчас или напишете в следующем году, - на самом деле использует эту переменную.

Можно утверждать, что git config должен понимать все "хорошо известные" имена переменных (например, core.editor против remote.*.fetch) и по умолчанию отображать их соответствующим образом в --list.Однако авторы Git склонны рассматривать Git как набор инструментов, а не как решение, поэтому они не очень восприимчивы к этой аргументации.

Вы можете написать эту более разумную версиюgit config --list себя.Возможно, вы можете назвать это git xyzzy.:-) Ладно, может быть git smart-config-list.Ваша команда умного листинга запустит git config --show-origins --list, а затем применит правило фильтрации «все или последнее», основываясь на ее знаниях обо всех этих именах переменных.Когда вы пишете эту команду, подумайте о философии Git «инструменты против решений», и что git config не очень хорошо спроектирован, поскольку он действует как сантехника (инструмент внутреннего использования) и фарфор (конечныйпользовательская команда).

0 голосов
/ 29 сентября 2018

Создайте функцию bash:

function foo(){
    para=$@
    for key in `git config --list ${para}| awk -F= '{print $1}' | sort -u`;do
        echo $key=`git config ${para} --get $key`
    done
}

foo, чтобы получить список действующих значений репозитория.foo --global, foo --local, foo --system, foo -f somefile или foo --blob someblob также поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...