如何通过命令行参数覆盖Git配置选项?

71
我想在直接使用命令行参数调用Git命令时覆盖某些Git配置选项(例如我的情况下的http.proxy)。这是否可行?
4个回答

96

是的,你可以使用-c来通过它,例如:

git -c http.proxy=someproxy clone https://github.com/user/repo.git

1
从 https://www.kernel.org/pub/software/scm/git/docs/ 引用:-c <name>=<value>将配置参数传递给命令。给定的值将覆盖配置文件中的值。 <name> 的格式应与 git config 中列出的格式相同(子键以点分隔)。 - yasouser
太好了,谢谢!看起来我没有像应该那样彻底地搜索谷歌。 - mstrap
如果我偶尔想要使用不同的编辑器与git一起使用,例如:git -c core.editor=gedit commit,我会发现这很有用。 - MattSturgeon
5
我不认为有一个环境变量可以做到同样的事情,特别是在脚本中调用git时不方便添加“-c”参数的情况下。 - Brian White
有没有一种方法可以同时提供多个“-c”选项? - Miles B Huff
1
@MilesBHuff 当然可以,只需多次添加 -c 参数,例如 git -c http.proxy=localhost:3128 -c http.useragent=test - bereal

11

请注意,有一个新功能可以通过命令 git -c 覆盖配置项:

在 git 2.1.2(2014年9月30日)之前,无法将配置设置为空字符串(git -c http.proxy= 或任何其他 foo.bar=),直到 git 2.1.2 以及 commit a789ca7 的发布,该问题得到了解决。发布者是 Junio C Hamano(gitster

config: teach "git -c" to recognize an empty string

在配置文件中,你可以这样写:

[foo]
bar
为了打开布尔型标记“foo.bar”,你可以执行以下操作:
[foo]
bar=

将“foo.bar”设置为空字符串。
然而,Git 的“-c”参数对两者都进行处理:

git -c foo.bar

git -c foo.bar=

作为布尔标志,无法将变量设置为空字符串。
此补丁使后者能够实现该功能。


“-c” 是在什么时候添加的? - Ondra Žižka
1
@OndraŽižka 在 Git 1.7.2 中,即2010年3月:https://github.com/git/git/commit/8b1fa778676ae94f7a6d4113fa90947b548154dd - VonC

4
作为 Git 2.23(2019 年第三季度)文档记录的一部分,但早在此之前,你可以覆盖 Git 配置选项的另一个地方是... Git 别名
请参见 提交 459842e提交 01991ce(2019 年 6 月 5 日),由 Denton Liu (Denton-L) 执行。
(由 Junio C Hamano -- gitster -- 合并于 提交 71221f2,2019 年 7 月 9 日)

config/alias.txt: 接受非命令首词的文档别名

可以看到,允许使用以非命令首词开头的别名,例如 loud-rebase = -c commit.verbose=true rebase
然而,这对用户来说并不是显而易见的,因为别名通常以命令开头。

记录别名可以以非命令首词开头的事实,以便用户发现这是一个功能。

文档现在包括:

请注意,别名的第一个单词不一定是命令。它可以是一个命令行选项,将传递到git调用中。特别是在与-c一起使用以传递一次性配置或-p以强制分页时非常有用。例如,可以定义loud-rebase = -c commit.verbose=true rebase,使运行git loud-rebase等同于git -c commit.verbose=true rebase。另外,ps = -p status是一个有用的别名,因为git ps会对git status的输出进行分页,而原始命令则不会。
例如,我定义了:
vonc@vonvb:~/gits/src/git$ git config alias.loud-commit "-c commit.verbose=true commit"
vonc@vonvb:~/gits/src/git$ git loud-commit -a

那给了我:

git loud commit

diff(红色部分)不会出现在使用简单的git commit -a命令的提交消息编辑器中。
别名无需以!git开头即可调用shell命令git。它可以直接以-cgit命令选项开头。

0

是的,这是可能的。 首先,Git是如何存储配置的? 我有一个本地工作仓库。

cat ./projects/autoopt.ru/.git/config

enter image description here

所以git将设置存储在文件中。您可以直接编辑此文件,但是git提供了CLI简化编辑配置参数的过程。

那么命令是什么?可能是git config set= 啊...我需要参数名url?set url=不起作用吗?

那么如何找出git config命令的格式?

  • 打开谷歌搜索或者百度(根据你的喜好)
  • "git config spec"
  • 官方git文档
  • git config name [value [value-pattern]] (这意味着您需要传递属性名称和空格分隔的值)

现在,我需要找出如何写入参数名,以便通过给定的配置文件内容更改远程存储库的URL。

[remote "origin"]
   url=...

类别远程,实例原始,类成员网址具有值。

所以答案是

git config remote.origin.url <value>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接