Thay đổi URL kho lưu trữ SVN


116

Cấu trúc SVN hiện tại của tôi:

Path: .
URL: svn://someaddress.com.tr/project
Repository Root: svn://someaddress.com.tr
Repository UUID: -------------------------------------
Revision: 10297
Node Kind: directory
Schedule: normal
Last Changed Author: ----
Last Changed Rev: 9812
Last Changed Date: 2010-12-20 17:38:48 +0100 (Mon, 20 Dec 2010)

Nhưng dự án của chúng tôi (do đó dịch vụ SVN) sẽ hoạt động tốt sub.someaddress.com.trthay vì someaddress.com.tr(someaddress.com.tr sẽ sớm được chuyển hướng đến một nơi khác).

Vì nó là máy chủ phát triển, tôi không thể chắc chắn về những gì phải làm. Tôi sẽ cần sử dụng svn switchhay svn switch --relocate? Ngoài ra, tôi sẽ cần chuyển svn root someaddress.com.tr hoặc nhánh dự án someaddress.com.tr/project ?

Câu trả lời:


208

Giả sử rằng máy chủ Apache Subversion sẽ được chuyển sang bí danh DNS mới này sub.someaddress.com.tr::

  • Với Subversion 1.7 trở lên, hãy sử dụng svn relocate. Relocate được sử dụng khi vị trí của máy chủ SVN thay đổi. switchchỉ được sử dụng nếu bạn muốn thay đổi bản sao làm việc cục bộ của mình sang một nhánh khác hoặc một đường dẫn khác. Nếu sử dụng TortoiseSVN, bạn có thể làm theo hướng dẫn từ Hướng dẫn sử dụng TortoiseSVN . Nếu sử dụng giao diện dòng lệnh SVN, hãy tham khảo phần này trong tài liệu của SVN . Lệnh sẽ giống như sau:

    svn relocate svn://sub.someaddress.com.tr/project

  • Tiếp tục sử dụng /projectvới điều kiện rằng nội dung thực tế của kho lưu trữ của bạn có thể sẽ không thay đổi.

Lưu ý: svn relocatekhông có sẵn trước phiên bản 1.7 (nhờ ColinM cung cấp thông tin). Trong các phiên bản cũ hơn, bạn sẽ sử dụng:

    svn switch --relocate OLD NEW

36
svn di dời không khả dụng trước 1.7. Đối với trước 1.7 bạn sẽ sử dụngsvn switch --relocate OLD NEW
ColinM

Các liên kết TortoiseSVN thêm rất hữu ích, cảm ơn vì điều đó
MOnsDaR

Không biết về switchlệnh này, tất cả tài liệu tôi tìm thấy trên mạng đều dành cho các phiên bản mới hơn.
Dustin Cook

Điều này rất hữu ích khi tôi cần di chuyển từ URL + ssh sang không phải SSH hoặc ngược lại, ví dụ: svn switch - định vị lại svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_branch_. Cách cuối cùng đặc biệt hữu ích nếu bạn thực hiện kiểm tra tự động dưới dạng svn + ssh trên một số nút sử dụng Jenkins API và một số trong số chúng (các nút Windows) không có SSH, nhưng bạn cần đăng nhập vào máy xây dựng và "cập nhật svn" theo cách thủ công để kiểm tra một số sửa chữa nhanh.
Alexander Samoylov

11

Ghi chú URL trước và sau có thể giúp bạn yên tâm:

svn info | grep URL

  URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
  Relative URL: (...doesn't matter...)

Và việc kiểm tra phiên bản của bạn (> 1.7) để đảm bảo rằng, svn relocatesử dụng là thứ phù hợp:

svn --version

Cuối cùng, thêm vào phần trên, nếu thay đổi url kho lưu trữ của bạn cũng liên quan đến thay đổi giao thức, bạn có thể cần phải nêu rõ url trước sau (cũng xem tại đây )

svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
    https://svngate.mycompany.org/svn/repos/trunk/DataPortal

Tất nhiên, tất cả trong một dòng duy nhất. Sau đó, hãy có cảm giác tốt, tất cả đều diễn ra suôn sẻ:

svn info | grep URL:

Nếu bạn cảm thấy thích nó, hãy tự đảm bảo hơn một chút, URL repo svn mới đã được kết nối và hoạt động:

svn status --show-updates
svn diff

5

Trong trường hợp của tôi, svn relocatelệnh (cũng như svn switch --relocate) không thành công vì một số lý do (có thể repo không được di chuyển đúng cách hoặc một cái gì đó khác). Tôi gặp phải lỗi này:

$ svn relocate NEW_SERVER
svn: E195009: The repository at 'NEW_SERVER' has uuid 'e7500204-160a-403c-b4b6-6bc4f25883ea', but the WC has '3a8c444c-5998-40fb-8cb3-409b74712e46'

Tôi không muốn tải lại toàn bộ kho lưu trữ, vì vậy tôi đã tìm thấy một giải pháp. Nó hoạt động trong trường hợp của tôi, nhưng nhìn chung tôi có thể tưởng tượng rất nhiều thứ có thể bị hỏng (vì vậy hãy sao lưu bản sao làm việc của bạn hoặc sẵn sàng kiểm tra lại toàn bộ repo nếu có sự cố).

Địa chỉ repo và UUID của nó được lưu trong .svn/wc.dbtệp cơ sở dữ liệu SQLite trong bản sao làm việc của bạn. Chỉ cần mở cơ sở dữ liệu (ví dụ: trong Trình duyệt SQLite), duyệt bảng REPOSITORY và thay đổirootuuid giá trị cột và giá trị mới. Bạn có thể tìm thấy UUID của repo mới bằng cách phát hành svn info NEW_SERVER.

Một lần nữa, hãy coi đây là phương pháp cuối cùng.


@IgorGanapolsky: Bạn có thể nói cụ thể hơn được không?
Martin Pecka

1
Nếu bạn đọc kỹ bài đăng của tôi, tôi không khuyên bạn nên chạy bất kỳ lệnh nào. Tôi đề nghị chỉnh sửa SQLite DB.
Martin Pecka

Nhưng việc chỉnh sửa SQLite DB liên quan đến việc chạy các lệnh. Các lệnh SQL.
Peter Flynn,

Hóa ra bạn không thể sử dụng sqlite; bạn phải sử dụng sqlitebrowser theo đề xuất. Kỳ dị.
Peter Flynn,

1

Nếu Bạn muốn cam kết với một Repo trống mới, Bạn có thể kiểm tra Repo trống mới và cam kết với repo từ xa mới.
chekout một Repo trống mới sẽ không xóa các tệp cục bộ của bạn.
hãy thử điều này: ví dụ: url repo từ xa: https://example.com/SVNTest cd [YOUR PROJECT PATH] rm -rf .svn svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME] svn add ./* svn ci -m"changed repo url"


Điều này sẽ làm gì lịch sử?
MattBianco
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.