【问题标题】:How do I override Git configuration options by command line parameters?如何通过命令行参数覆盖 Git 配置选项?
【发布时间】:2013-03-30 20:02:06
【问题描述】:

在使用命令行参数直接调用 Git 命令时,我想覆盖某些 Git 配置选项(在我的情况下为 http.proxy)。这可能吗?

【问题讨论】:

    标签: git config


    【解决方案1】:

    是的,你可以用-c传递它,比如:

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

    【讨论】:

    • 引用kernel.org/pub/software/scm/git/docs -c <name>=<value> 将配置参数传递给命令。 给定的值将覆盖配置文件中的值。 <name> 应与 git config 列出的格式相同(子键以点分隔)。
    • 太好了,谢谢!看起来我没有像我应该做的那样彻底地用谷歌搜索。
    • 如果我偶尔想在 git 中使用不同的编辑器,我发现这很有用;例如git -c core.editor=gedit commit
    • 我不认为有一个环境变量会做同样的事情,因为当脚本调用 git 时添加-c 参数是不切实际的?
    【解决方案2】:

    请注意,有一项关于覆盖(使用命令git -c)配置的新功能:

    您无法将配置设置为空字符串(git -c http.proxy= 或任何其他 foo.bar=),直到 git 2.1.2(2014 年 9 月 30 日)和 commit a789ca7 Junio C Hamano (gitster)

    config: 教“git -c”识别空字符串

    在配置文件中,您可以:

    [foo]
    bar
    

    打开“foo.bar”布尔标志,你可以这样做:

    [foo]
    bar=
    

    将“foo.bar”设置为空字符串。
    但是,git 的“-c”参数同时处理这两种情况:

    git -c foo.bar
    

    git -c foo.bar=
    

    作为布尔标志,没有办法将变量设置为空字符串。
    此补丁使后一种形式能够做到这一点。

    【讨论】:

    【解决方案3】:

    如 Git 2.23(2019 年第三季度)中所述,但在此之前已经可用,您可以覆盖 Git 配置选项的另一个地方是... git aliases

    参见Denton Liu (Denton-L)commit 459842ecommit 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

    【讨论】:

      【解决方案4】:

      是的,这是可能的。 一开始git是如何存储他的配置的? 我在本地有工作回购

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

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

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

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

      • 在我的情况下打开谷歌,yandex
      • “git 配置规范”
      • Official git documentation
      • git config name [value [value-pattern]](这意味着您需要传递属性名称和空格分隔的值

      现在,当我需要通过给定的配置文件内容更改远程 repos url 时,我需要了解如何编写参数名称。

      [remote "origin"]
         url=...
      

      类远程、实例来源、类成员 url 与值。

      所以答案是

      git config remote.origin.url <value>
      

      【讨论】:

        猜你喜欢
        • 2020-01-20
        • 2015-02-21
        • 2021-06-26
        • 1970-01-01
        • 2011-04-02
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多