Безопасно ли использовать один и тот же файл игнорирования для Git, Mercurial и Bazaar?
Git, Mercurial и Bazaar, похоже, имеют одинаковые форматы для своего файла игнорирования (.gitignore
, .hgignore
, .bzrignore
[см. также шаблоны bzr]).
Чтобы улучшить синхронизацию глобальных файлов игнорирования, было бы безопасно использовать один из них в качестве фактического файла и просто символическую ссылку двух других на этот файл? Другими словами, есть ли опасность сделать мой $HOME/.gitignore
канонический игнорирует файл и делает
ln -s $HOME/.gitignore $HOME/.hgignore
ln -s $HOME/.gitignore $HOME/.bazaar/ignore
или есть какая-то тонкая разница между ними, которая укусила бы меня в какой-то момент?
2 ответа
Синтаксис, используемый в файлах игнорирования, отличается от системы к системе:
Mercurial: список регулярных выражений - можно изменить с помощью
syntax: glob
линия.Bazaar: список шаблонов оболочки - с префиксом
RE:
соответствовать как регулярное выражение.Git: список шаблонов оболочки.
Кроме того, точные правила соответствия шаблонов оболочки и регулярных выражений отличаются от инструмента к инструменту. В общем, это означает, что вы можете надеяться использовать этот трюк только в том случае, если ваш глобальный файл игнорирования довольно прост. В противном случае различия могут прийти и укусить вас, как вы говорите.
Я проверил это с этим файлом:
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
файл.
Синтаксис, по крайней мере, Git и Mercurial отличается (шаблоныglob и regex в hg), не забывайте также наборы файлов в hg,! условия в бзр