2013-04-10 55 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; 
相關問題