Fast-exportでhg2gitを試し、hg-gitで試しました。
どちらも成功しませんでした。 hg2gitは実際に機能しましたが、Unixマシンを実行している友人に依頼する必要がありました。そして、それはファイル全体のすべての改行を台無しにしました。
hg-gitは単にlibzip圧縮エラーで失敗しました。
Windowsでhgリポジトリをgitに変換することに成功した人はいますか?
明確にするために、私は相互運用性については気にしません。リポジトリ全体をhgからgitに移植して、履歴を一緒に持ちたいと思います。変更を前後にプッシュする必要はありません。変換は1回だけです。
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
MercurialリポジトリをGitリポジトリに変換する方法。
これは、私がこれまでに把握しなければならなかったイベントの最も異常なシーケンスの1つですが、私はPythonまったくそうではありません。
(すべてをインストールした場合は、Mercurialモジュールをダウンロードしてコンパイルする必要があります)
今日の時点で、gitディストリビューションにはMercurialリポジトリをgitに変換するツール hg-to-git が含まれています。最新のgitバージョンがインストールされている場合は、そこにあります。私にとってはとてもうまくいきました。
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
Windowsでの移行のために用意されたすべての要素を以下に示します。
前提条件
インストール中に、.shファイルへのバインドを許可します。
すべてのツールがPATH環境変数で使用できることを確認します。
移行
mkdir c:\git_work
cd c:\git_work
git clone http://repo.or.cz/r/fast-export.git
今、あなたは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
mkdir MyNewGitRepo
hg-fast-import.sh -r c:\Path\To\MyOldHgRepo
移行スクリプトを削除します。
git clean -n # see what would happen
git clean -f # delete migration files
インデックスと作業ツリーをリセットして、不足しているファイルを復元します。
git reset --hard
GitHubを使用している場合およびMercurialリポジトリはHTTP/HTTPS経由で利用できます...
Fast-import(問題なくレポを変換する優れたツール)を使用し、新しいgitレポを開発ボックスからGitHubにプッシュする過程で、「クイックセットアップ」中に「別のリポジトリからコードをインポートする」オプションに気づきました"GitHubのgitリポジトリの一部。
私はそれをテストし、高速インポートを使用した場合と同じ結果を達成しました。私の場合、GitHubインポートオプションを使用する方が高速インポートよりも少し簡単であることがわかりました(この場合も、このツールに対しては何も行われず、GitHubでは機能しません)。私のために働いたステップは:
あなたが本当にそれをすることだけを望んでいるなら、あなたは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
は、これらの形式のいずれかを使用できます。
ここで他の答えをいくつか試しましたが、あまりうまくいきませんでした。多くの試行錯誤の後、私にとってうまくいったかなり簡単な方法は次のとおりです:
まず、 hggitをダウンロード 拡張子を付けて、〜/ .hgrcまたはMercurial.iniファイルに追加します(まだ行っていない場合)。
[extensions]
hggit=\path\to\hg-git
Gitに持ち込むブランチごとに、Hgブックマークをブランチの先端に追加します。
hg bookmarks hg-default
次に、hggitを使用して、hg gexport
を実行し、現在のHgリポジトリと同じフォルダーにgitリポジトリを作成します。その結果、.gitフォルダーが追加されます。その後、.hgフォルダーをリポジトリから削除すると、ローカルのgitリポジトリが残ります。
ローカルプロセスなしでGitとHgの間で変換する簡単な方法は、 無料のKilnHg/Fogbugzアカウント を開き、プライベートリポジトリを作成し、1つの形式をそれにプッシュし、他の形式をプルします。 Git&Hgと(すべき)の両方がシームレスな変換を行います。
tailor を試しましたか? VCSのように、ほとんどすべてを何にでも変換でき、段階的に変換することもできます(つまり、一度変換してから、ソースからターゲットに新しいコミットを追加し、最初から再変換する必要はありません)。今は必要ないかもしれませんが、それでも素晴らしい機能です。
誰かがOS XでHomebrewを使用していて、それを正しく機能させるためのマイナーな調整を知りたい場合は、こちらの記事を参照してください。 http://www.ccannon.net/Mercurial-to-git-conversion-with -homebrew.html
Windowsでhg2gitを実行できない理由は何もないようです。 pythonこれにはWindowsポートがあります。適切なライブラリが存在することを確認して、ウィンドウボックスで実行してください。