2016-08-31 16 views
0

私は非常にぐらいの大きさのSVNリポジトリの変換に取り組んでいます。 〜5つの異なる成果物を含む約50のプロジェクト(一部のプロジェクトはすべての製品で共有され、他のプロジェクトは2つの製品のみで共有され、多くのプロジェクトは特定の製品に固有です)。ここに約15年のコード履歴があります(〜16K svnリビジョン)。svn:externalsをgitタグに変換する方法

SVNに変換した後、早めにSVN:externalsを使用していくつかのリリースをタグ付けしました。以下のように(チェックアウト後のディスク上の)私たちのコードの構造は次のとおりです。

product1_root 
    -> shared_project 
    -> project_1 
    -> project_2 
    -> project_3 
product2_root 
    -> shared_project 
    -> project_4 
    -> project_5 

次のようにSVNで構造がある(B/T/TR)=標準支店/タグ/トランクサブディレクトリ:

product1_root (b/t/tr) 
shared_project (b/t/tr) 
project_1 (b/t/tr) 
project_2 (b/t/tr) 
project_3 (b/t/tr) 
product2_root (b/t/tr) 
project_4 (b/t/tr) 
project_5 (b/t/tr) 

externalsを使用するときは、product1_rootおよびproduct2_rootプロジェクトで外部/外部/外部project2/3とshared/project4/5をそれぞれセットアップして、ディスク上に上記の構造を作成します。その結果、リリースを行うときに、product1/2_rootプロジェクトのみがタグを受け取りました(SVN外部が適切なバージョンのサブプロジェクトを自動的に取得します)。

私たちは後で、すべてのプロジェクトに明示的にタグを付け、ビルドのためにそれらをすべて引き出すためにスクリプトを使用することで、外部を取り除きました。

product1_rootからproject_1、project_2、project_3、およびshared_projectにタグを伝播させて、新しいgitリポジトリの残りの履歴と一致するようにする方法はありますか?

または、これを移行前または移行後のタスクのいずれかに取り組もうとしていますか?

私はたくさんのツールを見てきました。それらはすべてsvn:externalsを完全に無視するか、サブモジュールに変換しようとしています。

+0

yay! (なぜSEはこれを許可するのでしょうか?)自由に理由を述べてください。ありがとう。 – kinar

答えて

0

私はこれを最終的に考え出しました。私のsvn:externalsはrepo(頭ではない)の特定のペグを指すように設定されているので、同じボートにいなければ動作しないことに注意してください。

また、SVNの改訂履歴に関して、SVNからgitへの移行を順番に処理する必要があります。次の2つのコマンドは、この(source)を行います:これは、あなたが(支店/タグ/トランク)の標準的なSVNのレポのレイアウトを持っていると仮定し

git svn init [SVN repo url] --stdlayout --prefix=svn/ 
git svn fetch 

。あなたが違う場合は、上記のコマンドを変更する必要があります。上記のコマンドでは、svn /のすべてに接頭辞を付けて、ネイティブgitで作成したコンテンツの代わりにsvnからインポートしたことを示します(必要に応じて後で参照できるように)。

これが終わると(私の16KリビジョンのSVNリポジトリから1つのプロジェクトを取り出すのに約90分かかります)。それは、次のコマンドを使用して、プロジェクトの相関コミット見た目タグSVNのレポで作成され、適切なgitのを見つける:次に、あなたのsvnは日付を検索することができます

git log --before='CCYY-MM-DD' -1 

出力は次のような形式になります:

commit a22182ca563928b4de2143ff98dd0362f9eca36d 
Author: <author> 
Date: Wed Oct 31 21:58:01 2012 +0000 

<Commit comment> 

最後に、ハッシュをコミットし、gitの中で、あなたのタグを作成する最初の数文字を取る:

git tag -a v6.1.1.3 a22182 -m "manually creating git tag for svn:externals based tag" 

タグがあなたのgitで同じであることを確認リポジトリとSVNリポジトリを作成し、残りのコンバージョンを続けます。

関連する問題