Làm thế nào tôi có thể bỏ qua mọi thứ trong một thư mục trong Mercurial


149

Tôi đang tìm một biểu thức cho tệp .hgignore, để bỏ qua tất cả các tệp bên dưới một thư mục được chỉ định.

ví dụ: Tôi muốn bỏ qua tất cả các tệp và thư mục bên dưới bin

Trên thực tế, bất kỳ lời khuyên nào về cách các biểu thức được hình thành sẽ là tuyệt vời

Câu trả lời:


173

Luân phiên:

syntax: glob
bin/**

điều này dễ hơn nhiều tôi nghĩ :)
Xian

PhiLho, tôi nghĩ rằng cũng sẽ lọc ra các tệp có tên bin
Peter Gibson

1
Câu trả lời này, cộng với tài liệu này đã giúp tôi: selenic.com/mercurial/hgignore.5.html
CenterOrbit

7
bin bin/ bin/* bin/**- Tất cả đều làm điều tương tự với global tức là bỏ qua tất cả các thư mục & thư mục con có tên bin nhưng không có bất kỳ tên tệp bin.txt hoặc bin1 nào. Điểm của dấu sao là gì?
người dùng

Tôi thích sự rõ ràng, nhưng chắc chắn sử dụng 'bin' nếu bạn đã nội tâm hóa các quy tắc toàn cầu (Tôi là một reloại người)
Ry4an Brase

53

Tôi đã thực hiện một số thử nghiệm và tôi thấy rằng cú pháp regex trên Windows áp dụng cho đường dẫn bắt đầu với kho lưu trữ hiện tại, với dấu gạch chéo ngược được chuyển thành dấu gạch chéo.

Vì vậy, nếu kho lưu trữ của bạn ở trong E: \ Dev chẳng hạn, hg statussẽ áp dụng các mẫu chống lại foo / bar / file1.c, v.v. Neo áp dụng cho con đường này.

Vì thế:

  • Glob áp dụng cho các phần tử đường dẫn và được bắt nguồn từ các phần tử
  • foo khớp với bất kỳ thư mục (hoặc tệp) có tên foo (không phải là "foobar" hay "barfoo")
  • * foo * khớp với bất kỳ thư mục hoặc tệp nào có "foo" trong tên
  • foo / bar * khớp với tất cả các tệp trong thư mục "foo" bắt đầu bằng "bar"


  • Regex là trường hợp nhạy cảm, không neo
  • Tất nhiên, dấu gạch chéo regex ký tự đặc biệt như thế nào. (dấu chấm)
  • / khớp \ dấu phân cách đường dẫn trên Windows. \ không khớp với dấu phân cách này ...
  • foo khớp với tất cả các tệp và thư mục có "foo" bên trong
  • foo / chỉ khớp các thư mục kết thúc bằng "foo"
  • / foo / khớp với thư mục "foo" ở đâu đó trong đường dẫn
  • / foo / bar / khớp với thư mục "bar" trong thư mục "foo" ở đâu đó trong đường dẫn
  • ^ foo khớp với tệp hoặc thư mục bắt đầu bởi foo ở thư mục gốc của kho lưu trữ
  • foo $ khớp với tập tin kết thúc bằng foo

Tôi hy vọng điều này sẽ giúp ích, tôi tìm thấy trang HGIGNORE (5) một chút cô đọng.


Tôi có mẫu '' [Dd] ebug * / '' đang được sử dụng và điều kỳ lạ là nó cũng lọc các tệp như '' debug.txt ''
Mehrdad Mirreza

9

Cả hai cũng sẽ lọc ra một thư mục được gọi cabin, có thể không phải là những gì bạn muốn. Nếu bạn đang lọc cấp cao nhất, bạn có thể sử dụng:

^/bin/

Đối với các binthư mục dưới gốc của bạn, bạn có thể bỏ qua ^. Không cần chỉ định cú pháp, regrec là mặc định.


4
Điều này sẽ không bỏ qua bất cứ điều gì. Các caret chỉ nói những điều trong root repo nhưng dấu gạch chéo hàng đầu chỉ bắt được các dir không nằm trong root repo.
Ry4an Brase

2

Không sao, tôi hiểu rồi

syntax: regexp
bin\\*

biểu thức tuân theo cú pháp biểu thức chính quy perl.


2
Thật vậy, và biểu thức của bạn có nghĩa là "tệp hoặc thư mục kết thúc bằng bin và theo sau là 0 hoặc nhiều dấu gạch chéo ngược" ... Vì vậy, nó hoạt động vì dấu gạch chéo ngược bị vô hiệu hóa bởi *, nhưng nó áp dụng bất cứ thứ gì có "bin" bên trong. Trên Windows, hg thay thế \ by / trước khi khớp.
PhiLho

2

cú pháp: global bin / **

Câu trả lời này được hiển thị ở trên, tuy nhiên tôi cũng muốn thêm rằng * và ** được xử lý khác nhau. ** là đệ quy, * thì không.

Xem mẫu Hg


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.