Làm cách nào để xuất (và sau đó nhập) kho lưu trữ Subversion?


82

Tôi sắp hoàn thành một dự án mà tôi đang sử dụng một nhà cung cấp SVN thương mại để lưu trữ mã nguồn. Máy chủ lưu trữ web mà khách hàng đã chọn cuối cùng bao gồm một kho lưu trữ như một phần của gói lưu trữ, vì vậy, bây giờ khi dự án đã kết thúc, tôi muốn chuyển kho lưu trữ đến máy chủ lưu trữ web của họ và ngừng tài khoản thương mại.

Tôi sẽ đi đâu để tới đó?

Câu trả lời:


69

Nếu bạn muốn di chuyển kho lưu trữ và lưu giữ lịch sử, có thể bạn sẽ cần quyền truy cập hệ thống tệp trên cả hai máy chủ. Giải pháp đơn giản nhất, nếu chương trình phụ trợ của bạn là FSFS (mặc định trên các phiên bản gần đây), là tạo một bản sao hệ thống tệp của toàn bộ thư mục kho lưu trữ.

Nếu bạn có chương trình phụ trợ Berkley DB, nếu bạn không chắc chắn phần phụ trợ của mình là gì hoặc nếu bạn đang thay đổi số phiên bản SVN, bạn sẽ muốn sử dụng svnadmin để kết xuất kho lưu trữ cũ của mình và tải nó vào kho. Việc sử dụng svnadmin dumpsẽ cung cấp cho bạn một bản sao lưu tệp duy nhất mà bạn có thể sao chép vào hệ thống mới. Sau đó, bạn có thể tạo và sử dụng kho lưu trữ mới (trống) svnadmin load, về cơ bản sẽ phát lại tất cả các cam kết cùng với siêu dữ liệu của nó (tác giả, dấu thời gian, v.v.).

Bạn có thể đọc thêm về quy trình kết xuất / tải tại đây:

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

Ngoài ra, nếu bạn làm vậy svnadmin load, hãy đảm bảo rằng bạn sử dụng --force-uuidtùy chọn, nếu không mọi người sẽ gặp sự cố khi chuyển sang kho lưu trữ mới. Subversion sử dụng UUID để xác định kho lưu trữ nội bộ và nó sẽ không cho phép bạn chuyển một bản sao đang hoạt động sang một kho lưu trữ khác.

Nếu bạn không có quyền truy cập hệ thống tệp, có thể có các tùy chọn của bên thứ ba khác (hoặc bạn có thể viết một cái gì đó) để giúp bạn di chuyển: về cơ bản bạn phải sử dụng nhật ký svn để phát lại từng bản sửa đổi trên kho lưu trữ mới và rồi sửa siêu dữ liệu sau đó. Bạn sẽ cần có các tập lệnh hook pre-revprop-change và post-revprop-change hook để thực hiện việc này, loại này giả định quyền truy cập hệ thống tệp, vì vậy YMMV. Hoặc, nếu bạn không muốn giữ lại lịch sử, bạn có thể sử dụng bản sao làm việc của mình để nhập vào kho lưu trữ mới. Nhưng hy vọng đây không phải là trường hợp.


28
Kể từ ngày 1.7, giờ đây bạn có thể svnrdump, không yêu cầu quyền quản trị viên trên kho lưu trữ từ xa. Lệnh là dễ dàng: svnrdump dump https//remote/svn/trunk > repos.dump. Trong hầu hết các trường hợp, lệnh cũng hoạt động với SVN 1.6, nhưng có thể có một số vấn đề, hãy xem tài liệu. Hoạt động cả trong * nix và Windows.
Abel

34

rsvndump rất hiệu quả đối với tôi khi di chuyển kho lưu trữ từ svnrepository.com sang máy chủ Ubuntu mà tôi kiểm soát.

Cách cài đặt và sử dụng rsvndump trên Ubuntu:

  1. Cài đặt các phần phụ thuộc bị thiếu (thư viện "APR" và Subversion)

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. Cài đặt rsvndump

    wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
    tar xvfz rsvndump-0.5.5.tar.gz
    cd rsvndump-0.5.5
    ./configure
    make
    sudo make install
    
  3. Kết xuất kho lưu trữ SVN từ xa vào một tệp cục bộ

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  4. Tạo một kho lưu trữ mới và tải vào tệp kết xuất cục bộ

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    

7
Sau đó, để di chuyển một bản sao làm việc hiện có: svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
tkdave

Chính xác thì tùy chọn force-uuid là gì? Nó có sao chép các quyền của thư mục từ nguồn hay thứ gì khác không?
Montag451

1
UUID là "số nhận dạng duy nhất chung" của kho lưu trữ. Bạn không thể chuyển sang kho lưu trữ đã di dời trừ khi UUID khớp với nhau. Lưu ý, bạn cũng có thể đặt UUID sau này bằng lệnh svnadmin setuuid.
tkdave


9

Trích từ Blog của tôi -Ghi chú-cho-tôi :

Bây giờ bạn có thể nhập một tệp kết xuất, ví dụ nếu bạn đang di chuyển giữa các máy / phiên bản subversion. Ví dụ: nếu tôi đã tạo một tệp kết xuất từ ​​kho lưu trữ nguồn và tải nó vào kho lưu trữ mới như được hiển thị bên dưới.

Các lệnh cho hệ thống giống Unix (từ thiết bị đầu cuối):

svnadmin dump /path/to/your/old/repo > backup.dump
svnadmin load /path/to/your/new/repo < backup.dump.dmp

Các lệnh cho hệ thống Microsoft Windows (từ cmd shell):

svnadmin dump C:\path\to\your\old\repo > backup.dump
svnadmin load C:\path\to\your\old\repo < backup.dump

5

Công cụ để làm điều đó sẽ là

svnadmin dump

Nhưng để điều này hoạt động, bạn cần quyền truy cập hệ thống tệp vào kho lưu trữ. Và khi bạn có điều đó (và với điều kiện là kho lưu trữ ở định dạng FSFS), bạn chỉ có thể sao chép kho lưu trữ đó sang vị trí mới của nó (nếu nó ở định dạng BDB, nên kết xuất / tải).

Nếu bạn không có quyền truy cập hệ thống tệp, bạn sẽ phải yêu cầu nhà cung cấp kho lưu trữ cung cấp kết xuất cho bạn (và yêu cầu họ xóa kho lưu trữ của họ - và hy vọng họ tuân thủ)


5

Nếu bạn không có quyền truy cập tệp vào kho lưu trữ, tôi muốn rsvndump (kết xuất kho lưu trữ Subversion từ xa) để tạo tệp kết xuất.


Tôi đã học được điều này một cách khó khăn hôm nay hóa ra các svns mới nghĩ rằng các repo cũ bị hỏng. Sử dụng bãi rác đã giải quyết được điều này.
Owl

4

Về cơ bản, có rất nhiều cách để hoàn thành nhiệm vụ. Chủ đề được đề cập sâu trong SVNBook | Di chuyển dữ liệu kho lưu trữ đến nơi khác , vì vậy tôi khuyên bạn nên đọc phần của cuốn sách.

Dưới đây là mô tả ngắn gọn về các tùy chọn của bạn:

  • Nó phụ thuộc vào môi trường của bạn, nhưng có một cơ hội lớn là bạn có thể chỉ cần sao chép kho lưu trữ sang máy chủ mới và nó sẽ hoạt động. Bạn phải sửa đổi các tập lệnh móc kho lưu trữ sau khi sao chép kho để đảm bảo rằng chúng đang hoạt động như bạn mong đợi.

  • Bạn có thể sử dụng svnadmin dumpsvnadmin loadcác lệnh để, ehm, tạo kết xuất đầy đủ và sau đó tải nó vào một kho lưu trữ khác trên máy chủ khác. Bạn sẽ cần svnadmin createmột kho lưu trữ sạch mới để tải kết xuất vào đó. Hãy nhớ rằng cách tiếp cận chỉ xử lý lịch sử kho lưu trữ và không di chuyển các tập lệnh móc và tệp cấu hình kho lưu trữ ! Ngoài ra, bạn phải có quyền truy cập hệ thống tệp đọc vào kho lưu trữ ban đầu để kết xuất nó.

  • Kể từ Subversion 1.7, svnrdumpcông cụ đã có sẵn. Nói chung, nó bắt chước svnadmin dumpsvnadmin loadchức năng, nhưng hoạt động từ xa. Bạn không bắt buộc phải có quyền truy cập hệ thống tệp đọc / ghi vào các kho gốc và kho mục tiêu vì công cụ hoạt động từ xa như máy khách Subversion, ví dụ như qua giao thức HTTPS. Vì vậy, bạn cần có quyền truy cập đọc vào kho lưu trữ gốc và đọc / ghi vào kho mục tiêu.

  • Một tùy chọn khác là sử dụng svnadmin hotcopylệnh. Lệnh này chủ yếu được sử dụng cho mục đích sao lưu, nó tạo ra bản sao đầy đủ của kho lưu trữ bao gồm các tập lệnh cấu hình và hook. Sau đó, bạn có thể di chuyển kho lưu trữ hotcopied sang một máy chủ khác.


4

Bạn cũng có thể sử dụng svnadmin hotcopylệnh:

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

Nó cần một bản sao lưu đầy đủ từ kho lưu trữ, bao gồm tất cả các móc, tệp cấu hình, v.v.

Xem thêm tại Sách SVN


1
thực ra, đó là bản ghi nóng của svnADMIN. Có nghĩa là điều này cũng sẽ yêu cầu quyền truy cập hệ thống tệp của kho lưu trữ!
pilif 08/09/08


3

Tôi đã tìm thấy một bài viết về cách di chuyển kho lưu trữ svn từ một dịch vụ lưu trữ sang một dịch vụ lưu trữ khác và cách thực hiện sao lưu cục bộ:

  1. Xác định nơi bạn sẽ lưu kho của mình:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. Bây giờ, hãy tạo một kho lưu trữ svn trống với svnadmin create $MYREPO
  3. Tạo một tệp hook và làm cho nó có thể thực thi được:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. Bây giờ chúng ta có thể bắt đầu nhập kho lưu trữ với svnsync, điều đó sẽ khởi tạo một kho lưu trữ đích để đồng bộ hóa từ một kho lưu trữ khác:

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. Và bước hoàn thiện để chuyển tất cả các bản sửa đổi đang chờ xử lý đến đích từ nguồn mà nó đã được khởi tạo:

    svnsync sync file://$MYREPO
    

Bây giờ bạn có một kho lưu trữ svn cục bộ trong ~/repothư mục.

Nguồn:


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.