Безопасно ли использовать один и тот же файл игнорирования для Git, Mercurial и Bazaar? - PullRequest
10 голосов
/ 14 марта 2012

Git, Mercurial и Bazaar, похоже, имеют одинаковые форматы для своего файла игнорирования (.gitignore, .hgignore, .bzrignore [ см. также шаблоны bzr] ).

Чтобы улучшить синхронизацию глобальных файлов игнорирования, было бы безопасно использовать один из них в качестве фактического файла и просто символическую ссылку двух других на этот файл? Другими словами, есть ли опасность, что мой $HOME/.gitignore канонически игнорирует файл и делает

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

или есть какая-то тонкая разница между ними, которая укусила бы меня в какой-то момент?

Ответы [ 2 ]

13 голосов
/ 14 марта 2012

Синтаксис, используемый в файлах игнорирования, отличается от системы к системе:

  • Mercurial: список регулярных выражений - можно изменить с помощью syntax: globline.

  • 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 файлу.

1 голос
/ 14 марта 2012

Синтаксис как минимум Git и Mercurial отличается ( шаблоны glob и regex в hg), не забудьте также наборы файлов в hg,!условия в бзр

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...