【发布时间】:2013-03-30 20:02:06
【问题描述】:
在使用命令行参数直接调用 Git 命令时,我想覆盖某些 Git 配置选项(在我的情况下为 http.proxy)。这可能吗?
【问题讨论】:
在使用命令行参数直接调用 Git 命令时,我想覆盖某些 Git 配置选项(在我的情况下为 http.proxy)。这可能吗?
【问题讨论】:
是的,你可以用-c传递它,比如:
git -c http.proxy=someproxy clone https://github.com/user/repo.git
【讨论】:
-c <name>=<value> 将配置参数传递给命令。 给定的值将覆盖配置文件中的值。 <name> 应与 git config 列出的格式相同(子键以点分隔)。
git -c core.editor=gedit commit
-c 参数是不切实际的?
请注意,有一项关于覆盖(使用命令git -c)配置的新功能:
您无法将配置设置为空字符串(git -c http.proxy= 或任何其他 foo.bar=),直到 git 2.1.2(2014 年 9 月 30 日)和 commit a789ca7 Junio C Hamano (gitster)
git -c”识别空字符串在配置文件中,您可以:
[foo]
bar
打开“
foo.bar”布尔标志,你可以这样做:
[foo]
bar=
将“
foo.bar”设置为空字符串。
但是,git 的“-c”参数同时处理这两种情况:
git -c foo.bar
和
git -c foo.bar=
作为布尔标志,没有办法将变量设置为空字符串。
此补丁使后一种形式能够做到这一点。
【讨论】:
-c 是什么时候添加的?
如 Git 2.23(2019 年第三季度)中所述,但在此之前已经可用,您可以覆盖 Git 配置选项的另一个地方是... git aliases!
参见Denton Liu (Denton-L)commit 459842e、commit 01991ce(2019 年 6 月 5 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 71221f2,2019 年 7 月 9 日)
config/alias.txt: 接受非命令首字的文档别名可以看到,允许以非命令第一个单词开头的别名,例如
loud-rebase = -c commit.verbose=true rebase。
但是,这对用户来说并不是很明显,因为别名实例通常以命令开头。记录别名可以以非命令第一个单词开头的事实,以便用户能够发现这是一项功能。
The documentation 现在包括:
请注意,别名的第一个词不一定必须是 命令。 它可以是一个命令行选项,将被传递到 调用
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
这给了我:
diff(红色部分)不会出现在带有简单 git commit -a 的提交消息编辑器中。
别名不需要以!git开头来调用shell命令git。
它可以直接以git 命令选项开头,例如-c。
【讨论】:
是的,这是可能的。 一开始git是如何存储他的配置的? 我在本地有工作回购
cat ./projects/autoopt.ru/.git/config
所以 git 将设置存储在文件中。您可以直接编辑此文件,但 git 提供 CLI 来简化编辑配置参数。
那么什么是命令?可能是 git config set= 嗯...我需要参数名称 url?设置 url= 不起作用?
那么如何找出 git config 命令的格式呢?
现在,当我需要通过给定的配置文件内容更改远程 repos url 时,我需要了解如何编写参数名称。
[remote "origin"]
url=...
类远程、实例来源、类成员 url 与值。
所以答案是
git config remote.origin.url <value>
【讨论】: