Jak migrować / konwertować z SVN na Mercurial (hg) w systemie windows

Szukam narzędzia do migracji kilku repozytoriów SVN do Mercurial, z historią, etykietami i tak dalej.

Używam TortoiseHg (Windows x32), więc convertextensions są odrzucane. Jest kilka informacji na temat tego, jak wykonać ten proces na Linuksie (hgsvn), ale nie mam dostępnej maszyny z Linuksem.

Czy Mogę używać skryptów Pythona w Windows? Jeśli tak, to co muszę zrobić? Lub, jakie inne narzędzia mogę użyć do tego procesu?

Zasadniczo, jak Mogę przekonwertować projekt SVN na Mercurial?

Author: Sam Hartsfield, 2009-05-12

9 answers

Po prostu musiałem rozwiązać ten problem sam. Mam komputer z systemem Windows XP z oddzielnym serwerem Windows Server hosting VisualSVN Server.

Mam również zainstalowany TortoiseHGoraz Klient wiersza poleceń CollabNet Subversion.

<Enable Convert Extension w/ Tortoise Hg 2>

Wielkie podziękowania dla bgever za zaznaczenie w komentarzach, że z TortoiseHg 2.0 włączenie rozszerzenia convert jest łatwiejsze niż kiedykolwiek. Jak mówi

Z TortoiseHG 2.0 został wykonany dużo prostsze: Start TortoiseHG Workbench z menu Start. Wybierz Plik -- > Ustawienia. Wybierz Rozszerzenia z listy. Sprawdź "Konwertuj" pole wyboru i kliknij OK. To jest to! Nie. trzeba spróbować wygenerować config plik i przeszukaj go w pliku system. - bgever Mar 11 at 7: 56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Aby przekonwertować repozytorium z SVN na HG, wykonałem następujące kroki:

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

EDIT

FYI - Tortoise Hg przeniósł ten plik do

  • XP lub starszy - C:\Documents and Settings\USERNAME\Mercurial.ini
  • Vista lub później - C:\Users\USERNAME\Mercurial.ini

Ten plik będzie w większości pusty, a ty po prostu wymienisz to, co chcesz zastąpić. Jeśli to jest to, co masz, proste dodaj te dwie linie na samym końcu pliku:

[extensions]
convert =

2) Szukaj linia zaczynająca się od

[rozszerzenia]

3) pod nim zobaczysz listę słów kluczowych, komentowanych średnikiem (;) w każdej linii

4) znajdź linię, która mówi

; convert =

I usuń średnik, aby odczytał

Convert =

</Enable Convert Extension Manually>

5) Otwórz wiersz polecenia i przejdź do katalogu, w którym chcesz utworzyć nowy folder hg (proces utworzy nowy folder o nazwie yoursvnreponame-hg w katalogu, do którego jest otwarty wiersz polecenia).

6) Użyj tego polecenia

Hg convert file:/ / / y: / yoursvnreponame

Odkryłem, że narzędzie do konwersji może mieć problemy z sieciowymi repozytoriami, więc musiałem mapować dysk do niego, ale to działało dobrze dla mnie.

 92
Author: Michael La Voie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-20 08:36:50
  1. uruchamianie serwera svn na localhost
  2. Hg convert svn: / / localhost / your_repo
  3. zrobione, ponieważ wiązania svn potrzebne tylko dla file: / / protocol
 8
Author: evilbloodydemon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-22 11:29:49

Mercurial ma wbudowane rozszerzenie Konwersji dla tego .

 7
Author: Chad Birch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-31 11:24:22

Aby przekonwertować repo SVN na repo HG i skopiować go na inny serwer, potrzebujesz kilku rzeczy.

  1. TortoiseHG zainstalowany. (Sprawdź, która wersja jest obecnie używana)
  2. Zainstalowany Python. (Sprawdź, która wersja jest obecnie używana)
  3. Moduły Pythona (można je znaleźć http://pysvn.tigris.org/project_downloads.html )
  4. będziesz musiał dodać rozszerzenie convert do Tortoise. Start the TortoiseHG Workbench from menu Start. Select File -> Settings. Wybierz Extensions z listy. Zaznacz pole wyboru convert i kliknij OK.

Najpierw konwersja...

  1. najlepiej jest zmapować Folder, w którym znajduje się aktualny Repo SVN na komputer, na którym pracujesz. (tzn. \\server\folder nie Mapuj samego folderu repo SVN. Mapuj folder tuż nad nim) nadaj zmapowanemu dyskowi literę, np. Y:\
  2. Otwórz wiersz polecenia i wpisz: CD /D Y:\
  3. At the Y:\ prompt type: hg convert y:/RepoName (Użyj nazwy obecny Repo) należy uważać na ukośniki do przodu i do tyłu. Ten w Komendzie to ukośnik. Ponadto, jeśli nazwa ma spacje, umieść nazwę w cudzysłowach. (tj. Y:/"My Repo folder")
  4. teraz powinien być uruchomiony i utworzy inny folder obok Starego. A folder hg powinien być w środku. NIE ZOSTANIE ZAINICJOWANY I NIE INICJUJ!
  5. konwersja została zakończona.

Drugie klonowanie ...

  1. Otwórz Stół Roboczy TortoiseHG. Przejdź do File -> Clone Repository
  2. źródło: wprowadź pełną ścieżkę konwersji repo.
  3. Destination: wprowadź pełną ścieżkę, w której chcesz sklonować repo. Nie jest konieczne tworzenie folderu w nowym miejscu docelowym, ponieważ proces klonowania utworzy go i zainicjalizuje.
  4. Dodaj uprawnienia do nowego sklonowanego folderu.
  5. Koniec z Tobą!!!
 5
Author: SueS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-06 23:35:05

Nikt jeszcze nie wspomina hgsubversion (Extension Wiki), która może to zrobić bez prawie żadnego bólu głowy (z wyjątkiem rzadkich przypadków i konkretnego drzewa).

Wystarczy dodać rozszerzenie, włączyć je i hg clone SVN_REPO do lokalnego mercurial repo

 3
Author: Lazy Badger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 12:08:55

To jest w TortoiseHg FAQ :

Jak mogę przekonwertować repozytorium subversion na Mercurial?

Musisz zainstalować narzędzia wiersza poleceń svn-win32-1.4.6, a następnie dodać je do swojej ścieżki. Następnie należy włączyć rozszerzenie Konwertuj. W tym momencie powinieneś być w stanie użyć polecenia 'hg convert' do wykonania konwersji. Problemy/pytania dotyczące rozszerzenia convert prosimy kierować na listę dyskusyjną Mercurial lub #mercurial na irc.freenode.net.

Więc najwyraźniej możliwe. używam Linuksa, więc sam nie próbowałem.

 1
Author: Martin Geisler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 21:10:23

Właśnie przekonwertowałem zdalny repo SVN z http auth na Mercurial repo i powiem ci, że nie ma zbyt wielu dokumentacji, jak to zrobić. Musiałem pobrać źródło Mercurial i zainstalować je samodzielnie, używając pakietu źródłowego, w ten sposób powiązania SVN będą działać prawidłowo.

Zainstalowałem go tak:

python setup.py install

Który działał dobrze na moim serwerze 2003 box. Mogę teraz przekonwertować repo SVN w poprawny sposób, robiąc coś takiego:

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

The dokumentacja ConvertExtension na stronie Mercurial nie jest zbyt jasna, ale mówi tak:

Nie ma sposobu na zainstalowanie Wiązania Subversion do wbudowanego [Mercurial ' s] Biblioteka Pythona. Więc będziesz musiał użyć Mercurial zainstalowany na szczycie samodzielny Python

Więc teraz używam tylko samodzielnej wersji do konwersji, a TortoiseHg do rzeczywistej pracy VCS.

 0
Author: Alex Fort,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-12 18:48:31

Lepiej późno niż wcale ...

Dwie odpowiedzi w cenie jednej ...
  1. Jeśli jest to repo publiczne, open-source można po prostu użyć http://svn2github.com/add / co zajęło około pół godziny sklonowanie tego repo do Githiba, a następnie wciągnięcie go do Hg.

  2. Zaletą stosowania hg convert czy to może być wznowione. Konwersja SVN na Hg może potrwać dni. Jeśli to zatrzymasz, powróci tam, gdzie zostało. wyłącz.

Poniżej jest plik wsadowy, który napisałem, ponieważ Codeplex SVNbridge śmieci. Repo w tym przykładzie zajęło kilka dni, aby pobrać całą historię(jestem w Australii, więc opóźnienie może być czynnikiem). Myślę, że dało to serwerowi TFS dobre lanie.

Ten plik wsadowy może być uruchomiony w dowolnym momencie, aby pobrać aktualizacje ze źródła SVN, jeśli zdarzy się, że są jedynymi na ziemi, które nadal używają SVN. Nie testowałem tego, więc zobaczymy, co się stanie, jeśli zrób to, więc na Twoim miejscu porzuciłbym oryginalną gałąź, jeśli zamierzasz edytować repo.

The robocopy shamap stuff is to keep the SVN history if you clone the Hg repo, shamap is ephemeral-check the batch file & shamap in (I ' d do that on a new branch).

Seria...

@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
Author: CAD bloke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-24 20:36:04

Za pomocą convert rozszerzenie Mercurial:

  1. Enable convert extention; add convert= to the [extensions] section of .hgrc like this:

    [rozszerzenia]
    convert=

  2. Linux potrzebuje dodatkowych wiązań Pythona: sudo apt-get install python-subversion
  3. wykonaj hg convert polecenie
    • Zobacz hg convert -h po pomoc
    • przykład: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (Zob. Uwaga 2)
  4. Push do nowo utworzonego repozytorium Mercurial: hg push https://[mercurialserver]/[Project]

Uwaga: możesz nawet powtórzyć polecenie Hg convert, aby uwzględnić nowe zmiany wprowadzone w repozytorium svn po poprzedniej konwersji.

Uwaga 2: gdy konwersja hg nie działa za pomocą http:// lub svn://, możesz najpierw pobrać repozytorium Subversion (lub zaktualizować istniejące) i przekonwertować za pomocą lokalnego kasy; przykład: hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

 0
Author: R. Oosterholt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 09:47:35