2009-07-16 27 views
27

Với thuộc tính svn: ignore, có cách nào tôi có thể chỉ định những gì tôi muốn bỏ qua dựa trên các mẫu mà tôi không muốn bỏ qua không? Nói cách khác, tôi muốn bỏ qua mọi thứ nhưng tệp kết thúc bằng .xyz. Làm thế nào tôi sẽ đi về làm điều đó (nếu nó thậm chí có thể)?Sử dụng svn: ignore để bỏ qua mọi thứ trừ các tệp nhất định

Một tùy chọn tôi đã khám phá là cam kết mọi thứ tôi muốn được phiên bản, sau đó đặt thuộc tính svn: ignore trên thư mục thành '*', do đó không có tệp nào khác nhưng những gì tôi đã cam kết sẽ được phiên bản . Đây là điều tốt nhất tôi có thể nghĩ ra, nhưng nó cảm thấy bẩn thỉu nếu tôi cần phải thêm một tập tin khác vào phiên bản, tôi phải thực hiện nhiều commit ... một để loại bỏ thuộc tính svn: ignore, cái khác để thêm/cam kết (các) tệp mới, và sau đó là một phần ba để thay đổi svn: ignore trở lại thành '*'.

Suy nghĩ của bạn?

Trả lời

10

Không, không có đối sánh độc quyền như bạn mô tả. This article liệt kê các khả năng phù hợp với mẫu. Nó giới hạn:

  • ? - Ghép các ký tự đơn
  • * - Tương ứng với một chuỗi ký tự, bao gồm cả chuỗi rỗng
  • [ - Bắt đầu một định nghĩa lớp nhân vật chấm dứt bởi ], sử dụng cho phù hợp với một tập hợp con của các ký tự

Câu hỏi tương tự đã được hỏi là here.

+1

Có nhiều hơn một chút «fnmatch' được đề cập trong câu trả lời này. Xem câu trả lời của tomka dưới đây http://docs.python.org/2/library/fnmatch.html – vinnyjames

0

Vâng, tôi không biết nếu tôi bỏ lỡ một cái gì đó, nhưng bạn có thể sử dụng bất kỳ mô hình bạn muốn:

svn propset svn:ignore "*~" . 

Bạn có thể kiểm tra với:

svn propget svn:ignore . 

Một cách khác là sử dụng một bí danh/tập lệnh có thể thực hiện phân tích cú pháp phức tạp khi cam kết.

Giải pháp tốt nhất mà tôi tìm thấy để sử dụng bản thân mình là phân tách hoàn toàn cây phiên bản của tệp nguồn khỏi cây xây dựng. Bằng cách này bạn không tạo ra những thứ trong cây thư mục được phiên bản của bạn. Sau đó, bạn chỉ có thể sử dụng svn:ignore để bỏ qua các đồ tạo tác đơn giản được tạo bởi trình chỉnh sửa văn bản chẳng hạn.

CHỈNH SỬA:

Xin lỗi vì lỗi đầu tiên của tôi, tôi đã đọc sai bài đăng của bạn. Hai cách khác dường như có liên quan ngay cả khi không chính xác những gì bạn muốn ...

+0

Tôi nghĩ giải pháp đầu tiên của bạn là dựa vào điều gì đó. Bạn có thể đặt conceivably svn: bỏ qua một biểu thức chính quy phù hợp với tất cả mọi thứ ngoại trừ các tập tin kết thúc bằng ".xyz"? – jprete

+0

@jprete không có regex được cho phép. mô hình phù hợp dựa trên fnmatch. – whaley

7

Đó là giải pháp duy nhất tôi biết. Bạn có thể thêm tệp một cách rõ ràng ngay cả khi chúng bị bỏ qua.

Mặc dù vậy, bạn sẽ cần thêm cài đặt đó vào tất cả các thư mục con.

# Create a repository with property ignore * 

[[email protected] ~] cd /tmp 
[[email protected] /tmp] svnadmin create foo 
[[email protected] /tmp] svn co file:///tmp/foo co 
Checked out revision 0. 
[[email protected] /tmp] cd co 
[[email protected] co] svn propset svn:ignore \* . 
property 'svn:ignore' set on '.' 

# Create 3 files 

[[email protected] co] touch a 
[[email protected] co] touch b 
[[email protected] co] touch c 

# We can add all 3 of these files in one transaction 

[[email protected] co] svn status 
M  . 
[[email protected] co] svn add a 
A   a 
[[email protected] co] svn add b 
A   b 
[[email protected] co] svn status 
M  . 
A  a 
A  b 
[[email protected] co] svn add c 
A   c 
[[email protected] co] svn ci 
Sending  . 
Adding   a 
Adding   b 
Adding   c 
Transmitting file data ... 
Committed revision 1. 
+1

Cảm ơn mẹo. Tôi đã không nhận ra bạn có thể thêm một cách rõ ràng các tập tin như là 'svn add' bỏ qua svn: ignore. – whaley

+0

Đối với người dùng TortoiseSVN (1.8), nó sẽ khiến bạn phát điên nếu bạn cố gắng thêm một tập tin bị bỏ qua thông qua gui của nó, nhưng bạn có thể làm như vậy thông qua dòng lệnh. – AlexMA

17

Hãy xem http://www.thoughtspark.org/node/38. Rõ ràng bạn có thể sử dụng "!" trong các nhóm nhân vật để phủ nhận ý nghĩa của nó. Vì vậy, nếu bạn muốn bỏ qua mọi thứ ngoại trừ các tệp kết thúc bằng.java, thiết lập mô hình sau để svn: ignore:

*[!j][!a][!v][!a] 
*.java?* 
+4

Tôi thực sự đã hỏi jcscoobyrs (người quản lý gói svn trên OSX) về điều này trên IRC ngày hôm đó dẫn đến bài đăng của mình đến thoughtspark.org . Tôi tham chiếu nó trong một bình luận cho câu trả lời được chấp nhận. Chỉ cần đi để cho thấy rằng dù stackoverflow.com tuyệt vời như thế nào, nó vẫn không thể đánh bại nói chuyện với một committer dự án trên IRC. – whaley

+0

Giá trị chính xác sẽ là: * [! J] [! A] [! V] [! A] * j [! A] [! V] [! A] * ja [! V] [! A ] * jav [! A] – Nux

+0

Liên kết bị hỏng. – James

5

Đây là những gì tôi đã thiết lập trên bin thư mục cho svn:ignore bất động sản để phù hợp với tất cả mọi thứ ngoại trừ tập tin APK:

*[!a][!p][!k] 
*a[!p][!k] 
*ap[!k] 

Nếu sẽ có đầy đủ RegExp hỗ trợ bạn có thể sử dụng lookbehind tiêu cực, nhưng đó là hiếm khi thực hiện anyway (ví dụ như không phải trong JavaScript) và không hiệu quả.

4

Các công trình sau đây dành cho tôi và loại bỏ một vài gợi ý khác.

*.? 
*.?? 
*.??? 
*.[!j]??? 
*.?[!a]?? 
*.??[!v]? 
*.???[!a] 
*.?????* 

Một từng dòng giải thích sau:

  • bỏ qua tất cả những gì có gia hạn thêm một chữ
  • bỏ qua tất cả mọi thứ mà có một phần mở rộng hai chữ
  • bỏ qua tất cả mọi thứ mà có một ba phần mở rộng bản sao
  • bỏ qua mọi thứ có đuôi dài bốn chữ cái, trong đó chữ cái đầu tiên của tiện ích không phải là j
  • bỏ qua mọi thứ có phần mở rộng gồm bốn chữ cái, trong đó chữ cái thứ hai của tiện ích không phải là số
  • bỏ qua mọi thứ có đuôi dài bốn chữ cái, trong đó chữ cái thứ ba của tiện ích không phải là v
  • bỏ qua mọi thứ có phần mở rộng bốn chữ cái nơi thư thứ tư của tiện ích không phải là một
  • bỏ qua tất cả mọi thứ mà có một phần mở rộng năm chữ cái hoặc nhiều

hạn chế:

  • w này bị chặn cũng chặn các thư mục kết thúc bằng .java
  • Rất tiếc, tôi không thể bỏ qua các tệp không có tiện ích, vì điều đó cũng sẽ chặn các thư mục.
Các vấn đề liên quan