2012-03-14 58 views
10

Git,Mercurial和Bazaar的忽略文件似乎都有類似的格式(.gitignore,.hgignore,.bzrignore [另請參閱bzr patterns])。Git,Mercurial和Bazaar使用相同的忽略文件安全嗎?

爲了改善全球忽略的文件同步,這將是安全使用一個作爲一個實際的文件,只是符號鏈接另外兩個到該文件?換句話說,有沒有作出任何危險我$HOME/.gitignore規範忽略文件和做

ln -s $HOME/.gitignore $HOME/.hgignore 
ln -s $HOME/.gitignore $HOME/.bazaar/ignore 

或者是他們當中的一些細微的差別會咬我在某些時候?

回答

13

的語法條件是從系統的不同系統:

  • 水銀:正則表達式的列表 - 可以用syntax: glob線進行更改。

  • 集市:的shell glob模式名單 - 與RE:前綴爲正則表達式匹配。

  • Git: shell glob模式列表。

此外,shell模式和正則表達式如何匹配的確切規則因工具而異。總而言之,這意味着如果你的全局忽略文件非常簡單,你只能希望使用這個技巧。正如你所說,否則這些差異會來咬你。

我有這個文件測試它:

syntax: glob 
.bzr 
.git 
.hg 
*.o 
*~ 

,似乎按預期在所有三種工具來工作。爲了測試它,我創造了這個目錄樹:

$ tree 
. 
|-- foo.c 
|-- foo.c.~1~ 
|-- foo.h 
|-- foo.o 
`-- src 
    |-- bar.c 
    |-- bar.c.~1~ 
    `-- bar.o 

,跑到每個工具的狀態命令:

$ for tool in hg git bzr; do echo "== $tool status =="; $tool status; done 
== hg status == 
? foo.c 
? foo.h 
? src/bar.c 
== git status == 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  foo.c 
#  foo.h 
#  src/ 
nothing added to commit but untracked files present (use "git add" to track) 
== bzr status == 
unknown: 
    foo.c 
    foo.h 
    src/ 

正如你可以看到,這個簡單的文件工作正常。

技術上,Git和集市現在會忽略一個名爲syntax: glob文件,但除非你打算創建與怪異名稱的文件,這並不重要。最後,請注意默認情況下Mercurial不會讀取$HOME/.hgignore文件。但是,您可以通過將

[ui] 
ignore.my-default = ~/.hgignore 

添加到您的$HOME/.hgrc文件中。

+0

在水銀你也可以改變一個行,用'水珠前綴它glob的:'。 – 2012-03-14 09:08:58

+0

@LaurensHolst:正確的,但在這裏我想水銀治療以下模式作爲glob模式,因爲這對Git和集市的缺省值。 – 2012-03-14 10:46:45

+0

只是說要完成:)。 – 2012-03-14 12:00:24

1

至少Git和Mercurial的語法不同(glob和正則表達式 hg中的模式),請不要忘記hg中的文件集!在忽略文件中使用的bzr