2012-03-14 20 views
10

Git, Mercurial và Bazaar dường như có định dạng tương tự cho tệp bỏ qua của họ (.gitignore, .hgignore, .bzrignore [xem thêm bzr patterns]).Có an toàn khi sử dụng cùng một tệp bỏ qua cho Git, Mercurial và Bazaar không?

Để cải thiện đồng bộ hóa các tệp bỏ qua chung, có an toàn khi sử dụng một tệp như một tệp thực và chỉ đơn giản là liên kết hai tệp kia với tệp đó không? Nói cách khác, là có bất kỳ nguy hiểm trong việc đưa ra $HOME/.gitignore của tôi kinh điển bỏ qua tập tin và làm

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

hoặc là có một số khác biệt tinh tế giữa họ rằng sẽ cắn tôi tại một số điểm?

Trả lời

13

Cú pháp sử dụng trong bỏ qua các tập tin là khác nhau từ hệ thống để hệ thống:

  • Mercurial: danh sách các biểu thức thông thường - có thể được thay đổi với một dòng syntax: glob.

  • Bazaar: danh sách mẫu hình cầu vỏ - tiền tố là RE: để khớp với cụm từ thông dụng.

  • Git: danh sách các mẫu hình cầu vỏ.

Ngoài ra, các quy tắc chính xác về cách các mẫu vỏ và cụm từ thông dụng được kết hợp khác nhau giữa công cụ với công cụ. Tất cả trong tất cả, điều này có nghĩa là bạn chỉ có thể hy vọng sử dụng thủ thuật này nếu tệp bỏ qua toàn cầu của bạn khá đơn giản. Nếu không, sự khác biệt có thể đến và cắn bạn, như bạn nói.

Tôi đã thử nghiệm nó với tập tin này:

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

và có vẻ như để làm việc như dự định trên tất cả ba công cụ. Để kiểm tra nó, tôi tạo ra cây thư mục này:

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

và chạy lệnh trạng thái cho mỗi công cụ:

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

Như bạn thấy, tập tin đơn giản này hoạt động tốt.

Về mặt kỹ thuật, Git và Bazaar giờ sẽ bỏ qua tệp có tên syntax: glob, nhưng trừ khi bạn dự định tạo tệp có tên lạ, điều này không quan trọng. Cuối cùng, lưu ý rằng Mercurial không đọc tệp $HOME/.hgignore theo mặc định. Nhưng bạn có thể đọc nó bằng cách thêm

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

vào tệp $HOME/.hgrc của bạn.

+0

Trong Mercurial bạn cũng có thể thay đổi một dòng đơn thành glob bằng cách đặt trước nó bằng 'glob:'. –

+0

@LaurensHolst: đúng, nhưng ở đây tôi muốn Mercurial xử lý các mẫu sau đây như các mẫu hình cầu vì đó là mặc định cho Git và Bazaar. –

+0

Chỉ cần nhận xét để hoàn thành :). –

1

Cú pháp ít nhất Git và Mercurial khác nhau (glob và regex mẫu trong hg), đừng quên cả các tệp trong hg,! điều kiện trong bzr

Các vấn đề liên quan