2010-03-31 14 views
7

Tôi có một dự án NetBeans và kho lưu trữ Mercurial nằm trong thư mục gốc của dự án. Tôi muốn nó bỏ qua mọi thứ ngoại trừ nội dung của các thư mục "src" và "test", và .hgignore.Mercurial/.hgignore - Làm cách nào để bỏ qua mọi thứ trừ nội dung của một thư mục?

Tôi không quen thuộc với các cụm từ thông dụng và không thể tìm ra biểu thức sẽ làm điều đó.

Những người tôi đã cố gắng:

(?! Src /.*)

(thử nghiệm /.*?!)

((^ hgignore?!.)? ! src /. | test /. | .ggignore)

Dường như bỏ qua mọi thứ, tôi không thể hiểu tại sao.

Mọi lời khuyên sẽ tuyệt vời.

Trả lời

7

Điều này dường như làm việc:

syntax: regexp 

^(?!src|test|\.hgignore) 

cơ bản Đây là nỗ lực cuối cùng của bạn, nhưng:

  • Nó bắt nguồn từ lúc bắt đầu của chuỗi với ^, và
  • Nó không yêu cầu dấu gạch chéo theo sau cho tên thư mục.

Điểm thứ hai là quan trọng vì, như the manual nói:

Ví dụ, nói rằng chúng ta có một tập tin untracked, file.c, tại a/b/file.c bên trong kho lưu trữ của chúng tôi. Mercurial sẽ bỏ qua file.c nếu bất kỳ mẫu nào trong .hgignore khớp với a/b/file.c, a/b hoặc a.

Vì vậy, mẫu của bạn phải không phải khớp với src.

+0

Đừng quên thoát khỏi dấu chấm. –

+0

Bắt tốt; cố định điều đó. Cảm ơn! – legoscia

+0

Cảm ơn rất nhiều, các bạn! Điều đó thực sự hữu ích, nó hoạt động như một sự quyến rũ bây giờ, và tôi thấy nơi tôi đã đi sai. – Saiki

3
^(?!src\b|test\b|\.hgignore$).*$ 

sẽ hoạt động. Nó khớp với bất kỳ chuỗi nào không bắt đầu bằng từ src hoặc test hoặc bao gồm hoàn toàn là .hgignore.

Sử dụng neo đường biên từ \b để đảm bảo rằng các tệp như testtube.txt hoặc srcontrol.txt không được kết hợp một cách vô tình. Tuy nhiên, nó sẽ "misfire" trên các tệp như src.txt trong đó có một ranh giới từ khác với trước dấu gạch chéo.

+0

Làm cách nào để thay đổi điều này để chỉ một số thư mục con nhất định không bị bỏ qua? ví dụ. app/design/frontend/rc –