Skip to content

Latest commit

 

History

History
120 lines (103 loc) · 5.66 KB

import-hg.asc

File metadata and controls

120 lines (103 loc) · 5.66 KB

Mercurial

Dahil ang Mercurial at Git ay patas na magkaparehong mga modelo para sa pag-representa ng mga bersyon, at dahil ang Git ay medyo mas umaangkop, ang pagpalit ng isang repositoryo mula sa Mercurial patungo sa Git ay patas na wagas, ang paggamit ng isang kasangkapan na tinatawag na "hg-fast-export", na kakailanganin mo ng isang kopya:

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

Ang unang hakbang sa pagpapalit ay ang pagkuha ng isang buong clone ng Mercurial na repositoryo na gusto mong palitan:

$ hg clone <remote repo URL> /tmp/hg-repo

Ang susunod na hakbang ay ang paggawa ng isang may-akda na pagmamapa ng file. Ang Mercurial ay medyo mas mapagpatawad kaysa sa Git para sa kung ano ang ilalagay nito sa may-akda na field para sa mga hanay ng pagbabago, kaya ito ay isang magandang panahon upang maglinis ng bahay. Ang paglikha nito ay iisang linya ng utos sa isang bash na shell:

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

Ito ay lilipas ng ilang mga segundo, depende sa kung gaano kahaba ang kasaysayan ng iyong proyekto, at pagkatapos ang /tmp/authors na file ay magmumukhang katulad nito:

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

Sa halimbawang ito, ang parehong tao (Bob) ay gumawa ng mga hanay ng pagbabago sa ilalim ng apat na iba’t ibang mga pangalan, isa nito ay talagang nagmumukhang tama, at isa nito ay magiging ganap na imbalido para sa isang Git na commit. Ang Hg-fast-export ay hahayaan tayong ayusin ito sa pamamagitan ng pagdagdag ng ={new name and email address} sa dulo ng bawat linya na gusto nating baguhin, at magtatanggal ng mga linya para sa anumang mga username na gusto nating hindi pakialaman. Kung ang lahat ng mga username ay magmumukhang maayos, hindi na natin kailangan ang file na ito. Sa halimbawang ito, gusto natin na ang ating mga file ay magmumukhang katulad nito:

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>

Ang susunod na hakbang ay ang paggawa ng ating bagong Git na repositoryo, at patakbuhin ang export na iskrip:

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

Ang -r na flag ay sasabihan ang hg-fast-export kung saan hahanapin ang Mercurial na repositoryo na gusto nating palitan, at ang -A na flag ay sasabihan ito kung saan hahanapin ang may-akda na pag-map na file. Ang iskrip ay magpa-parse ng Mercurial na hanay ng mga pagbabago at papalitan ang mga ito sa isang iskrip para sa "fast-import" na tampok ng Git (na ating tatalakayin nang detalyado sa kaunting saglit mamaya). Ito ay lilipas ng saglit (bagaman ito ay mas mabilis kaysa sa paglipas nito sa network), at ang output ay patas na masalita:

$ /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

Mukhang iyan lang ang lahat ng nilalaman nito. Lahat ng mga tag ng Mercurial ay napalitan na ng mga tag ng Git, at ang mga branch ng Mercurial at mga bookmark ay napalitan na ng mga branch ng Git. Ngayon ay handa ka nang mag-push ng repositoryo sa bago nitong server-side na tahanan:

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