从.git/config中删除设置时如何避免空白部分?

MJD*_*MJD 7 git configuration-files

如果我这样做git config foo.bar baz,这会添加一个foo部分.git/config:

...
[foo]
        bar = baz
...
Run Code Online (Sandbox Code Playgroud)

我可以再次删除该设置git config --unset foo.bar,但该部分保留在文件中,其中没有任何内容:

...
[foo]
...
Run Code Online (Sandbox Code Playgroud)

如果我添加其他foo设置git config foo.bar baz,git-config则不将其添加到空白foo部分; 它开始一个新的:

...
[foo]
[foo]
        bar = baz
...
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这是预期的行为吗?
  2. 如果没有,这是一个错误吗?
  3. 有什么方法可以在取消配置时避免配置文件中空节的可能增加?

Von*_*onC 2

从 .git/config 中删除设置时如何避免出现空部分?

这应该在 Gti 2.18(2018 年第 2 季度)中修复:
git config --unset a.b”,当“ a.b”是空部分“”中的最后一个变量时a,会留下一个空部分“a”,更糟糕的是,后续的“ git config a.c value”没有重用那个空壳,而是创建了一个新壳。
这些已(部分)纠正。

请参阅提交 c71d8bb提交 22aedfc提交 6ae996f提交 5221c31提交 668b9ad提交 Fee8572、提交 8032cc4 、提交 b73bdc3 提交422e8ef(2018 年 4 月 9 日)和提交 dde154b、提交85bf5d6提交 46 fc89c,提交 e931395 ,提交efbaca1提交83b7fd8(2018 年 4 月 3 日)作者:Johannes Schindelin ( )(由Junio C Hamano 合并 -- --提交 4f4d0b4中,2018 年 5 月 8 日)dscho
gitster

git config --unset:删除空部分(在常见情况下)

删除最后一个条目后不删除节标题的原始原因是这样的:用户可以添加有关该节或其中的条目的评论,如果那里还有其他评论,我们不知道是否应该删除他们。

特别是,提出了一个如下所示的编造示例(并已添加到 t1300 中):

# some generic comment on the configuration file itself
# a comment specific to this "section" section.
[section]
# some intervening lines
# that should also be dropped

key = value
# please be careful when you update the above variable
Run Code Online (Sandbox Code Playgroud)

在这种情况下,理想的做法git config --unset section.key是只保留第一行,因为所有其他注释现在都已过时。

然而,这是不可行的,除非向 Git 添加完整的自然语言处理模块,这看起来不仅需要大量工作,而且是一个完全不合理的功能(对大多数用户来说几乎没有什么好处)。

现在,这个问题的真正问题是:大多数用户根本不编辑他们的配置文件!在他们的用例中,配置看起来像这样:

[section]
    key = value
Run Code Online (Sandbox Code Playgroud)

...如果条目被删除,会发生什么是完全明显的:整个部分应该消失。