2008-09-05 31 views
20

Tôi đã quản lý một kho lưu trữ SVN thành trạng thái xấu. Tôi đã di chuyển một thư mục và bây giờ tôi không thể cam kết nó ở vị trí mới của nó.Các thư mục "Phantom" trong một kho SVN

Theo như svn status có liên quan, thư mục không xác định (tên của thư mục là type).

 
$ svn status 
?  type 

Khi tôi cố thêm thư mục, máy chủ cho biết thư mục đã tồn tại.

 
$ svn add type 
svn: warning: 'type' is already under version control 

Nếu tôi cố gắng cập nhật thư mục, thư mục sẽ biến mất một lần nữa.

 
$ svn update type 
svn: '.' is not under version control 

Nếu tôi cố gắng cam kết, máy chủ than phiền rằng thư mục cũ của nó không còn tồn tại nữa.

 
$ svn commit type -m "Moving type" 
svn: Commit failed (details follow): 
svn: '/prior/trunk/src/nyu/prior/cvc3/theorem_prover/expression' path not found 

Để thêm vào bí ẩn, nội dung của thư mục được đánh dấu là đã sửa đổi.

 
$ svn status type 
A + type 
M + type/IntegerType.java 
M + type/BooleanType.java 
M + type/Type.java 
M + type/RationalRangeType.java 
M + type/RationalType.java 
M + type/IntegerRangeType.java 

Nếu tôi cố gắng cập nhật từ trong thư mục, tôi hiểu điều này.

 
$ cd type 
$ svn update 
svn: Two top-level reports with no target 

Cam kết từ trong thư mục cung cấp cùng một lỗi path not found như trên.

Điều gì đang diễn ra và cách khắc phục sự cố?

CHỈNH SỬA: @Rob Oxspring đã phát hiện ra tôi: Tôi có những thứ di chuyển quá tích cực trong Eclipse.

CẬP NHẬT: Tôi chấp nhận câu trả lời của "Rob Oxspring "không làm điều đó/chỉ cần bắt đầu lại" và nhận lời khuyên của anh ấy. Tôi vẫn muốn được quan tâm nếu có ai có thể cho tôi biết: (a) những thông báo lỗi trên có nghĩa là chính xác và (b) cách thực sự khắc phục sự cố.

Trả lời

14

Dường như với tôi như là type được tạo bởi một số lệnh sao chép nhận thức Subversion, sau đó được chuyển vào thư mục hiện tại bằng cách sử dụng bản sao Subversion-unaware. Theo kinh nghiệm của tôi, loại điều này thường xảy ra khi các hoạt động tái cấu trúc gói đã được xích lại với nhau trong Eclipse mà không có các cam kết ở giữa. Thông thường, Subversion không xử lý tốt khi bạn sao chép/di chuyển tệp/thư mục được sao chép/di chuyển cục bộ, mặc dù tôi nghĩ rằng phiên bản 1.5 có thể xử lý tốt hơn.

Để tránh điều này trong tương lai, hãy cam kết giữa các bước như vậy. Nếu bạn muốn ẩn các cam kết can thiệp sau đó tôi khuyên bạn nên thực hiện tái cấu trúc nhiều bước trên một chi nhánh và sau đó sáp nhập các thay đổi trở lại vào đường chính trong cam kết đơn mà bạn đã làm sau đó.

Nếu không quá nhiều công việc, tôi khuyên bạn nên quay lại bản sao làm việc sạch sẽ và thực hiện lại các thay đổi, cam kết sau mỗi bước. Nếu bạn hài lòng để mất lịch sử, tức là cho phép người mới IntegerType.java để không được liên kết với tất cả để người già IntegerType.java, sau đó bạn có thể có những phương pháp được đề xuất bởi BCS:

  • Di chuyển tập tin thay đổi của bạn vào một số vị trí tạm thời , tước ra bất kỳ thư mục .svn
  • Update làm việc của bạn sao chép vào trạng thái làm việc sạch
  • sao chép thay đổi của bạn trở lại nơi mà bạn muốn họ được
  • Commit bản sao kết quả làm việc
3

Bạn đã bắt đầu bằng cách chỉ sao chép/di chuyển thư mục có lệnh OS hoặc bạn bắt đầu với công cụ SVN? Nếu bạn chỉ cần sao chép các tập tin thông qua hệ điều hành, bạn vẫn sẽ có các thư mục ẩn chứa thông tin SVN trỏ đến vị trí cũ.

+2

Cảm ơn. Câu trả lời này chỉ khiến tôi nhận ra những gì tôi đã làm (mặc dù tôi đã sử dụng Eclipse để di chuyển thư mục. Bạn nghĩ Eclipse sẽ làm điều đó một cách chính xác. – Marvo

9

Cách dễ dàng để sửa nhiều lỗi SVN là di chuyển toàn bộ thư mục đi qua hệ điều hành, cập nhật để nhận một bản sao sạch khác và sau đó hợp nhất mọi thứ bạn đã thay đổi với một số công cụ khác, WinMerge hoặc tương tự.

Sau đó, bạn có thể làm bất cứ điều gì bạn đang cố gắng làm, nhưng làm điều đó một cách chính xác :).

0

Trải nghiệm của tôi là đôi khi bản sao cục bộ không đồng bộ với kho lưu trữ. Tôi thường giải quyết điều này bằng cách đi lên cây thư mục cục bộ, bắt đầu từ thư mục có vấn đề và cố gắng làm dọn dẹp và cập nhật từng bước.

1

Tôi đề xuất, để xóa (bên ngoài subversionso với rm hoặc tương tự), thư mục ở trên kiểm tra, và sau đó chạy svn cập nhật ở đó.

Tức là, nếu bạn không muốn nhận một bản sao làm việc hoàn toàn mới như những người khác đã đề xuất, đây có thể là phương pháp an toàn nhất.

0

Điều gì đã xảy ra là bạn đã thực hiện thanh toán thư mục, sau đó đã thêm nội dung vào thư mục này, nhưng trước khi bạn cam kết thay đổi, thư mục gốc đã bị di chuyển (hoặc bị xóa)) từ kho lưu trữ SVN.

Tất cả những gì bạn cần làm là chuyển khoản thanh toán hiện tại của mình sang vị trí mới trong kho SVN. Vì vậy, Giả sử bạn có một kiểm tra của các thư mục foo từ path/to/folder1/foo và foo đó đã được chuyển đến path/to/foo, bạn chỉ cần chạy:

$ svn switch path/to/foo 

Vậy là xong ... ;-)

+0

Điều này nghe có vẻ hợp lý Thật không may, tôi không có một bản sao làm việc bunged để kiểm tra nó ngay bây giờ ... ;-) –

1

Tôi vừa gặp vấn đề tương tự. Tôi đã sửa nó bằng cách xóa thư mục .svn khỏi thư mục bị ảnh hưởng.

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