web-dev-qa-db-ja.com

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

Fast-exportでhg2gitを試し、hg-gitで試しました。

どちらも成功しませんでした。 hg2gitは実際に機能しましたが、Unixマシンを実行している友人に依頼する必要がありました。そして、それはファイル全体のすべての改行を台無しにしました。

hg-gitは単にlibzip圧縮エラーで失敗しました。

Windowsでhgリポジトリをgitに変換することに成功した人はいますか?

明確にするために、私は相互運用性については気にしません。リポジトリ全体をhgからgitに移植して、履歴を一緒に持ちたいと思います。変更を前後にプッシュする必要はありません。変換は1回だけです。

45
Tigraine

MercurialリポジトリをGitに(完全なブランチで)正常にエクスポートするために、私のMacで以下を実行しました:

mkdir myrepo; cd myrepo;
git clone git://repo.or.cz/fast-export.git .
rm -rf .git .gitignore
git init
./hg-fast-export.sh -r ../path/to/local/hg/repo
git clean -f # remove fast-export files
56
Mauvis Ledford

Windows 7 64ビットソリューション

MercurialリポジトリをGitリポジトリに変換する方法。

これは、私がこれまでに把握しなければならなかったイベントの最も異常なシーケンスの1つですが、私はPythonまったくそうではありません。

私の開始環境

  • Visual Studio 2010/2012
  • TortoiseHg 2.8.2; Mercurial 2.6.3とPython 2.7.3が含まれます
  • Git 1.8.3

途中で得たエラー

  • Pythonが見つかりませんでした
  • PythonでMercurialモジュールが見つかりませんでした
  • Easy_Installは存在しません
  • Mercurialモジュールをコンパイルできませんでした

私がしたこと

  • Python27スタンドアロンをインストールする必要がありました( http://www.python.org/
  • 環境変数のパスにパスを入れてください
  • Easy_Installをインストールする必要がありました( http://sourceforge.net/projects/pywin32/files/
  • Python Scripts pathも環境変数にあることを確認してください
  • そして、これを取得してください... MSDNに移動してVisual Studio 2008のフルバージョンをダウンロードし、64ビットオプションをオンにしてC++のみをインストールする必要がありました(そのため、Easy_InstallはPython用のMercurialモジュールをコンパイルできました)が、取得できませんでした64ビットオプションが見つからなかったため、Expressエディションで動作します。

手順

  • コマンドコンソール(すべてがインストールされた後)
    • C:\ easy_install Mercurial

(すべてをインストールした場合は、Mercurialモジュールをダウンロードしてコンパイルする必要があります)

  • Gitコンソール
    • @ mauvis-ledfordと@bennoのステップに従ってください(ありがとう!!!)
14
Trey Gramann

今日の時点で、gitディストリビューションにはMercurialリポジトリをgitに変換するツール hg-to-git が含まれています。最新のgitバージョンがインストールされている場合は、そこにあります。私にとってはとてもうまくいきました。

8

MercurialリポジトリのローカルクローンをGitHubにエクスポートする簡単な例を次に示します。

まず、hggit拡張子を~/.hgrcファイルに追加します(まだ追加していない場合)。

[extensions]
hggit =

次に、Mercurialリポジトリのルートから次のコマンドを実行します。

hg bookmark -r default master
hg Push -f git+ssh://[email protected]/bolinfest/plovr.git

個人的には、-fを実行するときにhg Pushを指定する必要がありましたが、それはMercurialリポジトリに複雑なブランチがあったためと思われます。移行に必要でない場合があります。

GitHubリポジトリへのgit+ssh: URIではなくgit: URIがあることを確認してください。 (git+ssh: URIは、新しいGitHub UIで見つけるのが少し難しいです。)

リポジトリのサイズによっては、hg Pushの実行にしばらく時間がかかることがありますので、しばらくお待ちください。完了すると、GitHubでプロジェクトを確認できるようになります。この例では、私のプロジェクトは https://github.com/bolinfest/plovr にあります。

ご想像のとおり、これで誰でも次のようにパブリックGitHubリポジトリを複製できます。

git clone [email protected]:bolinfest/plovr.git
8
bolinfest

Windowsでの移行のために用意されたすべての要素を以下に示します。

前提条件

  • Git
  • MercurialまたはTortoiseHg
  • Python 2.7(3.xは機能しません)

インストール中に、.shファイルへのバインドを許可します。
すべてのツールがPATH環境変数で使用できることを確認します。

移行

  1. Cmd.exeを開きます
  2. mkdir c:\git_work
  3. cd c:\git_work
  4. git clone http://repo.or.cz/r/fast-export.git
    これにより、フォルダーが作成されます:c:\ git_work\fast-export \
  5. 今、あなたはPython用のMercurialライブラリが必要です。 hereから取得するか、次の手順を実行します。
    c:\ git_work\fast-export\hg-fast-export.pyを編集:

    import sys # move this line up here
    # Add a new line that imports [Mercurial libraries][2] from this Zip:
    sys.path.append(r'C:\Program Files\TortoiseHg\library.Zip')
    # ...above the old line:
    from Mercurial import node
    
  6. mkdir MyNewGitRepo

  7. 高速エクスポートのコンテンツをMyNewGitRepoにコピーし、.git *を無視します
  8. hg-fast-import.sh -r c:\Path\To\MyOldHgRepo
  9. これが「エラー:リポジトリに少なくとも1つの名前のないヘッドがあります...」で失敗した場合は、パラメーターを使用して最後の行を呼び出します。
  10. 移行スクリプトを削除します。

    git clean -n # see what would happen
    git clean -f # delete migration files
    
  11. インデックスと作業ツリーをリセットして、不足しているファイルを復元します。

    git reset --hard
    
7
Piper

GitHubを使用している場合およびMercurialリポジトリはHTTP/HTTPS経由で利用できます...

Fast-import(問題なくレポを変換する優れたツール)を使用し、新しいgitレポを開発ボックスからGitHubにプッシュする過程で、「クイックセットアップ」中に「別のリポジトリからコードをインポートする」オプションに気づきました"GitHubのgitリポジトリの一部。

私はそれをテストし、高速インポートを使用した場合と同じ結果を達成しました。私の場合、GitHubインポートオプションを使用する方が高速インポートよりも少し簡単であることがわかりました(この場合も、このツールに対しては何も行われず、GitHubでは機能しません)。私のために働いたステップは:

  1. 新しいGitHubリポジトリを作成する
  2. リポジトリが作成されたら、クイックセットアップで[コードのインポート]オプションを選択します
  3. 公開されているhg、svn、またはtfsリポジトリのURLを入力し、[Github Importer]ダイアログで[Begin import]を押します
6
Mike Atkisson

あなたが本当にそれをすることだけを望んでいるなら、あなたはhg export このような:

hg export 0:tip -o all-changesets-in-one.patch

または、gitがファイルごとに1つのパッチのみを好む場合は、次のようにチェンジセットごとに1つのパッチを作成できます。

hg export 0:tip -o changeset-%r.patch

おそらくgit applyは、これらの形式のいずれかを使用できます。

3
Ry4an Brase

ここで他の答えをいくつか試しましたが、あまりうまくいきませんでした。多くの試行錯誤の後、私にとってうまくいったかなり簡単な方法は次のとおりです:

まず、 hggitをダウンロード 拡張子を付けて、〜/ .hgrcまたはMercurial.iniファイルに追加します(まだ行っていない場合)。

[extensions]
hggit=\path\to\hg-git

Gitに持ち込むブランチごとに、Hgブックマークをブランチの先端に追加します。

hg bookmarks hg-default

次に、hggitを使用して、hg gexportを実行し、現在のHgリポジトリと同じフォルダーにgitリポジトリを作成します。その結果、.gitフォルダーが追加されます。その後、.hgフォルダーをリポジトリから削除すると、ローカルのgitリポジトリが残ります。

2

ローカルプロセスなしでGitとHgの間で変換する簡単な方法は、 無料のKilnHg/Fogbugzアカウント を開き、プライベートリポジトリを作成し、1つの形式をそれにプッシュし、他の形式をプルします。 Git&Hgと(すべき)の両方がシームレスな変換を行います。

2
CAD bloke

tailor を試しましたか? VCSのように、ほとんどすべてを何にでも変換でき、段階的に変換することもできます(つまり、一度変換してから、ソースからターゲットに新しいコミットを追加し、最初から再変換する必要はありません)。今は必要ないかもしれませんが、それでも素晴らしい機能です。

2
Nowhere man

誰かがOS XでHomebrewを使用していて、それを正しく機能させるためのマイナーな調整を知りたい場合は、こちらの記事を参照してください。 http://www.ccannon.net/Mercurial-to-git-conversion-with -homebrew.html

0
Chris Cannon

Windowsでhg2gitを実行できない理由は何もないようです。 pythonこれにはWindowsポートがあります。適切なライブラリが存在することを確認して、ウィンドウボックスで実行してください。

0
Jeremy Wall