对Git,Mercurial和Bazaar使用相同的忽略文件是否安全?

got*_*nes 10 git mercurial dvcs bazaar ignore

Git的,水银和集市似乎都具有相似的格式为他们忽略文件(.gitignore,.hgignore,.bzrignore[又见BZR模式]).

为了改善全局忽略文件的同步,将一个用作实际文件并将其他两个符号链接到该文件是否安全?换句话说,是否有任何危险使我$HOME/.gitignore的规范忽略文件和做

ln -s $HOME/.gitignore $HOME/.hgignore
ln -s $HOME/.gitignore $HOME/.bazaar/ignore
Run Code Online (Sandbox Code Playgroud)

或者他们之间是否存在一些微妙的差异会在某些时候咬我?

Mar*_*ler 13

忽略文件中使用的语法因系统而异:

  • Mercurial:正则表达式列表 - 可以用syntax: glob一行改变.

  • Bazaar: shell glob模式列表 - 前缀RE:为匹配为正则表达式.

  • Git: shell glob模式列表.

此外,shell模式和正则表达式如何匹配的确切规则因工具而异.总而言之,这意味着如果您的全局忽略文件非常简单,那么您只能希望使用此技巧.正如你所说,否则就会出现差异并咬你.

我用这个文件测试了它:

syntax: glob
.bzr
.git
.hg
*.o
*~
Run Code Online (Sandbox Code Playgroud)

它似乎在所有三个工具中按预期工作.为了测试它,我创建了这个目录树:

$ tree
.
|-- foo.c
|-- foo.c.~1~
|-- foo.h
|-- foo.o
`-- src
    |-- bar.c
    |-- bar.c.~1~
    `-- bar.o
Run Code Online (Sandbox Code Playgroud)

并为每个工具运行status命令:

$ 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/
Run Code Online (Sandbox Code Playgroud)

如您所见,这个简单的文件工作正常.

从技术上讲,Git和Bazaar现在将忽略一个名为的文件syntax: glob,但除非你打算用这个奇怪的名字创建一个文件,否则这并不重要.最后,请注意Mercurial $HOME/.hgignore默认不读取文件.但你可以通过添加来阅读它

[ui]
ignore.my-default = ~/.hgignore
Run Code Online (Sandbox Code Playgroud)

到你的$HOME/.hgrc文件.