10

Git、Mercurial 和 Bazaar 的忽略文件似乎都有相似的格式(.gitignore, .hgignore, .bzrignore[另见bzr 模式])。

为了改善全局忽略文件的同步,将一个文件用作实际文件并将另外两个文件符号链接到该文件是否安全?换句话说,制作我$HOME/.gitignore的规范忽略文件并做

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

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

4

2 回答 2

13

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

  • Mercurial:正则表达式列表——可以用syntax: glob一行来改变。

  • Bazaar: shell glob 模式列表 - 前缀 withRE:以匹配正则表达式。

  • 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 和 Bazaar 现在将忽略一个名为 的文件syntax: glob,但除非您打算创建一个具有该怪异名称的文件,否则这无关紧要。最后,请注意 Mercurial 默认不读取$HOME/.hgignore文件。但是您可以通过添加使其读取它

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

到你的$HOME/.hgrc文件。

于 2012-03-14T08:38:05.960 回答
1

至少 Git 和 Mercurial 的语法不同( hg 中的glob 和 regex模式),不要忘记 hg 中的文件集,!bzr的条件

于 2012-03-14T04:11:30.563 回答