Git,Mercurial和Bazaar的忽略文件似乎都有类似的格式(.gitignore
,.hgignore
,.bzrignore
[另见bzr patterns])。
为了改善全局忽略文件的同步,将一个用作实际文件并将其他两个符号链接到该文件是否安全?换句话说,使我的$HOME/.gitignore
规范忽略文件并执行
ln -s $HOME/.gitignore $HOME/.hgignore
ln -s $HOME/.gitignore $HOME/.bazaar/ignore
或者他们之间是否存在一些微妙的差异会在某些时候咬我?
答案 0 :(得分:13)
忽略文件中使用的语法因系统而异:
Mercurial:正则表达式列表 - 可以使用syntax: glob
行进行更改。
Bazaar: 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
并为每个工具运行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/
正如您所看到的,这个简单的文件可以正常工作。
从技术上讲,Git和Bazaar现在会忽略一个名为syntax: glob
的文件,但除非你打算用这个奇怪的名字创建一个文件,否则这没关系。最后,请注意默认情况下Mercurial不会读取$HOME/.hgignore
文件。但你可以通过添加
[ui]
ignore.my-default = ~/.hgignore
到您的$HOME/.hgrc
文件。
答案 1 :(得分:1)
至少Git和Mercurial的语法不同(hg中的 glob和regex 模式),不要忘记hg中的文件集! bzr中的条件