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

时间:2013-04-10 20:19:04

标签: git configuration-files

如果我执行git config foo.bar baz,则会向foo添加.git/config部分:

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

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

...
[foo]
...

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

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

我的问题是:

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

4 个答案:

答案 0 :(得分:4)

要回答第3点,您可以使用>>> [(yield(x)) for x in xlist] <generator object <listcomp> at 0x00000076CC8E5DB0> 的结果来决定何时进行清理:

git config --get-regexp

答案 1 :(得分:3)

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

答案 2 :(得分:2)

  

从.git / config?

中删除设置时如何避免空白部分

应该用Gti 2.18(2018年第二季度)修复:
&#34; git config --unset a.b&#34;,当&#34; a.b&#34;是空白部分中的最后一个变量&#34; a&#34;,留空部分&#34; a&#34;落后,更糟糕的是,随后的&#34; git config a.c value&#34;没有重用那个 空壳,而是创建一个新的 这些已被(部分)纠正。

请参阅commit c71d8bbcommit 22aedfccommit 6ae996fcommit 5221c31commit 668b9adcommit fee8572commit 8032cc4,{{3} },commit b73bdc3(2018年4月9日),commit 422e8efcommit dde154bcommit 85bf5d6commit 46fc89ccommit e931395commit efbaca1( 2018年4月3日)commit 83b7fd8 (由Johannes Schindelin (dscho)合并于Junio C Hamano -- 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
  

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

答案 3 :(得分:1)

Thomas Rast引起了我的注意this thread on the git developer mailing list

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

结论是:

  1. 不,这不是预期的行为;
  2. 是的,这是一个错误。
  3. 这种编程很乏味但很简单,所以我会看看是否可以编写补丁。