2013-04-10 54 views
4

如果我做git config foo.bar baz,这增加了foo部分.git/config从.git/config中删除设置时,如何避免出现空白部分?

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

我可以git config --unset foo.bar再次删除设置,但部分保留在文件中,有什么也没有:

... 
[foo] 
... 

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

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

我的问题是:

  1. 这是预期的行为?
  2. 如果不是,它是一个错误?
  3. 有没有办法避免配置文件中的空白部分可能在未设置配置时激增?

回答

1

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

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

的结论是:

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

这种编程很乏味但很直接,所以我会看看我能不能修补一个补丁。

+0

你是否曾经在工作了一个补丁任何运气? – nonsensickle 2016-10-31 09:26:41

+0

我没有做补丁。 – MJD 2016-10-31 11:34:10

3

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

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; 
相关问题