MercurialフォルダーをGitリポジトリに変換する


137

Mercurialでの経験はあまりありませんが、私はほとんどGitの人です。

gitリポジトリの特定のMercurialフォルダー/ファイルをミラーリングしたいと思います。私が実際にやろうとしていることは、MercurialリポジトリからGitにファイルの履歴をエクスポートし、これを将来のコミットと同期させることができるようにすることです。

続行する方法について何か提案はありますか?私は、Mercurialパッチの履歴を取得し、すべてのコミットをパッチとして定期的にエクスポートし、MercurialパッチをGitリポジトリに適用する方法が適切だと思います。


現在、GitHub.comがインポートします
Brad Turek

回答:


125

のLinuxか何かでbash/shまたは類似の、またはpython、してみてください速い輸出

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
OK、GitをMercurialと同期させたいですか?同様に、この
ヨハン

1
「/ path / to / old / mercurial_repo」は(URLではなく)ファイルシステム上のパスである必要があるため、以前に元のリポジトリを複製する必要があることに注意してください。
mar10 2013

1
私の場合、を使用する必要がありましたPYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo。それとは別に、それは完璧に機能しました。
Artur Czajka 2014年

5
簡潔な回答ありがとうございます!sudo easy_install mercurial最初にしなければならなかった。指示に含めるとよいでしょう
マーカスウェスティン

3
Windowsマシンを使用している場合は、Git bash使用してhg-fast-export.sh
Augustas

61

Windows:TortoiseHG Hg-Git拡張

Hg-Gitは、MercurialリポジトリをGitに変換するために使用できます。SSH、HTTP、またはHTTPSを介してアクセスするローカルリポジトリまたはリモートリポジトリを使用できます。

ローカルリポジトリの変換の例。

  1. Hg-Gitをインストールします。

    • Windowsでは、TortoiseHgにはHg-Gitが付属していますが、設定ツール(拡張機能のセクション)で有効にする必要があります。

      TortoiseHg設定

      または手動で ~/mercurial.ini

      [extensions]
      hggit =
      
  2. 次のコマンドを使用して、リポジトリを変換します。

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

hgブックマークは、Gitのを混乱現在チェックアウトブランチにそうでないHG-のgitプッシュなどの問題を防止する必要があります。これhgにより、Gitリポジトリで名前が付けられたブランチが作成されます。マスターの変更を取得するには、次のコマンドを使用します(最初の実行でのみ必要で、後でgit mergeまたはを使用するだけですrebase)。

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

私はgit-hgにかなりバグがあることがわかりましたが、これは魅力的に機能し、追加のダウンロードを必要としなかったので便利です。
Timmmm、2015年

2
リポジトリ全体ではなく、フォルダが必要でした。
Simone Carletti、2016年

githubのは今見る、githubのから直接これをサポートツールを持っているstackoverflow.com/questions/16037787/...
トミー

@SimoneCarletti この質問を見てください。ファイル/フォルダとその履歴を一時リポジトリにエクスポートするのに役立ちます。次に、提供されているソリューションを使用して、一時的なMercurialリポジトリをGitに変換できます。
naXa 2016年

13

次のことができます(Mercurial側から):

  • 変換拡張を使用して--filemapディレクトリ|のみ必要なファイルと小さなに、元のレポのオプションの変換部分を
  • hg-git拡張を使用して、Gitにストリップされたリポジトリをプッシュ

または(hg-gitの代わりに)GitMercurialブリッジを使用して、Gitからリポジトリを複製|プル


11

Gitify

変換を実行するためのよりモダンで使いやすい代替手段のようです 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
リポジトリ全体を変換するのではなく、フォルダのみを変換します。
Simone Carletti、2015年


3
注-現在、gitifyhgは最新のMercurialバージョンではかなり古くなっています。
Zoran Pavlovic 2017

4

Windows 10でMercurialリポジトリをGitに変換する

エンコーディングに問題がない場合-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

エンコーディングに問題がある場合-高速エクスポートを使用してください

Bashをインストールする

管理者としてPowerShellを開いて実行します。

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

Microsoft StoreからUbuntu 16.04 LTSをインストールする

Bashを開いて実行する

Mercurialをインストールする

sudo -s
apt-get update
apt install mercurial

高速エクスポートv180317を取得(現時点では、180317以降のバージョンは正しく機能しません)

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

リポジトリを変換する

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

エンコーディングオプション:

  • -f エンコーディング、 -f cp1251
  • --fe のようなファイル名エンコーディング --fe cp1251

3

hg-git-fast-import

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

次の機能を持つ別のユーティリティ:

  1. 単一および複数のMercurialリポジトリのGitリポジトリへのインポート。
  2. 以前にインポートされたMercurialリポジトリからGitリポジトリへの新しいリビジョンのインポート。
  3. タグ。
  4. 閉じた枝。
  5. diffによる最終結果の検証。

プラットフォームのバイナリをダウンロードして、パスのどこかに置くか、次のようにインストールできますcargo(インストールが必要です)。rust

cargo install hg-git-fast-import

次に、使用法は次のようになります。

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

それは必要ありませんPythonし、Mercurialインストールします。高度な設定により、著者やブランチを置き換えたり、ブランチにプレフィックスを付けたりすることができます。


2

github.comを使用している場合、インポート機能あるようですあなたは、単にあなたのHGプロジェクトのURLを入力することができます。

最初に新しいリポジトリ作成し、次に新しいリポジトリのランディングページで一番下までスクロールして、[ コードのインポート]ボタンをクリックします

コードのインポートボタンのコンテキスト

次に、以前のリポジトリのURLを入力して、[インポートの開始]をクリックします

「インポート開始」ボタンのコンテキスト

その後、GitHubが残りを処理します。

Githubがビジネスをサポート

GitHubが古いリポジトリの認証情報を必要とする場合は、それを要求することに注意してください。

おお!公式ガイドを見つけました


0

Windowsでは少し注意が必要です。mercurial(hggit)で適切なプラグインを有効にすると、TortoiseHGも使用できるようになります。

  1. Mercurialリポジトリのクローン
  2. gitリポジトリのクローン
  3. コンソールを有効にする:コンソールを 有効にする
  4. コンソールの使用:

    % hg bookmarks hg

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


0

たぶん、それは今日の誰かを助けます(歴史を保持しながらmercurialリポジトリをgitに変換するとき)。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

そして最後に、新しく変換されたローカルリポジトリをプッシュします。

~$ git push REMOTE '*:*'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.