Làm thế nào để di chuyển / chuyển đổi từ SVN sang Mercurial (hg) trên Windows


120

Tôi đang tìm một công cụ để di chuyển một vài kho lưu trữ SVN sang Mercurial, với lịch sử, nhãn, v.v.

Tôi đang sử dụng TortoiseHg (Windows x32), vì vậy ConvertExtensions bị loại bỏ. Có một số thông tin về cách thực hiện quá trình này trên hộp Linux ( hgsvn ), nhưng tôi không có sẵn máy Linux.

Tôi có thể sử dụng các tập lệnh Python đó trên Windows không? Nếu vậy tôi cần phải làm gì? Hoặc, tôi có thể sử dụng những công cụ nào khác để thực hiện quá trình này?

Về cơ bản, làm cách nào để chuyển đổi một dự án SVN sang Mercurial?

Câu trả lời:


93

Tôi chỉ phải tự mình giải quyết vấn đề này. Tôi có một máy windows XP với một máy chủ windows riêng biệt đang lưu trữ VisualSVN Server .

Tôi cũng đã cài đặt TortoiseHG cũng như Máy khách dòng lệnh CollabNet Subversion .

<Enable Convert Extension w/ Tortoise Hg 2>

Rất cảm ơn bgever đã chỉ ra trong các nhận xét rằng với TortoiseHg 2.0, việc bật tiện ích mở rộng chuyển đổi dễ dàng hơn bao giờ hết. Như anh ấy nói

Với TortoiseHG 2.0, điều này đã trở nên đơn giản hơn nhiều: Khởi động Bàn làm việc TortoiseHG từ menu Bắt đầu. Chọn Tệp -> Cài đặt. Chọn Tiện ích mở rộng từ danh sách. Đánh dấu vào hộp kiểm 'chuyển đổi' và nhấp vào OK. Đó là nó! Không cần phải cố gắng tạo tệp cấu hình nữa và tìm kiếm tệp đó trong hệ thống tệp. - bgever ngày 11 tháng 3 lúc 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Để chuyển đổi một kho lưu trữ từ SVN sang HG, tôi đã làm theo các bước sau:

1) Mở C: \ Program Files \ TortoiseHg \ Mercurial.ini

BIÊN TẬP

FYI - Tortoise Hg đã di chuyển tệp này sang

  • XP trở lên - C: \ Documents and Settings \ USERNAME \ Mercurial.ini
  • Vista trở lên - C: \ Users \ USERNAME \ Mercurial.ini

Tệp đó hầu như sẽ trống và bạn sẽ chỉ liệt kê những gì bạn muốn ghi đè ở đó. Nếu đó là những gì bạn có, chỉ cần thêm hai dòng sau vào cuối tệp:

[extensions]
convert =

2) Tìm kiếm dòng bắt đầu bằng

[phần mở rộng]

3) Bên dưới nó, bạn sẽ thấy một danh sách các từ khóa, được nhận xét bằng dấu chấm phẩy (;) trên mỗi dòng

4) Tìm dòng cho biết

; chuyển đổi =

và xóa dấu chấm phẩy để nó đọc

convert =

</Enable Convert Extension Manually>

5) Mở dấu nhắc lệnh và điều hướng đến thư mục mà bạn muốn tạo thư mục hg mới (quá trình này sẽ tạo một thư mục mới có tên là yourvnreponame-hg trong thư mục mở dấu nhắc lệnh).

6) Sử dụng lệnh này

hg chuyển đổi tệp: /// y: / yourvnreponame

Tôi nhận thấy rằng công cụ chuyển đổi có thể gặp vấn đề với các kho lưu trữ được nối mạng, vì vậy tôi đã phải ánh xạ một ổ đĩa tới nó, nhưng công cụ này hoạt động tốt với tôi.


Chọn câu trả lời cho câu hỏi này thật khó. evilbloodydemon đã đúng khi ông nhận xét trong câu trả lời của mình để chỉnh sửa cấu hình để cho phép gia hạn chuyển đổi, nhưng câu trả lời này là rõ ràng hơn và chính xác
David Lay

1
Tôi chỉ muốn đề cập rằng tôi đã thử nghiệm điều này mà không có ứng dụng khách dòng lệnh SVN và nó cũng hoạt động. Bạn thậm chí không cần một máy chủ SVN hoạt động để làm điều này, chỉ cần truy cập vào đường dẫn tệp kho lưu trữ.
Michael La Voie

Điều này hoạt động tốt với tôi với Mercurial V1.4.3. Kho svn 1 tuổi được chuyển đổi rất nhanh với toàn bộ lịch sử còn nguyên vẹn. Cảm ơn nhiều!
Jonathan Webb

1
Chỉ cần thêm - tệp ini không được tạo trên cài đặt TortoiseHG mặc định. Trước tiên, bạn cần áp dụng / lưu một số cài đặt hoặc bắt đầu với tệp trống nếu bạn biết mình đang làm gì.
Ahmad

9
Với TortoiseHG 2.0, điều này đã được thực hiện đơn giản hơn nhiều: Khởi động Bàn làm việc TortoiseHG từ menu Bắt đầu. Chọn Tệp -> Cài đặt. Chọn Tiện ích mở rộng từ danh sách. Đánh dấu vào hộp kiểm 'chuyển đổi' và nhấp vào OK. Đó là nó! Không cần phải cố gắng tạo tệp cấu hình nữa và tìm kiếm tệp đó trong hệ thống tệp.
Bart Verkoeijen

8
  1. khởi động máy chủ svn trên localhost
  2. hg chuyển đổi svn: // localhost / your_repo
  3. xong, bởi vì các ràng buộc svn chỉ cần thiết cho giao thức tệp: //

Nopes, không phải nhị phân thương mại cho win32 hoặc TortoiseHg đi kèm với phần mở rộng chuyển đổi, vì vậy "hg convert" thậm chí không phải là lệnh hợp lệ trên win32.
David Lay

1
Tôi đã thử sử dụng svn: // thay vì tệp: // nhưng nó tiếp tục yêu cầu các liên kết Python
fglez

Sử dụng svn: // thay vì tệp: // phù hợp với tôi mà không có ràng buộc Python. Để khởi động máy chủ svn lệnh là: svnserve -r <đường dẫn đến thư mục gốc repo> -d
Petter Wigle

7

2
Tôi biết, đó là điều đầu tiên tôi vấp phải, nhưng trích dẫn: "Lưu ý rằng bạn không thể làm điều này với các tệp nhị phân Win32 Mercurial - không có cách nào để cài đặt các liên kết Subversion vào thư viện Python tích hợp của nó" Tôi đang sử dụng TortoiseHg ...
David Lay

Sử dụng đĩa CD trực tuyến Linux hay máy ảo?
richq

Đây là câu trả lời hoàn toàn chính xác. Tôi đã thực hiện việc này chỉ bằng cách sử dụng phần mở rộng hg convert ( selenic.com/mercurial/wiki/… ) và sử dụng giao thức tệp cho kho lưu trữ SVN không có phần mở rộng pysvn: hg convert file: /// X: / HOME / REPOS / mysvnrep newhgrep
van

5

Để chuyển đổi SVN Repo thành HG Repo VÀ sao chép nó sang một máy chủ khác, bạn sẽ cần một số thứ.

  1. Đã cài đặt TortoiseHG. (Kiểm tra xem phiên bản nào hiện đang được sử dụng)
  2. Đã cài đặt Python. (Kiểm tra xem phiên bản nào hiện đang được sử dụng)
  3. Mô-đun Python (bạn có thể tìm thấy chúng tại http://pysvn.tigris.org/project_downloads.html )
  4. Bạn sẽ cần thêm convertphần mở rộng vào Tortoise. Khởi động Bàn làm việc TortoiseHG từ menu Bắt đầu. Chọn File -> Settings. Chọn Extensionstừ danh sách. Đánh dấu vào converthộp kiểm và nhấp vào OK.

Đầu tiên là chuyển đổi…

  1. Tốt nhất là ánh xạ Thư mục mà SVN Repo hiện tại có trong máy tính bạn đang làm việc. (tức là \\server\folder Không ánh xạ chính thư mục SVN Repo. Ánh xạ thư mục ngay phía trên nó) Cung cấp cho ổ đĩa được ánh xạ một ký tự, nhưY:\
  2. Mở Command Prompt và nhập: CD /D Y:\
  3. Tại dòng Y:\nhắc: hg convert y:/RepoName (sử dụng tên của Repo hiện tại) Hãy cẩn thận với các dấu gạch chéo về phía trước và phía sau. Một trong lệnh là một dấu gạch chéo. Ngoài ra, nếu tên có khoảng trắng, hãy đặt tên trong dấu ngoặc kép. (tức là Y:/"My Repo folder")
  4. Bây giờ nó sẽ chạy và sẽ tạo một thư mục khác cùng với thư mục cũ. Và một thư mục hg nên ở bên trong. NÓ SẼ KHÔNG BAN ĐẦU VÀ KHÔNG BẮT ĐẦU!
  5. Quá trình chuyển đổi hoàn tất.

Thứ hai nhân bản…

  1. Mở TortoiseHG Workbench. Đi đếnFile -> Clone Repository
  2. Nguồn: Nhập đường dẫn đầy đủ của repo đã chuyển đổi.
  3. Đích: Nhập đường dẫn đầy đủ của nơi bạn muốn sao chép repo. Không cần thiết phải tạo một thư mục tại đích mới vì quá trình nhân bản sẽ tạo và khởi tạo nó.
  4. Thêm quyền vào thư mục nhân bản mới.
  5. Bạn đã hoàn tất!!!

Xin chào, có thể giải thích lý do tại sao bạn không nên initlưu trữ đầu tiên không?
Ben Page

3

Không ai là không đề cập đến hgsubversion ( Wiki mở rộng ), có thể làm điều đó mà hầu như không đau đầu (không bao gồm các trường hợp hiếm và cây cụ thể).

Chỉ cần thêm tiện ích mở rộng, kích hoạt nó và hg clone SVN_REPOvào repo thương mại cục bộ


1

Đây là trong Câu hỏi thường gặp về TortoiseHg :

Làm cách nào tôi có thể chuyển đổi kho lưu trữ chuyển đổi sang Mercurial?

Bạn phải cài đặt các công cụ dòng lệnh svn-win32-1.4.6, sau đó thêm chúng vào đường dẫn của bạn. Sau đó, bạn phải bật tiện ích mở rộng chuyển đổi. Tại thời điểm này, bạn sẽ có thể sử dụng hg convertlệnh '' để thực hiện chuyển đổi. Vui lòng chuyển các vấn đề / thắc mắc về tiện ích mở rộng chuyển đổi tới danh sách gửi thư Mercurial hoặc #mercurialvào irc.freenode.net.

Vì vậy, nó dường như là có thể - tôi đang sử dụng Linux nên tôi chưa thử.


0

Tôi vừa chuyển đổi một repo SVN từ xa với HTTP auth thành một repo Mercurial và để tôi nói cho bạn biết, không có nhiều tài liệu về cách thực hiện việc này. Tôi phải tải xuống nguồn Mercurial và cài đặt nó độc lập, sử dụng gói nguồn, theo cách đó các ràng buộc SVN sẽ hoạt động đúng cách.

Tôi đã cài đặt nó như sau:

python setup.py install

Nó hoạt động tốt trên hộp Server 2003 của tôi. Bây giờ tôi có thể chuyển đổi repo SVN theo cách chính xác, bằng cách làm như sau:

python c:\python26\scripts\hg convert <remote repo>

Tài liệu về ConvertExtension trên trang Mercurial không rõ ràng lắm, nhưng nó nói thế này:

Không có cách nào để cài đặt các liên kết Subversion vào thư viện Python tích hợp của [Mercurial]. Vì vậy, bạn sẽ cần sử dụng Mercurial được cài đặt trên Python độc lập

Vì vậy, bây giờ tôi chỉ sử dụng phiên bản độc lập để chuyển đổi và TortoiseHg cho công việc VCS thực tế.


0

muộn còn hơn không ...

Hai câu trả lời cho cái giá của một ...

  1. Nếu đó là repo công khai, mã nguồn mở, bạn có thể chỉ cần sử dụng http://svn2github.com/add/ , mất khoảng nửa giờ để sao chép repo đó sang GitHib và sau đó chỉ cần kéo repo đó vào Hg.

  2. Lợi thế của việc sử dụng hg convertlà có thể được tiếp tục. Việc chuyển đổi SVN sang Hg có thể mất vài ngày . Nếu bạn dừng điều này, nó sẽ tiếp tục từ nơi nó dừng lại.

Dưới đây là một tập tin hàng loạt tôi đã viết vì rác Codeplex SVNbridge. Thời gian repo trong ví dụ này mất vài ngày để tìm nạp toàn bộ lịch sử (tôi đang ở Úc nên độ trễ có thể là một yếu tố). Tôi muốn nghĩ rằng nó đã giúp một máy chủ TFS ở đâu đó đánh bại tốt.

Tệp lô này có thể được chạy bất cứ lúc nào để lấy các bản cập nhật từ nguồn SVN nếu chúng là những bản duy nhất còn lại trên trái đất thực sự vẫn sử dụng SVN. Tôi chưa thử nghiệm nó vì vậy hãy xem điều gì sẽ xảy ra nếu bạn làm điều này vì vậy nếu tôi là bạn, tôi sẽ bỏ nhánh ban đầu nếu bạn định chỉnh sửa repo.

Các robocopy shamap là duy trì lịch sử SVN nếu bạn sao chép repo Hg, shamap là tạm thời - hãy kiểm tra tệp batch & shamap trong (tôi muốn làm điều đó trên một nhánh mới).

lô...

@echo off
mode con:cols=100 lines=800

:: Change the SVN remote name here
::
set remote=https://cinch.svn.codeplex.com/svn
::

title Fetching SVN from %remote%. This could take...DAYS
echo .
echo Fetching SVN checkins from %remote%
echo .
echo Dependencies: Tortoise Hg and hg.exe in the Path would be ideal.
echo using hg convert
echo .
echo First, I will make a backup of shamap in the hg repo folder.
echo If shamap in .hg\ is newer then it will be copied to the repo.
echo You should commit it so hg clones of this repo work with this.
echo Commit this .BeeyATch file as well.
echo shamap keeps track of what has been fetched from SVN.
echo ok, that ends the educational part of this script...
echo Now I will fetch SVN changes from
echo %remote%
echo ...
echo ...(this could take quite some time)...
echo ...DAYS...yes...DAYS
echo ...especially if it's fecking Codeplex SVN...
echo .
echo If this craps out just run it again - it will resume from where it left off. 
echo and fetch the rest...eventually
echo .
echo Control C to abort or any other key to start:
echo .

pause

echo .
:: http://mercurial.selenic.com/wiki/ConvertExtension <== see for details of shamap
:: copy the shamap from the original convert into the .hg folder unless it is already there & newer
:: don't panic if shamap is much bigger than the original - diff it to see why
robocopy .\ .\.hg\ shamap /XO 
robocopy .\.hg\ .\ shamap /XO 
echo .

hg convert --verbose --debug %remote% "%CD%"
echo .
echo .
echo Finished fetching from %remote%
title Finished fetching from %remote%
echo Any  key to Exit
echo .
pause

exit

0

Sử dụng convertphần mở rộng của Mercurial:

  1. Bật mở rộng chuyển đổi; thêm convert=vào [extensions]phần .hgrc như thế này:

    [phần mở rộng]
    chuyển đổi =

  2. Linux cần liên kết python bổ sung: sudo apt-get install python-subversion
  3. Thực thi hg convertlệnh
    • Xem hg convert -hđể được giúp đỡ
    • Ví dụ: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (xem chú thích 2)
  4. Đẩy đến kho lưu trữ Mercurial mới được tạo: hg push https://[mercurialserver]/[Project]

lưu ý : bạn thậm chí có thể lặp lại lệnh chuyển đổi hg để bao gồm các thay đổi mới được thực hiện trong kho lưu trữ svn sau lần chuyển đổi trước đó.

lưu ý 2 : Khi chuyển đổi hg không hoạt động bằng cách sử dụng http://hoặc svn://trước tiên bạn có thể kiểm tra kho lưu trữ Subversion (hoặc cập nhật kho hiện có) và chuyển đổi bằng cách sử dụng kiểm tra cục bộ; thí dụ:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

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.