úterý 21. ledna 2014

Jak převést Subversion repo do Mercurialu pomocí HgSubversion

Jak převést Subversion repository do Mercurialu?

Používal jsem dva způsoby:
  1. pomocí příkazu hg convert o tom jsem psal tady: http://vondrnotes.blogspot.cz/2012/07/jak-prevest-subversion-repo-do.html
  2. pomocí HgSubversion o tom budu psát tady
Abych to stručně shrnul, tak 'hg convert' je jednoduchý spolehlivý způsob, který by většinou mohl bohatě stačit. (Spolehlivě mi převedl i 80 GB repo všechny branche a vééélmi velkou historii) 'HgSubversion' je trošku složitější a zdá se mi a může s tím být o trochu víc problémů. Na druhou stranu je o něco chytřejší a když se to zadaří, tak je výsledek lepší. (například commity jsou seřazeny správně podle data ve všech branchí, hg convert totiž udělá všechny commity z jedné branche, pak všechny commity z druhé atd.)


Jak převést Subversion repository do Mercurialu pomocí HgSubversion

  1. Instalovat podle http://mercurial.selenic.com/wiki/HgSubversion
    • - hg clone http://bitbucket.org/durin42/hgsubversion/ ~/hgsubversion
    • - Do ~/.hgrc dát:
      [extensions]
      hgsubversion = ~/hgsubversion/hgsubversion
      
  2. hg init (create repository)
  3. V repositari upravit soubory: Do .hg/hgrc dát
    [paths]
    default = https://muj-svn-server/moje/cesta/k/svn/repu
    
    [auth]
    bb.prefix = https://muj-svn-server/moje/cesta/k/svn/
    bb.username = moje.jmeno
    bb.password = moje.heslo
    

    Poznámka - Jak se vyhnout heslu v plaintextu:

    • do ~/.hgrc dát:
      [extensions]
      mercurial_keyring=
    • a vymazat řádek s heslem (bb.password = moje.heslo)
    • Mercurial se pak zeptá na heslo při prvním neúspešném přihlášení se zeptá na nové heslo

  4. SSL certifikát k svn (jen pokud je potřeba)
    Tohle musí být v 'userhome = ~/.hgrc (~/mercurial.ini)' - kvůli certifikátům pro svn
    [hostfingerprints]
    muj-svn-server = mu:j0:fi:ge:r0:pr:in:t0:b7:05:0e:81:93:97:22:67:fe:9a:0a:df
    
    Nebo toto, pokud fingerprint nezabere:
    [web]
    cacerts=
    ; cacerts je tu pro hgsubversion
    
  5. Pak převést svn do mercurialu
    hg pull
    (možná to třeba v průběhu spadne, ale to nevadí prostě se znova pustí hg pull a ono to bude pokračovat)
  6. A je to :)
    hg update
    a hurá do mercurialu!

Poznámky

Možný problém, který muže nastat pouze pokud se vývíjí a commituje do svn pomocí hgsubversion
Dá se to rozbít, že pak nejde udělat pull/push a hlásí to něco jako
Pull errors: abort: unknown revision '327d8c072e94f13489ed1ae2aaa4be66584d00b2' To se může povést opravit příkazem:

hg svn rebuildmeta