7

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

...
[foo]
        bar = baz
...

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

...
[foo]
...

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

...
[foo]
[foo]
        bar = baz
...

我的问题是:

  1. 这是预期的行为吗?
  2. 如果不是,那是一个错误吗?
  3. 取消配置时,有没有办法避免配置文件中可能出现的空白部分?
4

4 回答 4

4

要回答第 3 点,您可以使用结果git config --get-regexp来决定何时清理:

git config --unset "foo.bar";
# Cleanup empty "foo" section.
# Regular expression has a trailing period to avoid testing against
# other sections that share the same prefix (e.g. "foo" vs "food").
if ! git config --get-regexp '^foo\.'; then
    git config --remove-section "foo" 2> /dev/null;
fi;
于 2016-06-15T20:38:55.623 回答
3

这样git config --remove-section你就可以删除整个部分。但是,是的,对我来说,如果存在空白,它会创建一个新部分,这看起来像是一个错误。

于 2013-04-10T20:31:21.650 回答
2

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

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

参见提交C71D8BB提交22AEDFC提交6AE996F ,提交5221C31提交668B9AD ,提交费用8572 ,提交8032cc4提交B73BDC3提交B73BDC3提交422E8EF(2018年4月9日)和提交DDE154B,提交85BF5D6commit compt 83b7fd8(2018 年 4 月 3 日),作者Johannes Schindelin((由Junio C Hamano 合并 -- --提交 4f4d0b4dscho
gitster, 2018 年 5 月 8 日)

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

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

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

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

[section]
    key = value

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

于 2018-05-10T13:35:30.723 回答
1

Thomas Rast在 git developer mailing list 上引起了我的注意。

根据我对 Peff 的描述的理解,如果配置解析器的编程不是那么临时,那么问题将很容易解决。解析文件后,结果是一个包含配置设置的结构,但没有文件的原始结构。由于调用者无法获得有关节结构的信息,因此设置插入代码无法知道是否存在具有正确标题的空节。删除空白部分也有点棘手,因为它们可能包含重要的注释,不应仅仅因为该部分的最后一个功能部分被删除而自动删除。

结论是:

  1. 不,这不是预期的行为;
  2. 是的,这是一个错误。

这种编程很乏味但很简单,所以我会看看我是否可以制作一个补丁。

于 2013-04-10T20:31:34.320 回答