2008-11-21 47 views
31

Caveat: Tôi thử tất cả các tính năng được liệt kê tại đây: How can I ignore everything under a folder in Mercurial.
Không hoạt động như tôi mong đợi.bỏ qua các thư mục trong mercurial

Tôi muốn bỏ qua mọi thứ trong thư mục test. Nhưng không phải bỏ qua srcProject\test\TestManager

tôi cố gắng

syntax: glob 
test/** 

Và nó bỏ qua testsrcProject\test\TestManager

Với:

syntax: regexp 
^/test/ 

Đó là điều tương tự.

Ngoài ra với:

syntax: regexp 
test\\* 

Tôi đã cài đặt TortoiseHG 0.4rc2 với Mercurial-626cb86a6523 + TortoiseHg, Python-2.5.1, PyGTK-2.10.6, GTK-2.10.11 trong Windows

Trả lời

44

Hãy thử nó mà không có dấu gạch chéo sau dấu mũ trong phiên bản regexp.

^test/ 

Dưới đây là một thử nghiệm:

~$ mkdir hg-folder-ignore 
~$ cd hg-folder-ignore 
~/hg-folder-ignore$ echo '^test/' > .hgignore 
~/hg-folder-ignore$ hg init 
~/hg-folder-ignore$ mkdir test 
~/hg-folder-ignore$ touch test/ignoreme 
~/hg-folder-ignore$ mkdir -p srcProject/test/TestManager 
~/hg-folder-ignore$ touch srcProject/test/TestManager/dont-ignore 
~/hg-folder-ignore$ hg stat 
? .hgignore 
? srcProject/test/TestManager/dont-ignore 

ý rằng ignoreme không được hiển thị và không-bỏ qua được.

+0

@JaKXz có, tính năng này hoạt động trong tất cả các phiên bản của Mercurial. Những gì bạn đã có trong '.hgignore' của bạn đã không đi qua. Hãy chắc chắn rằng tập tin bỏ qua của bạn đang được hiểu là một regex thay vì một glob, và không tính vào bỏ qua để bỏ qua các tập tin bạn đã 'hg add'ed. Việc bỏ qua chỉ ảnh hưởng đến cách các tệp chưa được xếp hạng được liệt kê/xử lý. –

+0

et al. Các giải pháp tôi thấy là sử dụng này: 'cú pháp: regexp ^ SourceFolder \ bin ^ SourceFolder \ gen' và cho một file có tên classpath: '^ SourceFolder \ .classpath' – JaKXz

4

bạn có thể sử dụng zero-width tiêu cực nhìn về phía trước và tìm kiếm-đằng sau khẳng định để xác định rằng bạn muốn bỏ qua test chỉ khi nó không được đi trước bởi srcProject và không theo sau bởi TestManager:

syntax: regexp 
(?<!srcProject\\)test\\(?!TestManager) 

Mercurial sử dụng các biểu thức chính quy của Python, vì vậy bạn có thể tìm thêm thông tin về xác nhận 0 chiều trong tài liệu Python: https://docs.python.org/library/re.html#regular-expression-syntax

+1

mát kỹ thuật, nhưng hoàn toàn quá mức cần thiết trong trường hợp này –

+0

Cách phức tạp hơn cần thiết để giải quyết một vấn đề đơn giản. Giải pháp của Ry4an hoàn thành một cách đơn giản hơn nhiều. –

3

Cả hai trường hợp làm việc cho tôi (trên linux và windows):

syntax: regexp 
^backup/  #root folder 
nbproject/ #any folder 

hoặc

syntax: glob 
./backup/* #root folder 
nbproject/* #any folder 

Tuy nhiên, đó không phải là trước khi tôi thêm một liên kết đến tập tin .hgignore để .hgrc tập tin trong repo của tôi:

[ui] 
ignore = .hg/.hgignore 

Cũng đáng nói đến là tính năng bỏ qua các tệp đó là không hiện đang theo dõi, đây là những thứ được thêm trước khi bạn định cấu hình để bỏ qua chúng. Vì vậy, không được đưa ra bởi tình trạng hg nói rằng một số nộp là M (sửa đổi) hoặc! (thiếu) trong các thư mục mà bạn vừa thêm vào danh sách bỏ qua!

+3

' .hgignore' là bình thường trong thư mục gốc của kho lưu trữ, không phải dưới '.hg'. –

0

Tạo tệp .hgignore trong thư mục gốc của kho lưu trữ

Bây giờ, hãy thêm các nội dung sau vào tệp.

cú pháp: glob

bin/**

* .DS_Store

này sẽ loại bỏ các thư mục bin và tất cả các tập tin * .DS_Store từ kho

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