tải lật đổ không thành công với không có sửa đổi như vậy


18

Tôi đang cố gắng học cách di chuyển một Subversion repo và đang gặp phải một vấn đề không có ý nghĩa với tôi. Tôi đã từng svndumpfiltertách ra một dự án con và đã loại bỏ một số tiền tố đường dẫn. Hàng trăm cam kết hiện đang nhập chính xác, nhưng sau đó tôi gặp phải lỗi sau:

<<< Started new transaction, based on original revision 19190
     * editing path : branches/features/DynamicSource ... done.
     * editing path : branches/features/DynamicSource/src/build.properties ... done.
     * editing path : branches/features/DynamicSource/src/client/default.htm ...done.
     * editing path : branches/features/DynamicSource/src/client/js/AdHocController.js ... done.
     * editing path : branches/features/DynamicSource/src/client/js/Report.js ... done.
svnadmin: E160006: No such revision 19098
     * adding path : branches/features/DynamicSource/src/client/js/Enums.js ...

OK, vì vậy tôi đi vào các tập tin dump để xem các phiên bản 19.190 và 19098. Trước hết, phiên bản 19.098 không tồn tại trong các tập tin dump và được nhập khẩu mà không có một vấn đề. Bản sửa đổi 19190 là một sự hợp nhất. Trong vòng 19190, đây là thông tin của tập tin cuối cùng, dường như gây ra sự cố:

Node-copyfrom-rev: 19100
Node-copyfrom-path: trunk/src/client/js/Enums.js
Text-copy-source-md5: 2db7f8d9c0ba4750d88ce0722731aad6
Node-path: branches/features/DynamicSource/src/client/js/Enums.js
Node-action: add
Text-copy-source-sha1: 8f930509f8dbc17c5e82cd40aa5a76454d3d812c
Node-kind: file
Content-length: 0

Một cách khó hiểu, bản sửa đổi 19100 KHÔNG tồn tại trong tệp được lọc này. Nhưng lỗi không liên quan đến năm 19100, nó liên quan đến năm 19098!

Tôi phải làm gì để tải tập tin này?

Cảm ơn!


Nếu một cái gì đó phức tạp ("kết xuất và bộ lọc" theo sau là "nhập") không thành công, trước tiên hãy thử một cái gì đó đơn giản hơn ("kết xuất", sau đó "nhập"). Tôi chỉ di chuyển toàn bộ repo, và điều đó thật dễ dàng.
Dirk Eddelbuettel

Cảm ơn, Dirk. Chúng tôi thực sự phải chia repo này, mặc dù.
Harlan

Có thể làm "Dump, Nhập. Giảm tay, Dump một lần nữa. Nhập Dump thứ hai." ?
Dirk Eddelbuettel

Trừ khi tôi thiếu một cái gì đó, tôi không nghĩ SVN hoạt động theo cách đó. Bạn phải giảm sử dụng tệp kết xuất và svndumpfilter. Và chúng tôi muốn giữ lịch sử, càng nhiều càng tốt.
Harlan

3
Tại sao không di chuyển đến git hoặc đồng bóng, và thoát khỏi di sản SVN trong cùng một bước?
vonbrand

Câu trả lời:


1

Tôi đã thực hiện kiểu chia tách này nhiều lần. Tôi nghĩ tất cả phụ thuộc vào cách bạn sử dụng bộ lọc và quá trình xử lý bạn thực hiện trên tệp kết xuất sau đó. Cá nhân, tôi cũng đã phải thay đổi người dùng svn, bên cạnh đường dẫn dự án và đánh số lại các sửa đổi. Để bạn có thể thấy những gì có thể được thực hiện, đây là một phần có liên quan trong kịch bản của tôi.

grp=$cust_group
usr=$cust_customer
svndumpfilter include $grp/$usr --drop-empty-revs --renumber-revs  <$repo_dump > $repo_dump.$usr
sed -e "s/Node-path: $grp\/$usr/Node-path: /" <$repo_dump.$usr >$repo_dump.$usr.fixed1
sed -e "s/Node-copyfrom-path: $grp\/$usr/Node-copyfrom-path: /" <$repo_dump.$usr.fixed1 >$repo_dump.$usr.fixed2
sed -e "/Node-path: /{ N; N; N; N; N; N; s/Node-path: \nNode-action: add\nNode-kind: dir\nProp-content-length: 10\nContent-length: 10\n\nPROPS-END//}" <$repo_dump.$usr.fixed2 >$repo_dump.$usr.fixed3
sed -e "/svn:author/{ N; N; s/svn:author\n.*\n$svn_usr_from/svn:author\nV $svn_usr_len\n$svn_usr_to/}" <$repo_dump.$usr.fixed3 >$repo_dump.$usr.fixed4
svnadmin load $repo_dir/$cust_group/$cust_customer --ignore-uuid < $repo_dump.$usr.fixed4

chown svn:svn -R $repo_dir/$cust_group/$cust_customer
#chown apache $repo_dir/$cust_group/$cust_customer/db/txn-current
#chown apache $repo_dir/$cust_group/$cust_customer/db/current
# apache is in svn group so the above 2 are not needed
chmod -R g+rw $repo_dir/$cust_group/$cust_customer

Điều xảy ra là trước tiên, tôi lọc ra những gì tôi cần, tôi bỏ các bản sửa đổi trống rỗng vì lý do rõ ràng và tôi đánh số lại chúng. Điều này cho phép sửa đổi tốt đẹp. Sau đó, tôi bỏ đường dẫn gốc của dự án mà trong trường hợp của tôi là ở dạng nhóm / khách hàng vì trong repo mới không có ý nghĩa (thay vào đó chính repo là nhóm / khách hàng trên đĩa) - đây là 2 sed đầu tiên

Sau đây, tôi loại bỏ việc nhập các thư mục không được đặt tên, một kết quả từ 2 sed trên cho thư mục nhóm và sau đó một cho thư mục nhóm / khách hàng thêm.

cuối cùng, tôi dụ dỗ tác giả thay đổi nó thành một cái mới. Điều này là một chút khó khăn quá vì nó yêu cầu cập nhật độ dài của định nghĩa tài sản.

Sau đó, tôi tải nó lên và sửa chữa các quyền hệ thống tập tin. Lưu ý 2 bình luận chowns cho apache, trong một số trường hợp bạn sẽ cần nó. Cuối cùng tôi đã kết thúc việc thêm apache vào nhóm svn.

Bây giờ, tôi chưa bao giờ hợp nhất trong cộng đồng SVN của mình nên tôi không bao giờ phải đối phó với họ cho việc chia tách. Trong trường hợp của bạn, tôi sẽ tưởng tượng rằng những gì xảy ra là đường dẫn sửa đổi nguồn không được nhập và đó là lý do tại sao nó không tìm thấy nó mặc dù lỗi đã phàn nàn về bản sửa đổi). Nguyên tắc nhỏ trong tệp nhập svn là mọi nội dung được đề cập tại một thời điểm phải được nhập trước khi được đề cập. Vì vậy, bạn có thể đã lọc ra thứ gì đó mà bạn không nên, mặc dù bạn muốn hoặc không cập nhật chính xác tệp kết xuất để phản ánh bất kỳ thay đổi nào khác mà bạn đã thực hiện.

Nếu bạn cung cấp cấu trúc có liên quan của repo ban đầu của bạn, bao gồm đường dẫn nguồn được hợp nhất, cộng với các cuộc gọi của bạn với các tham số, tôi thể gọi cho bạn những gì bạn đã bỏ lỡ. Tiền của tôi là nguồn gốc của sự hợp nhất.


1

Tôi đã sử dụng một công cụ tuyệt vời svndumpsanitizer . Vấn đề là cấu trúc kho lưu trữ lật đổ quá phức tạp. Khi svndumpfilter ở phiên bản 10, nó không có cách nào để biết liệu một nút mà người dùng muốn loại bỏ, sẽ được chuyển đến một vị trí mà anh ta muốn giữ trong phiên bản 113. Vì vậy, đó là điều duy nhất nó có thể làm - nó loại bỏ nút đó và tại phiên bản 113 craps ra vì nó đã loại bỏ dữ liệu mà nó cần.

Svndumpsanitizer hoạt động theo một cách khác. Nó quét các nút nhiều lần để khám phá những nút nào thực sự cần được giữ. Sau khi nó đã xác định các nút nào để giữ nó, chỉ ghi các nút này vào outfile. Cuối cùng - nếu cần - nó thêm một cam kết xóa bất kỳ nút không mong muốn nào phải được giữ để không phá vỡ kho lưu trữ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.