2010-07-21 8 views
39

Tôi gặp vấn đề có vẻ rất đơn giản nhưng khó giải quyết. Tôi nhận được lỗi được đề cập sau khi xóa thư mục. Tôi không tìm được giải pháp nào để giải quyết xung đột. Đây là cách nó xảy ra:SVN cam kết không thành công: Danh bạ đã lỗi thời

 
svn add dir 
svn add dir/file1 
svn commit 
svn add dir/file2 
svn commit 
svn delete dir 
svn commit 
--> commit failed 
--> Directory '/dir' is out of date 

Giải pháp rõ ràng 'svn update sẽ không hoạt động. Sau khi cập nhật svn phạm tiếp theo không thành công với:

 
Commit failed 
Directory '/dir' remains in conflict. 

Trong khi đó tôi tìm thấy một giải pháp nhưng nó là một chút rườm rà:

 
svn resolve --accept working dir 
svn commit --> still fails 
svn update 
svn commit --> still fails 
svn resolve --accept working dir 
svn commit --> NO PROBLEM! 

Hai câu hỏi: - bất cứ ai có thể giải thích hành vi này vì tôi rất tò mò về nó - vấn đề này xảy ra trong một kịch bản perl trong một tình huống phức tạp hơn rất nhiều. Bất cứ ai có thể cho tôi một giải pháp đơn giản với là 'doable' trong kịch bản perl?

Trả lời

58

Chỉ cần thực hiện svn update và sau đó cam kết của bạn sẽ hoạt động.

+2

đánh bại tôi vào nó. Và để thêm vào đó, bản cập nhật phải là một phần của quy trình làm việc bình thường của bạn. Tôi thường cập nhật trước khi cam kết. – hometoast

+0

Đó là một trong những giải pháp hiển nhiên mà tôi đã nghĩ đến.Nhưng sau khi cập nhật svn tôi nhận được: svn commit -> '\ dir' vẫn còn trong xung đột –

+0

nhưng 'svn update' loại bỏ các thay đổi trong thư mục làm việc của bạn, vì vậy tất cả công việc của bạn sẽ bị xóa và không có gì để cam kết. Tôi có đúng không? – VextoR

1

Bạn chỉ cần cập nhật và sau đó cam kết

+1

Đó là một trong những giải pháp hiển nhiên mà tôi đã nghĩ đến. Nhưng sau khi cập nhật svn tôi nhận được: svn commit -> '\ dir' vẫn còn trong xung đột –

1

Các bạn đã thử svn up dir trước khi thực hiện cam kết trận chung kết?

+1

Đó là một trong những giải pháp rõ ràng mà tôi đã nghĩ đến. Nhưng sau khi cập nhật svn tôi nhận được: svn commit -> '\ dir' vẫn còn xung đột –

57

Nếu tôi hiểu lật đổ một cách chính xác, vấn đề là thế này:

Subversion theo dõi phiên bản hiện tại cho mỗi tập tin và thư mục riêng. Bất cứ khi nào thay đổi tệp được cam kết, sửa đổi thư mục mẹ thay đổi trong repo, nhưng bản sao làm việc của bạn vẫn có thư mục trong bản sửa đổi cũ của nó.

Vì vậy, trong kịch bản của bạn sau khi thêm tệp, thư mục mẹ trong repo có bản sửa đổi cao hơn bản sao làm việc của bạn. Khi bạn cố xóa thư mục mà bạn đang làm việc trên một phiên bản lỗi thời.

Để giải quyết:

Do một svn update sau khi thêm các tập tin, nhưng trước khi xóa thư mục này.

Nói chung nếu bạn không muốn kéo các thay đổi của người khác, bạn có thể giới hạn bản cập nhật vào chính thư mục: svn up --depth empty dir.

+0

Rất cám ơn vì điều đó, @Stephen Friedrich - chỉ muốn lưu ý rằng khi thực hiện 'svn mv' của toàn bộ thư mục (đó là điều mang lại cho tôi cho bài đăng này), việc thêm và xóa xảy ra trong một bước; và tiếc là có vẻ như "làm một cập nhật svn sau khi thêm tập tin, nhưng trước khi xóa thư mục" không thể được áp dụng trong trường hợp đó. Tuy nhiên, những gì làm việc cho tôi là tự xóa thư mục 'cũ' (với 'rm -rf') và sau đó commit lại. Chúc mừng! – sdaau

+0

Tôi sẽ sẵn sàng upvote câu trả lời này để đưa nó lên hàng đầu. – Brandon

+0

@Stephen Friedrich, hãy gọi nếu bạn xảy ra gần Bergamo, Ý, tôi nợ bạn một bữa tối ... –

0

Để khắc phục sự cố này, tôi đã sử dụng 'svn revert' rồi thực hiện lại cam kết, điều này sẽ loại bỏ nội dung trong đó sau đó xóa 'svn delete' và commit lại. Tôi đã nhận được vấn đề này cố gắng để đổi tên một thư mục nhưng hy vọng điều này sẽ làm việc.

0

Thực hiện cập nhật, dọn dẹp và sau đó cam kết.

0

vấn đề tương tự tôi phải đối mặt với không gian làm việc tươi:

$ svn delete dir/file 
D   dir/file 
$ svn ci -m "comment1" 
Deleting  dir/file 
$ svn delete dir/ 
D   dir 
$ svn ci -m "comment2" 
Deleting  dir 
svn: Commit failed (details follow): 
svn: Item 'dir' is out of date 

Để giải quyết vấn đề tôi lại cập nhật các nguồn khác nhau và sử dụng 'xóa URL' lệnh:

$ svn delete --force https://server/path.../dir 
$ svn update