2012-03-14 6 views
10

Git, Mercurial i Bazaar wszystkie wydają się mieć podobne formaty dla ich pliku ignorowania (.gitignore, .hgignore, .bzrignore [patrz także).Czy można bezpiecznie używać tego samego pliku ignorowania dla Git, Mercurial i Bazaar?

Aby poprawić synchronizację globalnych plików ignorowania, czy można bezpiecznie użyć jednego z nich jako pliku rzeczywistego i po prostu dowiązać symbolicznie dwa pozostałe do tego pliku? Innymi słowy, czy istnieje niebezpieczeństwo, że mój $HOME/.gitignore kanoniczna ignoruje plik i robi

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

czy jest jakiś subtelna różnica między nimi, który gryzie mnie w pewnym momencie?

Odpowiedz

13

składni w plikach ignorują różni się od systemu:

  • Mercurial: lista wyrażeń regularnych - mogą być zmieniane za pomocą syntax: glob linii.

  • Bazar: lista wzorców globu skorupy - przedrostek z RE: do dopasowania jako wyrażenie regularne.

  • Git: lista wzorców globu powłoki.

Co więcej, dokładne zasady interpretacji wzorców powłoki i wyrażeń regularnych różnią się w zależności od narzędzia. W sumie oznacza to, że możesz mieć nadzieję, że użyjesz tej sztuczki, jeśli twój globalny plik ignorowania jest całkiem prosty. W przeciwnym razie mogą pojawić się różnice i cię ugryźć, jak mówisz.

ja testowałem to z tego pliku:

syntax: glob 
.bzr 
.git 
.hg 
*.o 
*~ 

i wydaje się, aby działać zgodnie z przeznaczeniem we wszystkich trzech narzędzi. By to sprawdzić, stworzyłem ten drzewo katalogów:

$ tree 
. 
|-- foo.c 
|-- foo.c.~1~ 
|-- foo.h 
|-- foo.o 
`-- src 
    |-- bar.c 
    |-- bar.c.~1~ 
    `-- bar.o 

i pobiegł polecenia statusu dla każdego narzędzia:

$ 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/ 

Jak widać, ten prosty plik działa dobrze.

Technicznie, Git i Bazaar zignorują teraz plik o nazwie syntax: glob, ale jeśli nie planujesz stworzyć pliku o tej dziwnej nazwie, nie ma to znaczenia. Na koniec zauważ, że Mercurial domyślnie nie czyta pliku $HOME/.hgignore. Możesz go jednak odczytać, dodając do tego do swojego pliku .

+0

W Mercurial możesz także zmienić pojedynczą linię na glob poprzez dodanie przedrostka 'glob:'. –

+0

@LaurensHolst: prawy, ale tutaj chciałem, aby Mercurial traktował następujące wzorce jako wzorce globalne, ponieważ są one domyślne dla Git i Bazaar. –

+0

Po prostu uważam za kompletny :). –

1

Składnia co najmniej Git i Mercurial różnią się (glob i regex wzorów w hg), nie zapomnij również zestawów plików w hg,! Warunki w BZR

Powiązane problemy