Làm thế nào để thay đổi bản sao làm việc lật đổ UUID?


13

Gần đây tôi đã cập nhật kho lưu trữ Subversion từ phiên bản 1.2.3 cũ lên 1.6.0 thông qua kết xuất / tải svnadmin . Tất cả các kho lưu trữ cũ đều sử dụng cùng một UUID (các kho lưu trữ được tạo bằng cách sao chép một kho lưu trữ mẫu). Tôi đã thay đổi UUID trên một vài kho lưu trữ mới thông qua svnadmin setuuid là duy nhất. Tôi không thể di dời các bản sao làm việc hiện tại của các kho lưu trữ đó vì các UUID khác nhau. Tôi biết về việc xuất bản sao làm việc và kiểm tra từ kho lưu trữ mới, nhưng tôi đã tự hỏi liệu có cách nào để thay đổi UUID của bản sao làm việc tại chỗ, giống như những gì svnadmin setuuid làm cho kho lưu trữ.

Câu trả lời:


3

Bạn cần chỉnh sửa tất cả các tệp 'mục' trong repo đã kéo của bạn. Nếu repo có nhiều thư mục, find + một tập lệnh sed sẽ thực hiện công việc ngắn.


17

Câu trả lời mới kể từ Subversion 1.7 định dạng bản sao làm việc. Bạn cần sqlite3tiện ích dòng lệnh.

Trong thư mục gốc của bản sao làm việc của bạn, giờ đây có một .svn/thư mục duy nhất có cơ sở dữ liệu SQLite. Bạn có thể truy vấn kho lưu trữ hiện tại UUIDđược biết đến với bản sao làm việc của bạn với:

$ sqlite3 .svn/wc.db 'select uuid from REPOSITORY where id=1'
b6dc3e6c-5320-4549-b231-c153d86d7525

Kết quả là, thay đổi UUIDcó thể được thực hiện với:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032" where id=1'

Tất nhiên, giữ một bản sao lưu của .svn/wc.dbtập tin trước khi gọi truy vấn cập nhật. Hầu như không có khả năng thực thể kho lưu trữ của bạn có id khác nhau hoặc có nhiều dòng trong bảng đó nhưng bạn có thể kiểm tra xem bạn có nhận được kết quả không mong muốn hay không.


+1 hoạt động hoàn hảo với một repo được di dời cũng đã thay đổi UUID
Amro

8

Đây là một lệnh thực hiện thủ thuật cho SVN 1.6 trở xuống:

find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;

Thay thế old-uuidnew-uuidvới các id thực tế.


1
+ 1 Cảm ơn về giải pháp. Điều này không làm việc cho các thư mục có không gian. "tìm. -type f -name mục -exec sed -i 's / old-uuid / new-uuid / g' {} \;" không có dấu ngoặc kép dường như làm việc.
Tommy

Sry cho việc hoại tử chủ đề này phương pháp này chỉ giúp tôi tiết kiệm rất nhiều thời gian .. cho những người khác đang thử nó, chỉ muốn thêm một ghi chú. Sed trên MACOX dường như cần một cách sử dụng hơi khác, bạn cần phải nói sed -i "" 's/old-uuid/new-uuid/' và nó hoạt động (chỉ là dấu ngoặc kép trống rỗng bổ sung) ( ref )
Karthik T

2

Câu trả lời của Yves Martin đã giúp ích rất nhiều cho chúng tôi về một số bản sao hoạt động với SVN 1.8, nhưng cuối cùng chúng tôi đã gặp phải trường hợp nó không hoạt động.

Chạy lệnh của Yves mà không có "nơi id = 1" hoạt động trong mọi trường hợp đối với chúng tôi:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032"'

Điều tra lý do tại sao điều này xảy ra, tôi phát hiện ra rằng nhiều UUID được lưu trữ khi di chuyển kho lưu trữ, trái với trực giác của Yves rằng điều này sẽ không bao giờ xảy ra.

Một mục nhập mới vào bảng REPOSITORY được thêm vào sau khi di chuyển thay vì cập nhật cái hiện có, lưu trữ id tăng với gốc kho lưu trữ mới và UUID của nó. Vì vậy, các trường hợp không hoạt động đúng là các bản sao đã được di chuyển trong quá khứ: Lệnh sẽ xuất hiện để hoạt động, nhưng chỉ UUID ban đầu được thay đổi, không phải là bản hiện đang được sử dụng.

Người ta có thể kiểm tra danh sách các gốc và UUID được lưu trữ trong một bản sao làm việc với lệnh này:

$ sqlite3 .svn/wc.db 'select id,uuid,root from REPOSITORY'

Cuối cùng tôi sẽ lưu ý rằng tôi phải sử dụng một tập hợp các trích dẫn khác nhau cho các tệp dòng lệnh / lô của Windows, như sau:

> sqlite3.exe .svn\wc.db "update REPOSITORY set uuid='1c0d1ec1-2326-0410-bef5-eb29cddfc032'"

Cảm ơn thông tin chi tiết khi một bản sao làm việc đã được di dời, tôi không biết về hành vi này
Yves Martin

1

Phần " Quản lý UUID lưu trữ " trong sách đậu đỏ svn có thể có câu trả lời mà bạn đang tìm kiếm.


Phần đó nói về UUID kho lưu trữ, không hoạt động UUID sao chép.
Ioan

@Ioan: Trích dẫn từ phần đó: Đối với những người sử dụng các phiên bản Subversion sớm hơn 1.5, các tác vụ này phức tạp hơn một chút. Bạn có thể thiết lập rõ ràng UUID của kho lưu trữ bằng cách đặt một tệp tệp kết xuất kho lưu trữ mang thông số UUID mới thông qua tải svnadmin --force-uuid REPOS-PATH - Đây có phải là thứ bạn cần không?
yasouser

1
Một lần nữa, không, tôi không nói về UUID kho lưu trữ , mà là UUID sao chép hoạt động ; bản sao làm việc giống như một kiểm tra.
Ioan

Bạn không thể thay đổi UUID bản sao hoạt động thành repo của máy chủ mà không cập nhật hoặc svn chuyển bản sao làm việc sang vị trí [mới / hiện tại] của repo.
yasouser
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.