2011-01-17 25 views
8

Tôi cố gắng để kiểm tra một kho subversion đầy đủ bao gồm tất cả các chi nhánh và các thẻ:Lỗi ra kho lưu trữ Subversion (svn: thư mục svn/tmp bạn có thể thiếu hoặc bị hỏng;)

svn co svn+ssh://path/to/project 

này chạy cho một thời gian, nhưng trong quá trình thanh toán của chi nhánh tôi nhận được lỗi sau:

svn: Your .svn/tmp directory may be missing or corrupt; run 'svn cleanup' and try again 
svn: Can't open file 'project\branches\BRANCH\source\java\com\bS\.svn\tmp\text-base\Event.java.svn-base': The system cannot find the path specified. 

Vì vậy, tôi đã cố gắng để kiểm tra các chi nhánh bằng tay bằng cách thực hiện:

svn co svn+ssh://path/to/project/branches/BRANCH 

Điều này chạy tiền phạt và tôi nhận được chi nhánh. Sau đó tôi có thể sao chép chi nhánh vào thư mục chi nhánh của dự án đầy đủ và tiếp tục thanh toán. Nhưng nó tiếp tục chạy vào vấn đề này trên các ngành khác.

Có ai có bất kỳ ý tưởng nào tại sao tôi không thể thanh toán chi nhánh như một phần của dự án tổng thể, nhưng tôi có thể tự mình kiểm tra?

+0

Bạn đã thử chạy dọn dẹp svn chưa? –

+0

Có, nó không giúp được gì. – DaveJohnston

+0

nhận xét có thể không liên quan đến lỗi: trừ khi bạn biết bạn đang làm gì (nghĩa là bạn biết cách tạo các lần kiểm tra cạn), bạn không nên kiểm tra cấp cao nhất của dự án với tất cả các nhánh và thẻ được bao gồm. Nếu dự án có một nghìn thẻ, thì thanh toán của bạn sẽ chứa một nghìn bản sao của dự án. Kiểm tra thân cây hoặc một nhánh cụ thể để thay thế. –

Trả lời

6

Ok, vì vậy tôi thực sự đã tìm thấy câu trả lời cho câu hỏi của riêng mình, ít nhất là giải pháp. Nó chỉ ra rằng nó là để làm với chiều dài của con đường. Trong câu hỏi của tôi ở trên, tôi đã chỉnh sửa tên đường dẫn để không đăng chi tiết mã của công ty, nhưng thực tế nó là một tệp có tên rất dài và nó nằm trong một thư mục khá sâu.

Khi tôi tự mình kiểm tra chi nhánh, tôi đã kiểm tra nó ra một thư mục cấp cao hơn trong ổ cứng của tôi và nó đang hoạt động. Tôi đã cố gắng tự mình kiểm tra chi nhánh vào thư mục nhánh mà tôi đã tạo cho dự án và nó cũng không thành công, vì vậy tôi đoán nó phải có thứ gì đó liên quan đến đường dẫn.

Tôi hiện đang kiểm tra toàn bộ dự án thành D: \ ProjectDir và mọi thứ dường như diễn ra suôn sẻ hơn rất nhiều. Tôi đoán có một giới hạn trong lật đổ với chiều dài của một con đường và do đó nó đã không để có được một số các tập tin cần thiết.

* Cập nhật: giới hạn là 255 ký tự. Nó bật ra rằng trong trường hợp của tôi con đường là 269 ký tự. Vì vậy, chỉ cần đi lên 1 cấp độ thư mục là đủ để giải quyết vấn đề.

+2

Bạn đang sử dụng Windows. Đúng? Độ dài đường dẫn tối đa là một vấn đề lớn của Windows. Tôi đã nhìn thấy phần mềm spam ẩn bằng cách sử dụng này. Windows Explorer và phần mềm chống phần mềm độc hại không thể xem tệp nhưng chúng đã ở đó. Điều trớ trêu là Windows CÓ THỂ xử lý các đường dẫn dài này và NTFS CÓ THỂ xử lý các đường dẫn này. Tuy nhiên, Windows Explorer và các tệp mở/đóng tệp cơ bản không thể. Bạn có thể thực hiện các kỹ thuật lập trình bằng cách sử dụng // đường dẫn cho phép bạn giải quyết những vấn đề này, nhưng không ai sử dụng chúng. Tại sao MS vẫn có giới hạn giả này trong Windows là dự đoán của bất kỳ ai. Đặc biệt từ .NET sử dụng tên đường dẫn dài. –

+0

Nó không phải là rất hữu ích bởi workaround đó, vì đôi khi bạn không có sang trọng để "đi lên một cấp". Tôi muốn giới thiệu giải pháp của Victor (được đăng sau) thay vào đó: sử dụng đường dẫn tuyệt đối trong liên kết thanh toán của bạn, chứ không phải đường dẫn tương đối –

7

Bạn có thể khắc phục sự cố này trên Windows bằng cách chỉ định đường dẫn đầy đủ đủ điều kiện trong tham số cho lệnh svn. Ví dụ thay vì

c:\dev> svn co http://repoman.example/svn/myproj/trunk myproj 

thử này

c:\dev> svn co http://repoman.example/svn/myproj/trunk c:\dev\myproj 

Đối với một số lý do path length limits only apply to relative paths.

+1

Điều này phù hợp với tôi. Điều tốt bởi vì tôi đã ở gốc của ổ đĩa, không có cách nào để rút ngắn con đường thanh toán. –

+0

LÀM VIỆC CHO TÔI QUÁ !!! Xin lỗi, tôi quá phấn khích –

2

Kiểm tra này: find . -iname '.svn' -exec mkdir {}/tmp \;

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