【问题标题】:What does the argument "--add" mean in the "git config" command?“git config”命令中的参数“--add”是什么意思?
【发布时间】:2016-11-02 10:39:51
【问题描述】:

我偶然发现了一个 git 命令:

git config --global --add merge.ff false

大概是在合并分支时默认禁用快进。但是--add 选项引起了我的注意,所以我现在想知道它到底做了什么。有人吗?

【问题讨论】:

  • RTFM 链接here...
  • 谢谢,不过对于不太高级的用户来说有点不清楚

标签: git bash terminal git-bash


【解决方案1】:

作为documented in the manual page,--add 标志告诉git config 不要覆盖任何现有的merge.ff 设置,而是在任何现有设置之外添加一个新设置。

由于merge.ff 不是多值可配置的,这通常是错误的做法。 (事实上​​,由于 Git 扫描配置文件的方式,一个新添加的设置会覆盖之前的任何设置,并且--add 会在末尾添加,所以它仍然有效。)对于像merge.ff 这样的单值配置项,确实有应该只是任何给定配置文件中的一个条目。

(可以把它想象成,例如,告诉 Git 不要做某事,然后告诉它做某事,然后告诉它不要做那件事。Git 只是服从 last 命令它听到了,在这种情况下。)

多值配置项的一个示例是每个遥控器的fetch 行。例如,remote.origin.fetch 通常只是+refs/heads/*:refs/remotes/origin/*,但您可以添加 +refs/notes/*:refs/notes/* 或+refs/notes/*:refs/notes/origin/* 以从origin 复制注释。 (您肯定不想删除第一个设置,而只是添加第二个设置。)

(这不是 bash 特定的东西,而是 Git 特定的东西。Bash 只是运行带有指定参数的命令,并将这些参数的解释留给命令。)

【讨论】:

  • 抱歉,还是一头雾水……--add 标志是否意味着,所有这些配置设置都将下降到所有 git 配置范围(全局、存储库、分支)?
  • 没有。尝试git config --global --add foo.bar first,然后检查您的全局.gitconfig(例如git config --global --edit)。然后git config --global --add foo.bar second,并再次检查您的全局.gitconfig。每个--add 都会将另一行放入文件中。如果没有--add,该命令将替换现有设置,如果该文件中有多个设置,则该命令会失败。
  • 顺便说一句,如果您在--global 设置中将merge.ff 设置为false,然后在--local 设置中将其设置为true,则本地值将覆盖全局值。 Git 实际实现这一点的方式是它首先扫描您的全局配置,然后扫描您的本地配置。累积的项目,如 remote.origin.fetch,将从 两个 文件中获取值,但对于像 merge.ff 这样的项目,仅使用单个值,最后一个设置将覆盖。由于最后读取本地配置,因此那里的任何设置都会覆盖全局配置。
  • 最后,请注意,当您运行git config --global --edit 时,您可以对您的 git 配置进行任何您喜欢的更改。我不确定 Git 是否允许在 Windows 系统上使用 CR-LF 结尾(我避免使用 Windows 以避免所有的恶化);在类 Unix 机器上编辑配置文件可以正常工作,我更喜欢将此方法用于别名定义等复杂项目。
  • 谢谢,非常有帮助。知道了!干杯!
【解决方案2】:

来自git-config doc:

--add

在不更改任何现有值的情况下向选项添加新行。这与在 --replace-all 中提供 ^$ 作为 value_regex 相同。

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2013-10-28
    相关资源
    最近更新 更多