2010-03-07 37 views
12

Tôi ghét nhìn thấy gần như mọi thư mục trong danh sách lưu trữ của tôi liệt kê mỗi tệp hai lần, một lần với dấu chấm ở phía trước và một lần không có. Tôi đã thử thêm .* vào tệp .hgignore của mình, nhưng nó không có hiệu lực. Đây có phải là cú pháp sai, và quan trọng hơn, có phải là một ý tưởng tồi để thử điều này ngay từ đầu? Cảm ơn.Làm thế nào để làm cho mercurial bỏ qua tất cả các tập tin ẩn?

+0

Cú pháp sẽ là một cái gì đó giống như '\ .. *' nhưng nó là rất đáng ngờ mà bạn mô tả có tất cả các file, với một dấu chấm và không có. Thông thường, bạn sẽ không có các tệp dấu chấm trong repo. Bạn đang theo dõi những tệp nào? ('hg manifest') – gavinb

+0

Rất tiếc, điều này vẫn không hiệu quả. Tôi đã phóng đại một chút khi tôi nói có dấu chấm tập tin ở khắp mọi nơi, nhưng trong một số thư mục mỗi tập tin có một tập tin tương đương dấu chấm. Tôi đã chỉnh sửa .hgignore với cú pháp của bạn, đã thực hiện 'hg addremove', và thực hiện một cam kết, và tất cả chúng vẫn còn trong kho của tôi. –

+1

Cú pháp phụ thuộc vào việc bạn đang sử dụng glob hay cú pháp lại (ví dụ: một dòng của dạng 'cú pháp: re' phía trên chỉ thị). Nhưng '. *' Là cú pháp glob đúng. Nếu các tập tin đã được cam kết, bạn sẽ phải loại bỏ chúng riêng lẻ (hoặc với 'hg rm. *'), Và addremove sẽ không làm điều này cho bạn. –

Trả lời

17

Bạn có câu trả lời gần đúng trong các nhận xét từ gavinb, nhưng kết quả trùng khớp là một chút. Tuy nhiên, khái niệm chính về bỏ qua sau khi khuôn mặt được cung cấp bởi RogerPage, một lần nữa trong một bình luận (những gì với tất cả mọi người thích ý kiến ​​để trả lời?).

Hãy nhìn vào những chín file:

dir.with.dots/file.with.dots 
dir.with.dots/filewithoutdots 
dir.with.dots/.filestartwithdot 
dirwithoutdots/file.with.dots 
dirwithoutdots/filewithoutdots 
dirwithoutdots/.filestartwithdot 
.startwithdot/file.with.dots 
.startwithdot/filewithoutdots 
.startwithdot/.filestartwithdot 

Nếu ở chế độ regex mặc định cho hgignore bạn làm:

\..* 

Bạn bỏ qua tám chín file:

$ hg stat -i 
I .hgignore 
I .startwithdot/.filestartwithdot 
I .startwithdot/file.with.dots 
I .startwithdot/filewithoutdots 
I dir.with.dots/.filestartwithdot 
I dir.with.dots/file.with.dots 
I dir.with.dots/filewithoutdots 
I dirwithoutdots/.filestartwithdot 
I dirwithoutdots/file.with.dots 

rộng hơn bạn nói. Nó bỏ qua bất cứ điều gì có dấu chấm ở bất kỳ đâu trong đó.

Để bỏ qua tất cả tập tin và directores (không phải những gì bạn nói, nhưng những gì bạn dường như muốn) bắt đầu với một dấu chấm bạn sử dụng này mẫu regexp:

(^|/)\. 

mà nói rằng điều trước khi đen dấu chấm phải là đầu của dòng (^) hoặc dấu gạch chéo.

$ hg stat -i 
I .hgignore 
I .startwithdot/.filestartwithdot 
I .startwithdot/file.with.dots 
I .startwithdot/filewithoutdots 
I dir.with.dots/.filestartwithdot 
I dirwithoutdots/.filestartwithdot 

Chỉ ghi lại các tệp hoặc thư mục bắt đầu bằng dấu chấm.

Tuy nhiên, khái niệm then chốt khác xuất hiện, đó là .hgignore không có tác dụng sau khi tệp được thêm vào. Nó sẽ ngăn chặn thêm bằng thẻ hoang dã, nhưng bạn luôn có thể ghi đè .hgignore với một rõ ràng hg add. và một khi các tập tin đã được thêm vào, hgignore không còn được tham khảo.

Điều đó thực sự thực sự tiện dụng vì bạn có thể bỏ qua rộng rãi (ví dụ: .*\.jar) và sau đó thêm ngoại lệ bạn muốn theo cách thủ công bằng cách sử dụng tệp hgignore của mình. Tuy nhiên, trong trường hợp này có nghĩa là bạn cần phải hg rm các tệp bạn đã thêm vô tình và tonfa đã chỉ ra cách thực hiện điều đó (miễn là không có không gian trong tên tệp của bạn).

Trong khi kết thúc nó có vẻ giống như những gì bạn muốn trong tập tin .hgignore của bạn là:

(^|/)\._ 

và rằng bạn cần phải loại bỏ những người bạn đã thêm:

find . -type f -name "._*" -print0 |xargs -0 hg rm 
+0

Cách, quá kỹ lưỡng. Thanh danh! –

0

tôi sử dụng điều này trong của tôi .hgignore:

syntax: regexp 

# dotfiles 
(?<![^/])\. 

Lần đọc nào: dấu chấm không có gì khác hơn af hoặc gạch chéo.

Giải pháp của Ry4an cũng tốt, tôi đã sử dụng nó trước đó. Không chắc chắn cái nào hiệu quả hơn.

https://regex101.com/r/dB4bW7/1

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