2012-06-20 12 views
13

Tôi có một thư mục rác, nơi ứng dụng của tôi đặt các tệp tạm thời. Tôi không muốn cam kết (chắc chắn), nhưng thư mục phải tồn tại hoặc ứng dụng sẽ bị lỗi.SVN: Bỏ qua nhưng KHÔNG xóa một thư mục

Nếu tôi sử dụng tính năng bỏ qua tiêu chuẩn TortoiseSVN, nó sẽ thêm thuộc tính "svn: ignore junk_folder" vào thư mục mẹ, nhưng nó cũng sẽ xóa "junk_folder" không thể xảy ra.

Nếu tôi chỉ hoàn nguyên thao tác xóa (do TortoiseSVN thực hiện) nhưng để thêm thuộc tính "svn: ignore", giải pháp này sẽ không thành công. TortoiseSVN sẽ báo cáo các tệp bên trong "junk_folder" là không được phiên bản, mà tôi muốn tránh.

Có giải pháp nào cho phép tôi hoàn toàn bỏ qua thư mục cụ thể trong SVN hay không, sẽ không được báo cáo là không phiên bản và cũng sẽ không được tự động cam kết mà không xóa nó?

EDIT: Tôi quên thêm rằng tôi đang nói về thư mục đã được phiên bản. Có vẻ như, nếu bạn bỏ qua (svn: bỏ qua hoặc tùy chọn thích hợp trong TortoiseSVN) một thư mục chưa được phiên bản (trước lần commit đầu tiên) thì mọi thứ đều OK. Nhưng, nếu bạn làm điều này trên thư mục đã có trong kho lưu trữ, TortoiseSVN đánh dấu nó là đã xóa và xóa nó khỏi cả hai kho lưu trữ (nhưng không phải từ bản sao làm việc cục bộ) khi cam kết tiếp theo.

+0

thể bạn không chỉ cần thêm thư mục và không – Wug

+0

@Wug - Tôi nghĩ vì ứng dụng của anh ấy sẽ tạo các tệp ở đó, nên anh ấy không muốn SVN liên tục nói với anh ta rằng có các tệp không phiên bản trong thư mục đó. – CodingWithSpike

+0

Chính xác. không muốn bất kỳ báo cáo nào về nội dung hoặc thay đổi trong thư mục này, đặc biệt là vì có hàng nghìn tệp và thư mục bên trong thư mục rác đó và hộp thoại cam kết của tôi bị quá tải với các mục nhập như vậy – trejder

Trả lời

12

Tôi tin rằng bạn chỉ có thể thêm một svn: ignore cho "*" trong thư mục đó, thay vì "junk_folder" (nói cách khác, bỏ qua "junk_folder/*").

Tôi không biết nếu TortoiseSVN có một nút cho điều đó, nhưng từ dòng lệnh, bạn có thể làm điều đó bằng lệnh:

svn propset svn: ignore "*" junk_folder

(ít nhất tôi nghĩ rằng đó là cú pháp đúng, ra khỏi đỉnh đầu của tôi. Nếu ai đó nghĩ rằng đó là sai, xin vui lòng sửa tôi)

+0

Tôi nên lưu ý rằng phương pháp này vẫn có một "junk_folder" trống được đăng ký SVN, vì vậy khi bạn thực hiện thanh toán sạch, bạn sẽ nhận được một "junk_folder" trống, nhưng SVN sẽ không cho bạn biết về bất kỳ tệp không phiên bản nào được tạo trong thư mục đó sau. Tôi nghĩ đó là những gì bạn đang yêu cầu ... – CodingWithSpike

+0

Và đó chính xác là những gì tôi cần! :] Tôi cần phải có "junk_folder" (trống) được kiểm tra trên mỗi lần thanh toán vào một thư mục mới. Và tôi cần bất cứ thứ gì bên trong nó, để bị bỏ qua. Giải pháp của bạn là hoàn hảo! – trejder

2

Tôi sử dụng tính năng này cho những thứ như thư mục đầu ra trung gian của trình biên dịch và chưa bao giờ xóa bất kỳ thứ gì.

Để kiểm tra lại điều này, tôi đã tìm thấy một thư mục không phiên bản trong một trong các bản sao làm việc của tôi. Tôi đã nhấp chuột phải vào thư mục và điều hướng đến tùy chọn "Thêm vào danh sách bỏ qua". Nó mở rộng đến tên thư mục. Tôi đã chọn tên thư mục và nhận được một thông báo bật lên lưu ý rằng nó đã được thêm vào danh sách bỏ qua. Kiểm tra trạng thái sao chép hoạt động, thư mục mẹ chỉ có một thuộc tính sửa đổi. Không có tệp nào được đánh dấu để xóa.

Ignoring Files And Directories

enter image description here

Như một mặt lưu ý, bạn cũng có thể ẩn các tập tin không phiên bản khi sử dụng "Check for Sửa đổi" và Commit hộp thoại với một hộp kiểm gần cuối của hộp thoại.

+1

Điều đó rất lạ những gì bạn đã viết! Bất cứ khi nào tôi sử dụng tùy chọn này, nó ngay lập tức đánh dấu thư mục như bị xóa và thực sự xóa nó khi cam kết tiếp theo. Điều này dẫn đến ứng dụng gặp sự cố. Điều này được kiểm tra khoảng hàng trăm lần, vì vậy tôi không thể tin rằng bạn sử dụng tùy chọn này trên một thư mục (không phải là một tập tin!) Và không nhận được thư mục này bị xóa khi cam kết tiếp theo. – trejder

+0

trong ảnh chụp màn hình, crashmstr sẽ phải nhấp chuột phải vào một tệp trong thư mục (có tên là Copy.bak trong trường hợp này), không phải trên chính thư mục đó. – CodingWithSpike

+0

Màn hình là từ tài liệu TorsoiseSVN. Màn hình ví dụ là một tập tin, nhưng bạn có thể làm tương tự cho một thư mục, bạn sẽ chỉ thấy tên thư mục thay vì tên tệp/tùy chọn mở rộng. – crashmstr

1

Ý của bạn là "Nếu tôi sử dụng tính năng bỏ qua tiêu chuẩn TortoiseSVN, nó sẽ thêm svn:ignore junk_folder thuộc tính vào thư mục mẹ, nhưng nó cũng sẽ xóa junk_folder ... "?

Subversion không xóa thư mục bạn yêu cầu bỏ qua.Trong thực tế, đó là toàn bộ mục đích của svn:ignore: Để cho phép bạn có một thư mục không có trong kho mà không có Subversion rên rỉ về nó.

Làm thế nào để tạo junk_folder này? Có phải bởi một tập lệnh bạn sử dụng hay bạn làm theo cách thủ công? Chính xác khi nào nó bị xóa? Bạn có nghĩa là khi bạn thực hiện một thanh toán mới, junk_folder không có ở đó, hoặc TortoiseSVN xóa nó ngay khi bạn thêm thuộc tính svn:ignore vào thư mục mẹ của nó?

Nếu bạn cần thư mục đó vĩnh viễn trong kho lưu trữ, nhưng thư mục đó phải rỗng, bạn có thể thêm junk_folder vào kho lưu trữ, sau đó tạo thuộc tính svn:ignore được đặt thành *. Điều đó sẽ bỏ qua bất cứ điều gì trong thư mục.

Đề xuất của tôi là đảm bảo rằng bất kỳ tập lệnh nào cần phải tạo junk_folder tạo tập lệnh nếu nó không tồn tại và không thêm nó vào kho lưu trữ của bạn. Bạn có thể sử dụng this pre-commit hook để giữ nó ra khỏi kho lưu trữ của bạn. Đó sẽ là cách tốt nhất để xử lý việc này. Không có lý do tại sao một thư mục trống có tên junk_folder phải nằm trong kho lưu trữ của bạn.

+0

Xin chào! Như trên, trong chỉnh sửa cho câu hỏi và tất cả các ý kiến. Subversion (TortoiseSVN) KHÔNG xóa một thư mục, nếu bạn bỏ qua nó và nếu nó đã được phiên bản. Bỏ qua mà không xóa chỉ xảy ra, nếu bạn bỏ qua không phải thư mục được phiên bản. Đối với tất cả các thư mục được phiên bản, bạn phải sử dụng "svn: ignore *" trên nội dung. Bởi vì, nếu bạn bỏ qua một thư mục, nó sẽ bị xóa khỏi kho lưu trữ (nhưng không phải là LWC) khi cam kết tiếp theo. – trejder

+0

@trejder Bạn đang nói rằng nếu có một thư mục được phiên bản gọi là 'junk_folder', và tôi thêm một thuộc tính' svn: ignore junk_folder' vào thư mục cha, Tortoise sẽ xóa 'junk_folder' mà không cần tôi làm gì? Tôi đoán tôi có thể thấy logic trong đó, nhưng nó nghe có vẻ nguy hiểm. –

+0

@trejder Chỉ cần kiểm tra tài liệu cho TortoiseSVN. Bạn không thể thêm tệp hoặc thư mục đã tồn tại vào danh sách bỏ qua. Tuy nhiên, bạn có thể chọn "Bỏ qua và Unversion tập tin" vào danh sách bỏ qua. –

2

Tôi đang sử dụng Eclipse Subversive và Tortoise SVN.

Tiếp cận của tôi cho vấn đề này là sử dụng hộp thoại thuộc tính từ Rùa (nhưng tôi nghĩ rằng Eclipse có tính năng tương tự)

Nếu bạn nhấp chuột phải vào một thư mục trong bản sao làm việc của bạn, ví dụ như 'tmp' hoặc 'bộ nhớ cache 'vv bạn chỉ có thể thêm thuộc tính' svn: ignore 'và đặt một thẻ hoang dã vào đó. Bạn cần phải sử dụng nút nâng cao để thêm nó bởi vì nó không phải là danh sách nhanh các thuộc tính cần thêm.

Tôi đang phát triển trang web chủ yếu trên Joomla và các trình cài đặt thường xuyên hoặc các thành phần khác để lại tệp ở những nơi mà tôi không muốn trong repo. Và như đã đề cập 'svn: ignore'ing những thư mục này bằng cách sử dụng phương thức' click right ignore 'có nghĩa là các thư mục này hoàn toàn bị loại trừ khỏi repo không phải là thứ bạn muốn - bạn muốn nội dung của các thư mục đó bị loại trừ hoặc đôi khi gia hạn nhất định.

sau khi nhận được lời khuyên từ nhiều stackoverflow Tôi đã đăng ký ngày hôm nay để chỉ để trả lời câu hỏi này vì vậy hy vọng nó sẽ giúp người - Tôi cố gắng để đính kèm ảnh chụp màn hình nhưng không đủ đại diện :(