Windows'ta SVN'den Mercurial'a (hg) geçiş / dönüştürme


120

Birkaç SVN deposunu geçmiş, etiketler vb. İle Mercurial'e taşımak için bir araç arıyorum.

TortoiseHg (Windows x32) kullanıyorum, bu nedenle ConvertExtensions atılır. Bu işlemin bir Linux kutusunda ( hgsvn ) nasıl yapılacağına dair bazı bilgiler var , ancak bir Linux makinem yok.

Bu Python komut dosyalarını Windows'ta kullanabilir miyim? Öyleyse, ne yapmam gerekiyor? Veya bu işlemi yapmak için başka hangi araçları kullanabilirim?

Temel olarak, bir SVN projesini Mercurial'e nasıl dönüştürebilirim?

Yanıtlar:


93

Bu sorunu kendim halletmem gerekiyordu. VisualSVN Sunucusunu barındıran ayrı bir Windows sunucusuna sahip bir Windows XP makinem var .

Ayrıca , CollabNet Subversion Komut Satırı İstemcisinin yanı sıra TortoiseHG'yi kurdum .

<Enable Convert Extension w/ Tortoise Hg 2>

Yorumlarda TortoiseHg 2.0 ile dönüştürme eklentisini etkinleştirmenin her zamankinden daha kolay olduğuna işaret ettiği için bgever'e çok teşekkürler . Dediği gibi

TortoiseHG 2.0 ile bu çok daha basit hale getirildi: TortoiseHG Workbench'i Başlat menüsünden başlatın. Dosya -> Ayarlar'ı seçin. Listeden Uzantılar'ı seçin. 'Dönüştür' onay kutusunu işaretleyin ve Tamam'ı tıklayın. Bu kadar! Artık yapılandırma dosyasını oluşturmaya ve dosya sisteminde arama yapmaya gerek yok. - bgever 11 Mart saat 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Bir depoyu SVN'den HG'ye dönüştürmek için şu adımları izledim:

1) C: \ Program Files \ TortoiseHg \ Mercurial.ini dosyasını açın

DÜZENLE

Bilginize - Tortoise Hg bu dosyayı şuraya taşıdı:

  • XP veya daha eski - C: \ Documents and Settings \ USERNAME \ Mercurial.ini
  • Vista veya üzeri - C: \ Users \ USERNAME \ Mercurial.ini

Bu dosya çoğunlukla boş olacak ve orada neyi geçersiz kılmak istediğinizi listeleyeceksiniz. Eğer sahip olduğunuz buysa, basitçe bu iki satırı dosyanın en sonuna ekleyin:

[extensions]
convert =

2) ile başlayan satırı arayın

[Uzantıları]

3) Aşağıda, her satırda noktalı virgülle (;) yorumlanmış bir anahtar kelime listesi göreceksiniz.

4) yazan satırı bulun

; convert =

ve noktalı virgülü silin, böylece

convert =

</Enable Convert Extension Manually>

5) Komut istemini açın ve yeni hg klasörünün oluşturulmasını istediğiniz dizine gidin (işlem, komut isteminin açık olduğu dizinde yoursvnreponame-hg adında yeni bir klasör oluşturacaktır).

6) Bu komutu kullanın

hg convert dosyası: /// y: / yoursvnreponame

Dönüştürme aracının ağa bağlı depolarla sorunları olabileceğini buldum, bu yüzden ona bir sürücü eşlemek zorunda kaldım, ancak bu benim için gayet iyi çalıştı.


Bu sorunun cevabını seçmek zordu. evilbloodydemon, dönüştür uzantısını etkinleştirmek için yapılandırmayı düzenleme yanıtına yorum yaptığında haklıydı, ancak bu yanıt daha açık ve kesin
David Lay

1
Bunu SVN komut satırı istemcisi olmadan test ettiğimi ve işe yaradığını belirtmek istedim. Bunu yapmak için bir SVN sunucusuna bile ihtiyacınız yok, sadece depo dosyası yoluna erişin.
Michael La Voie

Bu, Mercurial V1.4.3 ile benim için iyi çalıştı. 1 yıllık bir svn deposu, tüm geçmişi bozulmadan çok hızlı bir şekilde dönüştürüldü. Çok teşekkürler!
Jonathan Webb

1
Sadece eklemek için - ini dosyası varsayılan bir TortoiseHG kurulumunda oluşturulmaz. Ne yaptığınızı biliyorsanız, önce bazı ayarları uygulamanız / kaydetmeniz veya boş bir dosyayla başlamanız gerekir.
Ahmad

9
TortoiseHG 2.0 ile bu çok daha basit hale getirildi: TortoiseHG Workbench'i Başlat menüsünden başlatın. Dosya -> Ayarlar'ı seçin. Listeden Uzantıları seçin. 'Dönüştür' onay kutusunu işaretleyin ve Tamam'ı tıklayın. Bu kadar! Artık yapılandırma dosyasını oluşturmaya ve dosya sisteminde arama yapmaya gerek yok.
Bart Verkoeijen

8
  1. localhost'ta başlangıç ​​svn sunucusu
  2. hg dönüştürmek svn: // localhost / your_repo
  3. bitti, çünkü svn bağlamaları sadece file: // protokolü için gerekli

Hayır, ne win32 ne de TortoiseHg için değişken ikili dosyalar dönüştürme uzantılarıyla birlikte gelmez, bu nedenle "hg dönüştürme" win32'de geçerli bir komut bile değildir.
David Lay

1
File: // yerine svn: // kullanmayı denedim ama Python bağlamalarını sormaya devam ediyor
fglez

File: // yerine svn: // kullanmak, Python bağlamaları olmadan benim için çalıştı. Svn sunucusunu başlatmak için komut şu
şekildedir

7

Mercurial, bunun için yerleşik bir dönüştürme uzantısına sahiptir .


2
Biliyorum, karşılaştığım ilk şey bu, ancak şu alıntıyı yapıyorum: "Bunu Win32 Mercurial ikili dosyalarıyla yapamayacağınızı unutmayın - Subversion bağlamalarını yerleşik Python kitaplığına yüklemenin bir yolu yoktur" TortoiseHg ...
David Lay

Linux canlı CD'si veya sanal makine mi kullanıyorsunuz?
richq

Bu kesinlikle doğru cevap. Bunu yalnızca hg convert uzantısını kullanarak ( selenic.com/mercurial/wiki/… ) ve pysvn uzantısı olmadan SVN deposu için dosya protokolünü kullanarak yaptım: hg convert file: /// X: / HOME / REPOS / mysvnrep newhgrep
van

5

Bir SVN Repo'yu HG Repo'ya dönüştürmek VE farklı bir sunucuya kopyalamak için birkaç şeye ihtiyacınız olacak.

  1. TortoiseHG takıldı. (Şu anda hangi sürümün kullanıldığını kontrol edin)
  2. Python Yüklendi. (Şu anda hangi sürümün kullanıldığını kontrol edin)
  3. Python Modülleri (bunları http://pysvn.tigris.org/project_downloads.html bulabilirsiniz )
  4. convertUzantıyı Tortoise'a eklemeniz gerekecek . TortoiseHG Workbench'i Başlat menüsünden başlatın. Seçin File -> Settings. Listeden seçin Extensions. Kontrol convertkutusunu ve OK tıklayın.

Önce dönüşüm…

  1. Geçerli SVN Repo'nun bulunduğu Klasörü, üzerinde çalıştığınız bilgisayara eşlemek en iyisidir. (Örneğin \\server\folder , SVN Repo klasörünün kendisini eşlemeyin. Hemen üzerindeki klasörü eşleştirin) Eşlenen sürücüye bir harf verin, örneğinY:\
  2. Bir komut istemi açın ve şunu yazın: CD /D Y:\
  3. At Y:\istemi türü: hg convert y:/RepoName ileri ve geri eğik çizgi dikkatli olun (geçerli Repo adını kullanın). Komuttaki bir eğik çizgidir. Ayrıca, adın boşlukları varsa, adı tırnak içine alın. (yani Y:/"My Repo folder")
  4. Şimdi çalışıyor olmalı ve eskisinin yanında başka bir klasör oluşturacaktır. Ve içinde bir hg klasörü olmalıdır. BAŞLATILMAYACAK VE BAŞLATMAYIN!
  5. Dönüşüm tamamlandı.

İkinci olarak klonlama…

  1. TortoiseHG Workbench'i açın. GitFile -> Clone Repository
  2. Kaynak: Dönüştürülen deponun tam yolunu girin.
  3. Hedef: Deponun klonlanmasını istediğiniz yerin tam yolunu girin. Klonlama işlemi onu oluşturacağından ve başlatacağından yeni hedefte bir klasör oluşturmak gerekli değildir.
  4. İzinleri yeni klonlanmış klasöre ekleyin.
  5. Sen bittin!!!

Merhaba, neden initilk depoyu kullanmamanız gerektiğini açıklamak mümkün mü?
Ben Page

3

Hala hiç kimse hgsubversion'dan ( Extension Wiki ) bahsetmiyor , bu da neredeyse herhangi bir baş ağrısı olmadan yapabiliyor (nadir durumlar ve belirli bir ağaç hariç).

Sadece uzantı ekleyin, etkinleştirin ve hg clone SVN_REPOyerel satış deposuna


1

Bu, TortoiseHg SSS bölümündedir :

Bir yıkım havuzunu Mercurial'e nasıl dönüştürebilirim?

Svn-win32-1.4.6 komut satırı araçlarını kurmalı, ardından bunları yolunuza eklemelisiniz. Ardından, dönüştürme uzantısını etkinleştirmelisiniz. Bu noktada, hg convertdönüşümü yapmak için ' ' komutunu kullanabilmelisiniz. Lütfen dönüştürme uzantısı ile ilgili sorunları / soruları Mercurial posta listesine veya #mercurialüzerinde yönlendirin irc.freenode.net.

Görünüşe göre bu mümkün - Linux kullanıyorum, bu yüzden kendimi denemedim.


0

HTTP kimlik doğrulamalı uzak bir SVN deposunu bir Mercurial deposuna dönüştürdüm ve size söyleyeyim, bunun nasıl yapılacağına dair çok fazla belge yok. Mercurial kaynağını indirmem ve kaynak paketini kullanarak bağımsız olarak kurmam gerekti, böylece SVN bağlamaları doğru şekilde çalışacak.

Şöyle kurdum:

python setup.py install

Sunucu 2003 kutumda gayet iyi çalıştı. Artık bir SVN reposunu şu şekilde bir şey yaparak doğru şekilde dönüştürebilirim:

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

Mercurial sitesindeki ConvertExtension dokümantasyonu çok net değil, ancak şunu söylüyor:

Subversion bağlamalarını [Mercurial'ın] yerleşik Python kitaplığına yüklemenin bir yolu yoktur. Bu nedenle, bağımsız bir Python üzerine kurulu bir Mercurial kullanmanız gerekecek

Bu yüzden şimdi dönüştürme için bağımsız sürümü ve gerçek VCS çalışması için TortoiseHg'yi kullanıyorum.


0

geç olsun güç olmasın ...

Birinin fiyatına iki cevap ...

  1. Halka açık, açık kaynaklı bir repo ise, bu repoyu GitHib'e klonlamak yaklaşık yarım saat süren http://svn2github.com/add/ adresini kullanabilir ve sonra bunu Hg'ye çekebilirsiniz.

  2. Kullanmanın avantajı hg convertdevam ettirilebilmesidir. SVN'yi Hg'ye dönüştürmek günler sürebilir . Bunu durdurursanız, kaldığı yerden devam edecektir.

Aşağıda Codeplex SVNbridge çöpü olduğu için yazdığım bir toplu iş dosyası var. Bu örnekteki repo, tüm tarihi almak için birkaç gün sürdü (Avustralya'dayım, bu nedenle gecikme bir faktör olabilir). Bir yerde bir TFS sunucusuna iyi bir dayak attığını düşünmek isterim.

Bu toplu iş dosyası, dünyada gerçekte hala SVN kullanan tek dosya ise, SVN kaynağından güncellemeleri almak için herhangi bir zamanda çalıştırılabilir. Test etmedim, bu yüzden eğer bunu yaparsan ne olacağını gör, o halde senin yerinde olsaydım, repoyu düzenleyeceksen orijinal şubeyi terk ederdim.

Konu robocopy shamap, Hg repo'yu klonlarsanız, SVN geçmişini korumaktır, sahte olmak geçicidir - toplu iş dosyasını kontrol edin ve sahte olarak girin (bunu yeni bir şubede yapardım).

grup...

@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

Mercurial convertuzantısının kullanılması :

  1. Dönüştürme uzantısını etkinleştirin; eklemek convert=için [extensions]böyle .hgrc bölümünde:

    [uzantılar]
    dönüştürmek =

  2. Linux ek python bağlamalarına ihtiyaç duyar: sudo apt-get install python-subversion
  3. Yürüt hg convertkomutu
    • hg convert -hYardım için bakın
    • Örnek: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (not 2'ye bakın)
  4. Yeni oluşturulan Mercurial havuzuna aktarın: hg push https://[mercurialserver]/[Project]

not : önceki dönüştürmeden sonra svn deposunda yapılan yeni değişiklikleri dahil etmek için hg convert komutunu bile tekrarlayabilirsiniz.

not 2 : hg convert kullanarak çalışmadığında http://veya svn://önce Subversion deposunu satın alabilir (veya mevcut olanı güncelleyebilir) ve yerel satın alma işlemini kullanarak dönüştürebilirsiniz; misal:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.