Skip to content

Latest commit

 

History

History
122 lines (105 loc) · 7.04 KB

File metadata and controls

122 lines (105 loc) · 7.04 KB

Меркуријал

Пошто Меркуријал и Гит имају прилично сличне моделе за представљање верзија, а како је програм Гит мало флексибилнији, конвертовање репозиторијума из Меркуријал у Гит је прилично лако, употребом алата под називом hg-fast-export, који прво треба да преузмете:

$ git clone http://repo.or.cz/r/fast-export.git /tmp/fast-export

Први корак конверзије је да преузмете потпуни клон Меркуријал репозиторијума који желите да конвертујете:

$ hg clone <URL адреса удаљеног репозиторијума> /tmp/hg-repo

Наредни корак је креирање фајла за мапирање аутора. Меркуријал није толико стриктан као Гит у вези тога шта ће ставити у поље аутора скупа измена, тако да је ово добар тренутак да мало поспремите кућу. Генерисање овог фајла је једнолинијска команда у bash љуски:

$ cd /tmp/hg-repo
$ hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors

Ово ће потрајати неколико секунди, зависно од величине историје пројекта, па ће након тога фајл /tmp/authors изгледати отприлике овако:

bob
bob@localhost
bob <bob@company.com>
bob jones <bob <AT> company <DOT> com>
Bob Jones <bob@company.com>
Joe Smith <joe@company.com>

У овом примеру, иста особа (Bob) је креирала скупове измена користећи четири различита имена, од којих једно изгледа коректно, а једно би било потпуне неисправно за Гит комит. Hg-fast-export вам омогућава да ово исправите тако што сваку линију претворите у правило: "<улаз>"="<излаз>", које мапира <улаз> у <излаз>. Унутар стрингова <улаз> и <излаз>, подржавају се сви означени низови које препознаје Пајтон string_escape кодирање. Ако фајл мапирања аутора не садржи одговарајући <улаз>, онда се тај аутор шаље програму Гит неизмењен. Ако сва корисничка имена изгледају како треба, нема потребе да се овај фајл исправља. У овом примеру, желимо да наш фајл изгледа на следећи начин:

"bob"="Bob Jones <bob@company.com>"
"bob@localhost"="Bob Jones <bob@company.com>"
"bob <bob@company.com>"="Bob Jones <bob@company.com>"
"bob jones <bob <AT> company <DOT> com>"="Bob Jones <bob@company.com>"

Наредни корак је да креирамо наш нови Гит репозиторијум и да извршимо скрипту за извоз:

$ git init /tmp/converted
$ cd /tmp/converted
$ /tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors

Заставица -r говори hg-fast-export где да пронађе Меркуријал репозиторијум који желимо да конвертујемо, а заставица -A говори где да пронађе фајл са мапирањима аутора. Скрипта парсира Меркуријал скупове измена и конвертује их у скрипту за „fast-import” могућност програма Гит (коју ћемо детаљно приказати мало касније). Ово ће потрајати (мада је много брже него што би било преко мреже), а излаз је прилично детаљан:

$ /tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors
Loaded 4 authors
master: Exporting full revision 1/22208 with 13/0/0 added/changed/removed files
master: Exporting simple delta revision 2/22208 with 1/1/0 added/changed/removed files
master: Exporting simple delta revision 3/22208 with 0/1/0 added/changed/removed files
[…]
master: Exporting simple delta revision 22206/22208 with 0/4/0 added/changed/removed files
master: Exporting simple delta revision 22207/22208 with 0/2/0 added/changed/removed files
master: Exporting thorough delta revision 22208/22208 with 3/213/0 added/changed/removed files
Exporting tag [0.4c] at [hg r9] [git :10]
Exporting tag [0.4d] at [hg r16] [git :17]
[…]
Exporting tag [3.1-rc] at [hg r21926] [git :21927]
Exporting tag [3.1] at [hg r21973] [git :21974]
Issued 22315 commands
git-fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:     120000
Total objects:       115032 (    208171 duplicates                  )
      blobs  :        40504 (    205320 duplicates      26117 deltas of      39602 attempts)
      trees  :        52320 (      2851 duplicates      47467 deltas of      47599 attempts)
      commits:        22208 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:         109 (         2 loads     )
      marks:        1048576 (     22208 unique    )
      atoms:           1952
Memory total:          7860 KiB
       pools:          2235 KiB
     objects:          5625 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize = 1073741824
pack_report: core.packedGitLimit      = 8589934592
pack_report: pack_used_ctr            =      90430
pack_report: pack_mmap_calls          =      46771
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =  340852700 /  340852700
---------------------------------------------------------------------

$ git shortlog -sn
   369  Bob Jones
   365  Joe Smith

И то је скоро све у вези конверзије. Све Меркуријал ознаке су конвертоване у Гит ознаке, а Меркуријал гране и маркери су конвертовани у Гит гране. Сада сте спремни да гурнете репозиторијум узводно на његово ново место на серверу:

$ git remote add origin git@my-git-server:myrepository.git
$ git push origin --all