Cara bermigrasi / mengkonversi dari SVN ke Mercurial (hg) di windows


120

Saya mencari alat untuk memigrasi beberapa repositori SVN ke Mercurial, dengan sejarah, label, dan sebagainya.

Saya menggunakan TortoiseHg (Windows x32), jadi ConvertExtensions dibuang. Ada beberapa info tentang cara melakukan proses ini di kotak Linux ( hgsvn ), tetapi saya tidak memiliki mesin Linux yang tersedia.

Bisakah saya menggunakan skrip Python tersebut di Windows? Jika ya, apa yang saya perlukan untuk melakukannya? Atau, alat lain apa yang dapat saya gunakan untuk melakukan proses ini?

Pada dasarnya, bagaimana saya bisa mengubah proyek SVN ke Mercurial?

Jawaban:


93

Saya hanya harus mengatasi masalah ini sendiri. Saya memiliki mesin windows XP dengan server windows terpisah yang menghosting VisualSVN Server .

Saya juga memiliki TortoiseHG terinstal serta Klien Baris Perintah Subversi CollabNet .

<Enable Convert Extension w/ Tortoise Hg 2>

Terima kasih banyak kepada bgever karena telah menunjukkan dalam komentar bahwa dengan TortoiseHg 2.0, mengaktifkan ekstensi konversi lebih mudah dari sebelumnya. Seperti yang dia katakan

Dengan TortoiseHG 2.0 ini telah dibuat jauh lebih sederhana: Jalankan Meja Kerja TortoiseHG dari menu Start. Pilih File -> Pengaturan. Pilih Ekstensi dari daftar. Centang kotak 'convert' dan klik OK. Itu dia! Tidak perlu mencoba membuat file konfigurasi lagi dan mencarinya di sistem file. - bgever 11 Maret pukul 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Untuk mengonversi repositori dari SVN ke HG, saya mengikuti langkah-langkah ini:

1) Buka C: \ Program Files \ TortoiseHg \ Mercurial.ini

EDIT

FYI - Tortoise Hg telah memindahkan file ini ke

  • XP atau yang lebih lama - C: \ Documents and Settings \ USERNAME \ Mercurial.ini
  • Vista atau yang lebih baru - C: \ Users \ USERNAME \ Mercurial.ini

File itu sebagian besar akan kosong dan Anda hanya akan mencantumkan apa yang ingin Anda timpa di sana. Jika itu yang Anda miliki, cukup tambahkan dua baris ini ke bagian paling akhir file:

[extensions]
convert =

2) Cari baris yang dimulai dengan

[ekstensi]

3) Di bawahnya Anda akan melihat daftar kata kunci, yang diberi tanda titik koma (;) di setiap baris

4) Temukan baris yang bertuliskan

; mengkonversi =

dan hapus titik koma sehingga terbaca

mengkonversi =

</Enable Convert Extension Manually>

5) Buka command prompt dan arahkan ke direktori yang Anda inginkan untuk membuat folder hg baru (proses akan membuat folder baru bernama yourvnreponame-hg di direktori tempat command prompt terbuka).

6) Gunakan perintah ini

hg mengkonversi file: /// y: / yourvnreponame

Saya menemukan bahwa alat konversi dapat memiliki masalah dengan repositori jaringan, jadi saya harus memetakan drive ke sana, tetapi ini berfungsi dengan baik untuk saya.


Memilih jawaban untuk pertanyaan ini sulit. evilbloodydemon benar ketika dia berkomentar dalam jawabannya untuk mengedit konfigurasi untuk mengaktifkan ekstensi konversi, tetapi jawaban ini lebih jelas dan tepat
David Lay

1
Saya hanya ingin menyebutkan bahwa saya menguji ini tanpa klien baris perintah SVN dan berhasil juga. Anda bahkan tidak memerlukan server SVN yang berfungsi untuk melakukan ini, cukup akses ke jalur file repositori.
Michael La Voie

Ini bekerja dengan baik untuk saya dengan Mercurial V1.4.3. Repositori svn berumur 1 tahun dikonversi dengan sangat cepat dengan riwayat lengkap utuh. Terimakasih banyak!
Jonathan Webb

1
Hanya untuk menambahkan - file ini tidak dibuat pada instalasi TortoiseHG default. Anda perlu menerapkan / menyimpan beberapa pengaturan terlebih dahulu atau memulai dengan file kosong jika Anda tahu apa yang Anda lakukan.
Ahmad

9
Dengan TortoiseHG 2.0 ini telah dibuat jauh lebih sederhana: Jalankan Meja Kerja TortoiseHG dari menu Start. Pilih File -> Pengaturan. Pilih Ekstensi dari daftar. Centang kotak 'convert' dan klik OK. Itu dia! Tidak perlu mencoba membuat file konfigurasi lagi dan mencarinya di sistem file.
Bart Verkoeijen

8
  1. startup svn server di localhost
  2. hg konversi svn: // localhost / your_repo
  3. selesai, karena ikatan svn hanya diperlukan untuk file: // protokol

Tidak, baik biner lincah untuk win32 atau TortoiseHg dilengkapi dengan ekstensi konversi, jadi "hg convert" bahkan bukan perintah yang valid di win32.
David Lay

1
Saya mencoba menggunakan svn: // alih-alih file: // tetapi terus meminta pengikatan Python
fglez

Menggunakan svn: // alih-alih file: // bekerja untuk saya tanpa binding Python. Untuk memulai server svn perintahnya adalah: svnserve -r <path to repo root> -d
Petter Wigle

7

2
Saya tahu, Ini hal pertama yang saya temukan, tetapi mengutip: "Perhatikan bahwa Anda tidak dapat melakukan ini dengan binari Win32 Mercurial - tidak ada cara untuk menginstal pengikatan Subversion ke dalam pustaka Python bawaan" Saya menggunakan TortoiseHg ...
David Lay

Gunakan live CD Linux atau mesin virtual?
richq

Ini jawaban yang sangat benar. Saya telah melakukan ini hanya menggunakan ekstensi konversi hg ( selenic.com/mercurial/wiki/… ) dan menggunakan protokol file untuk repositori SVN tanpa ekstensi pysvn: file konversi hg: /// X: / HOME / REPOS / mysvnrep newhgrep
van

5

Untuk mengonversi Repo SVN menjadi Repo HG DAN menyalinnya ke server lain, Anda memerlukan beberapa hal.

  1. TortoiseHG diinstal. (Periksa untuk melihat versi apa yang saat ini digunakan)
  2. Python Terinstal. (Periksa untuk melihat versi apa yang saat ini digunakan)
  3. Modul Python (Anda dapat menemukannya di http://pysvn.tigris.org/project_downloads.html )
  4. Anda perlu menambahkan convertekstensi ke Tortoise. Mulai Meja Kerja TortoiseHG dari menu Start. Pilih File -> Settings. Pilih Extensionsdari daftar. Centang convertkotak dan klik OK.

Pertama konversi…

  1. Cara terbaik adalah memetakan Folder tempat Repo SVN saat ini berada ke komputer yang Anda kerjakan. (yaitu\\server\folder Jangan memetakan folder SVN Repo itu sendiri. Petakan folder tepat di atasnya) Berikan huruf pada drive yang dipetakan, sepertiY:\
  2. Buka Command Prompt dan ketik: CD /D Y:\
  3. Pada Y:\jenis prompt: hg convert y:/RepoName (gunakan nama Repo saat ini) Berhati-hatilah dengan garis miring ke depan dan ke belakang. Yang ada di perintah adalah garis miring. Juga, jika namanya memiliki spasi, tulis nama dalam kutipan. (yaituY:/"My Repo folder" )
  4. Sekarang itu harus berjalan dan akan membuat folder lain di samping yang lama. Dan folder hg harus ada di dalamnya. ITU TIDAK AKAN DIMULAI, DAN JANGAN DIMULAI!
  5. Konversi selesai.

Kedua, kloning…

  1. Buka Meja Kerja TortoiseHG. Pergi keFile -> Clone Repository
  2. Sumber: Masukkan jalur lengkap dari repo yang dikonversi.
  3. Tujuan: Masukkan jalur lengkap di mana Anda ingin repo kloning. Tidak perlu membuat folder di tujuan baru karena proses kloning akan membuat dan menginisialisasinya.
  4. Tambahkan izin ke folder kloning baru.
  5. Kamu sudah selesai!!!

Hai, apakah mungkin untuk menjelaskan mengapa Anda tidak boleh initmenyimpan repositori pertama?
Ben Halaman

3

Tidak ada yang masih tidak menyebutkan hgsubversion ( Extension Wiki ), yang dapat melakukannya tanpa sakit kepala apapun (tidak termasuk kasus yang jarang terjadi dan pohon tertentu).

Cukup tambahkan ekstensi, aktifkan dan hg clone SVN_REPOke repo lincah lokal


1

Ini ada di FAQ TortoiseHg :

Bagaimana cara mengubah repositori subversi ke Mercurial?

Anda harus menginstal alat baris perintah svn-win32-1.4.6, kemudian menambahkannya ke jalur Anda. Kemudian Anda harus mengaktifkan ekstensi konversi. Pada titik ini, Anda seharusnya sudah dapat menggunakan perintah ' hg convert' untuk melakukan konversi. Silakan tujukan masalah / pertanyaan tentang ekstensi konversi ke milis Mercurial atau #mercurialdi irc.freenode.net.

Jadi mungkin saja - Saya menggunakan Linux jadi saya belum mencoba sendiri.


0

Saya baru saja mengonversi repo SVN jarak jauh dengan auth HTTP menjadi repo Mercurial, dan izinkan saya memberi tahu Anda, tidak banyak dokumentasi tentang cara melakukan ini. Saya harus mengunduh sumber Mercurial dan menginstalnya sendiri, menggunakan paket sumber, dengan cara itu pengikatan SVN akan bekerja dengan cara yang benar.

Saya menginstalnya seperti:

python setup.py install

Yang bekerja dengan baik di kotak Server 2003 saya. Sekarang saya dapat mengonversi repo SVN dengan cara yang benar, dengan melakukan sesuatu seperti ini:

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

Dokumentasi untuk ConvertExtension di situs Mercurial tidak terlalu jelas, tetapi dikatakan sebagai berikut:

Tidak ada cara untuk menginstal pengikatan Subversion ke pustaka Python bawaan [Mercurial]. Jadi, Anda harus menggunakan Mercurial yang dipasang di atas Python yang berdiri sendiri

Jadi sekarang saya hanya menggunakan versi yang berdiri sendiri untuk mengonversi, dan TortoiseHg untuk pekerjaan VCS yang sebenarnya.


0

lebih baik terlambat daripada tidak sama sekali ...

Dua jawaban untuk harga satu ...

  1. Jika ini adalah repo publik sumber terbuka, Anda dapat menggunakan http://svn2github.com/add/ yang membutuhkan waktu sekitar setengah jam untuk mengkloning repo itu ke GitHib dan kemudian menariknya ke Hg.

  2. Keuntungan menggunakan hg convertadalah dapat dilanjutkan. Mengonversi SVN ke Hg bisa memakan waktu berhari - hari . Jika Anda menghentikannya, ini akan dilanjutkan dari tempat yang ditinggalkannya.

Di bawah ini adalah file batch yang saya tulis karena Codeplex SVNbridge sampah. Repo dalam contoh ini memang membutuhkan beberapa hari untuk mengambil seluruh sejarah (Saya di Australia jadi latensi mungkin menjadi faktor). Saya ingin berpikir itu memberi server TFS di suatu tempat pemukulan yang baik.

File batch ini dapat dijalankan kapan saja untuk menarik pembaruan dari sumber SVN jika kebetulan itu adalah satu-satunya yang tersisa di bumi yang sebenarnya masih menggunakan SVN. Saya belum mengujinya jadi lihat apa yang terjadi jika Anda melakukan ini jadi jika saya jadi Anda, saya akan meninggalkan cabang asli jika Anda akan mengedit repo.

Masalahnya robocopy shamapadalah mempertahankan riwayat SVN jika Anda mengkloning repo Hg, shamap bersifat sementara - periksa file batch & shamap in (saya akan melakukannya di cabang baru).

kumpulan ...

@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

Menggunakan convertekstensi Mercurial:

  1. Aktifkan ekstensi konversi; tambahkan convert=ke [extensions]bagian .hgrc seperti ini:

    [ekstensi]
    mengkonversi =

  2. Linux membutuhkan pengikatan python tambahan: sudo apt-get install python-subversion
  3. Jalankan hg convertperintah
    • Lihat hg convert -hbantuan
    • Contoh: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (lihat catatan 2)
  4. Dorong ke repositori Mercurial yang baru dibuat: hg push https://[mercurialserver]/[Project]

catatan : Anda bahkan dapat mengulangi perintah hg convert untuk menyertakan perubahan baru yang dibuat di repositori svn setelah konversi sebelumnya.

catatan 2 : Ketika hg convert tidak berfungsi menggunakan http://atau svn://Anda dapat terlebih dahulu memeriksa repositori Subversion (atau memperbarui yang sudah ada) dan mengonversi menggunakan checkout lokal; contoh:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.