複数の独立した git リポジトリに変えたい svn ツリーがあります。この移行の 1 つの側面は、Subversion ツリー内のクロスモジュール シンボリック リンクである inode を、git リポジトリ内の実際のファイル コンテンツに置き換える必要があることです。したがって、ある時点でA/foo
が へのシンボリック リンクB/foo
である場合、対応する git commit にA/foo
は、 の内容を含む通常のファイルが必要ですB/foo
。後で svn commit が のコンテンツを変更した場合B/foo
、 の git モジュールにA
は、この変更を反映する一致する commit が必要です。
これにはどのようなツールを使用できますか?
今のところ、これが私が思いつくことができる最高の計画です:
- svn 全体を git にクローンします
fast-export
それ- シンボリックリンクをコンテンツファイルに変換するために、カスタム作成のスローアウェイコードを使用して出力をマッサージします
fast-import
結果を新しい単一の git リポジトリに- そこからサブモジュールを作成する
しかし、おそらく、既存のコード、既存の機能、既存のツール、または私が考えもしなかったショートカットを使用して、より簡単な解決策を提案できるでしょう。
おそらく、Subversion 側でこれらのステップをさらに処理する方法さえあるでしょう。私はファイルのサブバージョン コピーの作成を多用したため、また、その概念は git の概念ではほとんど表現できないことがわかっているため、上記のアプローチではコピーされたファイルが原因でバージョン履歴が失われるのではないかと心配しています。