Mercurial klasörünü Git deposuna dönüştürme


137

Mercurial ile çok büyük bir deneyimim yok, çoğunlukla Git erkeğiyim.

Git deposunda belirli bir Mercurial klasörünü / dosyasını yansıtmak isterim. Aslında yapmaya çalıştığım şey, bir dosyanın geçmişini bir Mercurial deposundan Git'e aktarmak ve bunu gelecekteki taahhütlerle senkronize tutabilmek.

Nasıl ilerleyeceğiniz konusunda herhangi bir öneriniz var mı? Gitmenin yolunun Mercurial yamasının tarihini almak, her bir taahhüdü periyodik olarak bir yama olarak dışa aktarmak ve Mercurial yamaları Git deposuna uygulamak olmalıdır.


Bugünlerde GitHub.com bunu sizin için içe
Brad Turek

Yanıtlar:


125

On Linux ya da bir şey ile bash/shya da benzer ya da python, deneyin hızlı ihracat :

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
Tamam, git mercurial ile senkronize mi tutmak istiyorsun? Gibi bu ?
Yohann

1
'/ Path / to / old / mercurial_repo' dosyasının dosya sisteminde (URL değil) bir yol olması gerektiğini unutmayın, bu nedenle daha önce orijinal veri havuzunu klonlamanız gerekir.
mar10

1
Benim durumumda kullanmak zorunda kaldım PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Bunun dışında kusursuz çalıştı.
Artur Czajka

5
Kısa cevap için teşekkürler! sudo easy_install mercurialİlk önce olmalıydım . Talimatlarda olması güzel olurdu
Marcus Westin

3
Windows makinesindeyseniz Git bash'ı
dosyasını

61

Windows: TortoiseHG Hg-Git uzantısı

Hg-Git bir Mercurial deposunu Git'e dönüştürmek için kullanılabilir. SSH, HTTP veya HTTPS üzerinden erişilen bir yerel havuzu veya uzak bir havuzu kullanabilirsiniz.

Yerel depo dönüştürme örneği.

  1. Hg-Git'i yükleyin.

    • Windows'da, TortoiseHg Hg-Git ile birlikte gelir, ancak ayar aracıyla etkinleştirmeniz gerekir (uzantılar bölümünde)

      TortoiseHg Ayarları

      veya manuel olarak ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Depoyu dönüştürmek için aşağıdaki komutları kullanın:

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

hgİmi Git kafa karıştırıcı henüz kontrol dalına aksi hg-git iter gibi sorunların önlenmesi için gereklidir. Bu hgGit deposunda bir şube oluşturur . Master'daki değişiklikleri almak için aşağıdaki komutları kullanın (sadece ilk çalıştırmada gerekli, daha sonra sadece git mergeveya kullanın rebase):

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

Git-hg oldukça adamcağız buldum, ama bu bir cazibe gibi çalıştı ve güzel herhangi bir ek indirme gerektirmedi.
Timmmm

2
Repoyu değil, bir klasörü istedim.
Simone Carletti

github artık bunu doğrudan github'dan destekleyen bir araca sahip, bkz. stackoverflow.com/questions/16037787/…
Tommy

@SimoneCarletti Bu soruya bir göz atın . Geçici bir depoda bir dosya / klasörü ve geçmişini dışa aktarmanıza yardımcı olacaktır. Daha sonra geçici Mercurial deposunu Git'e dönüştürmek için sağlanan çözümlerden herhangi birini kullanabilirsiniz.
naXa


11

Gitify

Dönüşüm gerçekleştirmek için daha modern ve kullanımı kolay bir alternatif gibi görünüyor 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
Reponun tamamını dönüştürmek istemedim, sadece bir klasörü.
Simone Carletti


3
Not - gitifyhg, en son Mercurial sürümleriyle güncelliğini yitirmiştir.
Zoran Pavlovic

4

Mercurial deposunu Windows 10'da Git'e dönüştürme

Kodlamada sorun yoksa - TortoiseHG Hg-Git uzantısını kullanın

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

Kodlamada bir sorun varsa - hızlı dışa aktarma kullanın

Bash Yükle

PowerShell'i Yönetici olarak açın ve çalıştırın:

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

Microsoft Store'dan Ubuntu 16.04 LTS'yi yükleyin

Bash'i aç ve çalıştır

cıva takmak

sudo -s
apt-get update
apt install mercurial

hızlı dışa aktarma v180317 (şu anda 180317'den sonraki sürümler düzgün çalışmıyor)

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

veri havuzunu dönüştürmek

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

kodlama seçenekleri:

  • -f kodlama, gibi -f cp1251
  • --fe gibi dosya adı kodlaması --fe cp1251

3

hg-git-hızlı-ithalat

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

Aşağıdaki özelliklere sahip başka bir yardımcı program:

  1. Tek ve birden fazla Mercurial veri havuzunun Git veri havuzuna aktarılması.
  2. Daha önce içe aktarılan Mercurial veri havuzlarından Git veri havuzuna yeni revizyonların alınması.
  3. Etiketler.
  4. Kapalı dallar.
  5. Nihai sonucun fark ile doğrulanması.

Platformunuz için ikili dosyayı indirebilir ve yola bir yere koyabilir veya şununla yükleyebilirsiniz cargo( rustkurulması gerekir ):

cargo install hg-git-fast-import

O zaman kullanım şöyle:

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

Bu ihtiyacı yoktur Pythonve Mercurialyüklenecek. Gelişmiş yapılandırma, yazarların veya dalların değiştirilmesine, dalların ön ekinin yapılmasına ve daha fazlasına olanak tanır.


2

Github.com kullanıyorsanız , hg projenizin URL'sini yazmanıza izin veren bir içe aktarma özelliğine sahip gibi görünüyorlar .

Önce yeni bir havuz oluşturun ve ardından yeni deponun açılış sayfasında aşağıya doğru ilerleyin ve "Kodu içe aktar" düğmesini tıklayın .

kodu içe aktar düğmesi için bağlam

Ardından önceki deponuzun URL'sini yazın ve "İçe aktarmaya başla" yı tıklayın.

İçe aktarmayı başlat "düğmesi için bağlam

Sonra GitHub gerisini halleder!

Github sizin için iş ilgileniyor

GitHub'ın eski depoya ihtiyaç duyuyorsa kimlik bilgilerinizi isteyeceğini unutmayın.

Ooh! Resmi kılavuzu buldum


0

Windows üzerinde biraz zor olabilir. Mercurial ( hggit) içinde doğru eklentileri etkinleştirdikten sonra TortoiseHG de kullanılabilir.

  1. Civa mercurial repo
  2. Git kopyasını kopyala
  3. Konsolu etkinleştir : Konsolu etkinleştir
  4. Konsolu kullanma:

    % hg bookmarks hg

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


0

Belki bugün birisine yardımcı olur (bir merkür deposunu geçmişi korurken git'e dönüştürürken). Civa ile çalıştığı test edilmiştir 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

Ve son olarak, yeni dönüştürülmüş yerel repoyu itmek için.

~$ git push REMOTE '*:*'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.