Mengonversi folder Mercurial ke repositori Git


138

Saya tidak memiliki pengalaman besar dengan Mercurial, saya sebagian besar adalah pria Git.

Saya ingin mencerminkan folder / file Mercurial tertentu di git Repository. Apa yang sebenarnya saya coba lakukan adalah mengekspor riwayat file dari repositori Mercurial ke Git dan dapat menjaganya tetap sinkron dengan komitmen di masa mendatang.

Apakah Anda punya saran tentang cara melanjutkan? Saya percaya bahwa cara yang harus dilakukan adalah mendapatkan riwayat patch Mercurial, secara berkala mengekspor setiap komit sebagai patch dan menerapkan patch Mercurial ke repositori Git.


Saat ini, GitHub.com akan mengimpornya untuk Anda .
Brad Turek

Terkait: panduan yang bagus di git-scm.com: git-scm.com/book/en/v2/…
maxschlepzig

Jawaban:


124

Di Linux atau apa pun dengan bash/shatau serupa, atau python, coba dengan ekspor cepat :

cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

1
Oke, Anda ingin tetap sinkron dengan git dengan lincah? Seperti ini ?
Yohann

1
Perhatikan bahwa '/ path / to / old / mercurial_repo' harus berupa path pada sistem file (bukan URL), jadi Anda harus mengkloning repositori asli sebelumnya.
mar10

1
Dalam kasus saya harus menggunakan PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Selain itu, ini bekerja dengan sempurna.
Artur Czajka

5
Terima kasih atas jawaban singkatnya! Saya harus sudo easy_install mercurialdulu. Akan menyenangkan untuk memiliki instruksi
Marcus Westin

3
Jika Anda menggunakan mesin Windows, gunakan Git bash dan jalankan hg-fast-export.sh
Augustas

62

Windows: Ekstensi TortoiseHG Hg-Git

Hg-Git dapat digunakan untuk mengonversi repositori Mercurial ke Git. Anda dapat menggunakan repositori lokal atau repositori jarak jauh yang diakses melalui SSH, HTTP atau HTTPS.

Contoh konversi repositori lokal.

  1. Pasang Hg-Git.

    • Di Windows, TortoiseHg hadir dengan Hg-Git, meskipun Anda perlu mengaktifkannya melalui alat pengaturan (di bagian ekstensi)

      Pengaturan TortoiseHg

      atau secara manual di ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Gunakan perintah berikut untuk mengonversi repositori:

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    

The hgbookmark diperlukan untuk mencegah masalah sebagai dorongan sebaliknya hg-git ke cabang saat diperiksa membingungkan Git. Ini akan membuat cabang bernama hgdi repositori Git. Untuk mendapatkan perubahan dalam master gunakan perintah berikut (hanya perlu di jalankan pertama, nanti cukup gunakan git mergeatau rebase):

$ cd git-repo
$ git checkout -b master hg

Saya telah menemukan git-hg cukup buggy, tetapi ini bekerja seperti pesona, dan tidak memerlukan unduhan tambahan yang bagus.
Timmmm

2
Saya ingin folder, bukan seluruh repo.
Simone Carletti

github sekarang memiliki alat yang mendukung ini langsung dari github, lihat stackoverflow.com/questions/16037787/…
Tommy

@SimoneCarletti Lihat pertanyaan ini . Ini akan membantu Anda mengekspor file / folder dan riwayatnya dalam repositori sementara. Kemudian Anda dapat menggunakan salah satu solusi yang disediakan untuk mengonversi repositori Mercurial sementara ke Git.
naXa

13

Anda dapat (dari sisi Mercurial):

  • menggunakan Convert extension dengan --filemapopsi convert bagian original repo menjadi lebih kecil dengan hanya file | direktori yang dibutuhkan
  • dengan ekstensi hg-git, dorong repo yang dilucuti ke Git

atau (alih-alih hg-git), menggunakan Mercurial bridge di Git , klon | tarik repositori dari Git


11

Gitify

Tampak sebagai alternatif yang lebih modern dan mudah digunakan untuk melakukan konversi https://github.com/buchuki/gitifyhg

pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one

1
Saya tidak ingin mengonversi seluruh repo, hanya folder.
Simone Carletti

1
Hebat! Waspadai kesalahan unicode meskipun github.com/buchuki/gitifyhg/pull/98
Andrei

3
Catatan - gitifyhg saat ini sudah ketinggalan zaman dengan versi Mercurial terbaru.
Zoran Pavlovic

6

Ubah repositori Mercurial ke Git di Windows 10

Jika tidak ada masalah dengan pengkodean - gunakan ekstensi TortoiseHG Hg-Git

md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false

Jika ada yang salah dengan pengkodean - gunakan ekspor cepat

Instal Bash

Buka PowerShell sebagai Administrator dan jalankan:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Instal Ubuntu 16.04 LTS dari Microsoft Store

Buka Bash dan jalankan

instal lincah

sudo -s
apt-get update
apt install mercurial

dapatkan fast-export v180317 (saat ini versi setelah 180317 tidak bekerja dengan benar)

cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..

konversikan repositori

git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master

opsi pengkodean:

  • -f pengkodean, seperti -f cp1251
  • --fe pengkodean nama file seperti --fe cp1251

3

hg-git-fast-import

https://github.com/kilork/hg-git-fast-import

Utilitas lain dengan fitur berikut:

  1. Impor satu dan beberapa repositori Mercurial ke repositori Git.
  2. Impor revisi baru dari repositori Mercurial yang diimpor sebelumnya ke repositori Git.
  3. Tag.
  4. Cabang tertutup.
  5. Verifikasi hasil akhir dengan diff.

Anda dapat mendownload biner untuk Anda platform yang dan menempatkan di suatu tempat di jalan atau menginstal dengan cargo(membutuhkan rustakan diinstal ):

cargo install hg-git-fast-import

Maka penggunaannya seperti ini:

hg-git-fast-import single /path/to/source_hg /path/to/target_git

Itu tidak perlu Pythondan Mercurialharus diinstal. Konfigurasi lanjutan memungkinkan untuk mengganti penulis atau cabang, membuat cabang menjadi prefiks dan banyak lagi.


2

Jika Anda menggunakan github.com , mereka tampaknya memiliki fitur impor yang memungkinkan Anda cukup mengetikkan URL proyek hg Anda.

Pertama buat repositori baru dan kemudian pada halaman arahan repositori baru, gulir ke bawah dan klik tombol "Impor kode" .

konteks untuk tombol kode impor

Kemudian ketik URL dari repositori Anda sebelumnya dan tekan "Mulai impor".

konteks untuk tombol "Mulai impor"

Kemudian GitHub akan menangani sisanya!

Github mengurus bisnis untuk Anda

Perhatikan bahwa GitHub akan menanyakan kredensial Anda untuk repositori lama jika diperlukan.

Ooh! Saya menemukan panduan resmi


0

Di Windows bisa sedikit rumit. Setelah mengaktifkan plugin yang tepat di mercurial ( hggit), TortoiseHG juga bisa digunakan.

  1. Kloning repo lincah
  2. Gandakan repo git
  3. Aktifkan konsol: Mengaktifkan konsol
  4. Menggunakan konsol:

    % hg bookmarks hg

    % hg push <relative path to>/<git-repo>


0

Mungkin itu membantu seseorang hari ini (saat mengonversi repositori lincah menjadi git, sambil mempertahankan riwayat). Diuji untuk bekerja dengan mercurial 4.0.1.

~$ git clone https://*old_hg_repo*
~$ git clone https://github.com/frej/fast-export.git
~$ cd fast-export
~$ git checkout tags/v180317
~$ cd ..
~$ mkdir new_git_repo
~$ cd new_git_repo
~$ git init
~$ .../fast-export/hg-fast-export.sh -r ../old_hg_repo/ --force
~$ git checkout HEAD

Dan terakhir untuk mendorong repo lokal Anda yang baru dikonversi.

~$ git push REMOTE '*:*'

Apa perbedaan jawaban Anda dengan jawaban yang diposting sebelumnya ?
maxschlepzig
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.