每次设置首选项时,.gitconfig 部分都会重复

.gitconfig section duplicates everytime I set a preference

我的 .gitconfig 文件中有这个别名:

  setmeld = config --global diff.external git-meld
  nomeld = config --global --unset diff.external

这样我就可以设置和取消设置视觉差异工具融合。

当我发出:

git setmeld 

...以下内容已添加到我的 .gitconfig 文件中:

[diff]
    external = git-meld

当我发出:

git setmeld 

...external = git-meld 设置已从我的 .gitconfig 文件中删除,但 [diff] 部分 header 保留。

如果我稍后 运行 git setmeld 我的 .gitconfig 最终有两个 [diff] 部分 headers:

[差异] [差异] 外部 = git-meld

如果我取消设置然后再次设置外部 git-meld diff 工具,我会得到这样的结果:

[diff]
[diff]
[diff]
    external = git-meld

问题不是因为别名。如果我自己发出命令 git config --global diff.external git-meldconfig --global --unset diff.external.

也会发生同样的情况

- 我可以避免这种奇怪的行为吗?

OS: Ubuntu 12.04.5 LTS

git 版本: 1.7.9.5

git 不喜欢空白部分。
使用命令 git config diff.dummy "dummy line"

您可以编辑配置以删除多余的 [diff] 行,但请注意先将配置文件保存到 config.save。如果git发现配置文件损坏,它将拒绝进一步的命令。

那么set unset cycles就不会再增加重复section

您的 Git 非常旧(当前版本为 2.8+),您可能应该更新您的。该错误可能会在较新的版本中得到修复(我没有检查过)。

与此同时,这似乎是一个无害的错误:Git 将 header 部分保留在原位,即使整个部分都是空的,然后添加另一个部分 header 甚至尽管已经存在一个部分 header。但是,考虑到 Git 扫描文件的方式,您可以根据需要多次重复 header 部分(和设置)。对于非累积的设置,1最后的设置会覆盖之前的设置。

作为一个相当棘手的解决方法,您可以设置其他内容,使该部分永远不会完全为空。任何值都可以:任何 Git 从未使用过的东西都将闲置,保留 not-empty.

部分

实际上您可能还想设置另一个 diff 设置,不过:diff.renameLimit 为大多数 [=12] 设置 rename-detection queue 的默认大小=] 操作。在某些版本中,"default default" 是 500、1000 和 2000(它一直在随着时间的推移而增长)。从最近即将推出的 Git 开始,新的默认值为 0,这意味着 "unlimited"(实际上意味着 "use internal maximum")。我从很早的时候就把我的设为 0。


1累积设置的一个示例是 remote.origin.fetch 的值,假设您有一个 [remote "origin"] 部分。此部分中的每个 fetch = ... 值都是累积的,当 运行 git fetch origin、Git 通过所有映射运行从该远程获取的每个引用以查找其本地名称。如果映射产生多个名称,Git 会报错。 (通常反正只有一种设置,所以只有一种可能的输出。)