一些git config值是在系统上配置的,一些是在用户级别上的,一些是在存储库中配置的。调用时
$ git config --list
我正在获取所有文件中所有定义的列表。覆盖的值将重复出现。如何获取存储库的有效值的列表(我不在乎它们的配置位置)?
答案 0 :(得分:2)
棘手的部分是这个:
覆盖的值将重复出现。
的确,某些项目(例如user.name
和user.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.editor
与remote.*.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 --global
,foo --local
,foo --system
,foo -f somefile
或foo --blob someblob
。