2

少し面倒な svn リポジトリを git に変換しようとしています。いくつかのガイドやその他の SO の質問を読んでみましたが、従うべき最善の方法について少し迷っています。

SVN リポジトリには、次のようなフォルダーを含む最上位のフォルダー構造があります。

 |- client
 |- server
 |- website
 |- misc

これらのフォルダーのほとんどは、「標準」の svn 構造を持ってtrunkbranchesますtags。ただし、一部は単なるフラット フォルダーです。

 |- client
    |- trunk
    |- branches
    |- tags
 |- server
    |- trunk
    |- branches
    |- tags
 |- website
 |- misc

ブランチとタグは、異なるフォルダー間で同じ名前を持つ場合があります。たとえば、クライアント フォルダーとサーバー フォルダーの両方に というブランチがある場合があります1.0

svn2gitを使用して個々のフォルダーを変換することができました。履歴とブランチを取得しているようです。フォルダーごとに個別の git リポジトリを作成することができます。ただし、最終的にはすべてを1 つのリポジトリに保持したいと考えています。

各フォルダーのブランチ、タグ、および履歴を維持しながら、これらのフォルダー (現在は git リポジトリ) を 1 つにマージする最良の方法は何ですか? このアプローチを使用すると、コミット履歴とマージ元リポジトリからのブランチの両方が失われるようです...または、重要な手順がいくつか欠けているか、何か間違っているのでしょうか?

それ以外の場合、svn2git各フォルダーで個別に使用することは、svn から git に移行するための最良の方法ではないでしょうか?

4

2 に答える 2

1

私は最終的にこの回答のアプローチを選択しました。

基本的に:

  • svn リポジトリのサブフォルダーごとに git プロジェクトを作成する (svn2git を使用)
  • すべてのリポジトリをマージする新しい git リポジトリを作成する
  • 各プロジェクト (すべてのブランチを含む) をリモートとして追加:

    git remote add alpha <url/path-to-alpha-repo>
    git remote add bravo <url/path-to-bravo-repo>
    git remote add charlie <url/path-to-charlie-repo>
    for r in $(git remote); do
      git config remote.$r.fetch \
      "$(git config remote.$r.fetch | sed -e 's.remotes.heads/all.')"
      git config --add remote.$r.fetch \
      "$(git config remote.$r.fetch | sed -e 's.heads.tags.g')"
      git config remote.$r.tagopt --no-tags
    done
    git remote update
    
  • マージされたリポジトリをリモート リポジトリにプッシュします (今後はこれが「公式」リポジトリになります)。

于 2012-05-12T18:45:04.200 に答える
0

Gitに変換するに、svnリポジトリを次の構造に書き直します。

- trunk
  |-client
  |-server
  |-website
  `-misc
- branches
  |-client
  |-server
  |-website
  `-misc
- tags
  |-client
  |-server
  |-website
  `-misc

svnリポジトリを再構築するにはsvnadmin dump、リポジトリをファイルに移動し、そのファイル内のすべてのパスを更新してからsvnadmin load、更新されたダンプファイルを新しいリポジトリに更新する必要があります。

ダンプファイルの構造を見てください。実際の再構築は、検索/置換をサポートするエディターを使用して簡単に実行できます。ただし、ASCIIメタデータに加えて、ダンプファイルには(リポジトリ内のバイナリファイルの)生のバイナリデータも含まれているため、バイナリセーフである必要があります。

于 2012-05-05T11:14:46.147 に答える