Git配置:仅列出有效值

时间:2018-09-29 07:48:32

标签: git

一些git config值是在系统上配置的,一些是在用户级别上的,一些是在存储库中配置的。调用时

$ git config --list

我正在获取所有文件中所有定义的列表。覆盖的值将重复出现。如何获取存储库的有效值的列表(我不在乎它们的配置位置)?

2 个答案:

答案 0 :(得分:2)

棘手的部分是这个:

  

覆盖的值将重复出现。

的确,某些项目(例如user.nameuser.email)的局部值会高于全局值。但是,对于其他项目, all 设置适用。例如,对于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变体显示 all 设置。当然,使用哪个变量取决于您将如何运行该程序(实际上可能是已经编写的一个程序,或者可能是您正在编写中的程序或明年编写的程序)实际上会使用该变量。

有人可能会争辩说git config应该理解所有“众所周知的”变量名(例如core.editorremote.*.fetch),并默认在--list下适当地显示它们。不过,Git的作者倾向于将Git视为工具集而不是解决方案,因此他们不太愿意接受这一论点。

可以自己编写git config --list的智能版本。也许您可以将其称为git xyzzy。 :-)好吧,也许git smart-config-list。您更聪明的列表命令将运行git config --show-origins --list,然后根据其对所有那些变量名的了解应用“全部或最后”过滤规则。在编写此命令时,请考虑一下Git的“工具与解决方案”的理念,git config的设计不是很好,因为它既充当管道(内部使用的工具)又是瓷器(面向最终用户的命令)。

答案 1 :(得分:1)

设置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 --globalfoo --localfoo --systemfoo -f somefilefoo --blob someblob