2016-08-24 6 views
0

現在SVNリポジトリをGitにインポートしています。 SVNリポジトリの構造はちょっと面倒ですので、3つの別々のGitリポジトリに変換して、それらをすべて一緒にマージする必要があります。グラフトされたGitの履歴のマージを導入する

これらは、単一の歴史への3つの部分から単純なプロジェクトだった場合、私はちょうど例えば、他の上にそれらをリベースかもしれない:私の例では

cd part3 
git remote add -f part1 url_to_part1 
git remote add -f part2 url_to_part2 
git rebase part2/master 
git rebase part1/master 

しかしpart3は、上記のタグの数十が含まれており、 3つの枝。部品1と2がSVN内のmaster(よく、トランク)にきれいにマージされていたならば、私はthisのようなことをして、ブランチを履歴に正しく移植します。これには、リベースとは異なり、すべてのタグが所定の位置に留まるという利点があります。

しかし、ブランチの1つに孤立したコミットがあり、これを履歴にマージしたいと考えています。私がグラフトの履歴を修正しようとすると、孤立したコミットからの変更が失われます。下の例では、XからCへのマージがSVNで起こったので、移植でリンクを作成できます。しかし、私は移植片がファイルのようなものを使用してグラフ構造を指定することができる方法はありコミットE、Gなど

A-B-C-[ ]-D-E-F-G-H-... 
\// 
    X--O 

上のタグを維持しながら、CとDの間に孤立したコミットOをマージしたいです実際に暗黙のマージを実行しますか?または、私がここで使用するはずのフィルタブランチコマンドがありますか?

+0

[この質問に記載されている](http://stackoverflow.com/questions/3810348/setting-git-parent-pointer-to-a-different-parent/3811028#3811028)これは移植片。リベースして、手動でタグを移動する必要があります。 – jkeirstead

答えて

1

git-svnではなく、レポジトリの1回の変換に適したツールです。 Gitを既存のSVNサーバーのフロントエンドとして使用する場合は便利ですが、ワンタイムコンバージョンの場合はではなくを使用してください。git-svnを使用しますが、svn2gitはこのケースに適しています。

svn2gitというPlenyツールがありますが、おそらく最も良いのはhttps://github.com/svn-all-fast-export/svn2gitのKDEです。そのsvn2gitツールを使用することを強くお勧めします。それは私がそこで利用できると知っている最高です、そして、それはあなたがそのルールファイルでできることに非常に柔軟です。

svnevereverからhttp://blog.hartwork.org/?p=763までの履歴は、SVNリポジトリの履歴をGitに移行する際の履歴を調べるのに最適なツールです。

ルールファイルは、SVNリポジトリ全体を適切なGitリポジトリに変換することができます。

+0

私はSVNリポジトリに対して3つの異なるパラメータセットを持つsvn2gitを使用しています。そして、結果を一緒に縫い合わせようとしています(単一のsvn2gitコマンドがSVNリポジトリの非標準レイアウトに適合しないためです)。 – jkeirstead

+0

私が推薦するsvn2gitユーティリティを**使用していない**を明確にするために、あなたがしようとしているようにジャンプする必要はありません。 ;-) – Vampire

関連する問題