SubGit 2.0.3 を使用して Subversion リポジトリを Git に移行する作業を行っていますが、再構築全体で完全な履歴を維持しようとしています。ブランチの再構築全体で履歴を維持しているように見える構成がありますが、トランクは維持されていません。
再構築自体は少し...珍しいものでした...そして中間のレイアウトが含まれていました。
初期レイアウト:
- トランク: /ProjectOldName
- ブランチ: /ProjectOldName/Releases
- タグ: なし
中間レイアウト:
- トランク: /trunk/ProjectNewName
- ブランチ: /releases/ProjectNewName
- タグ: なし
最終的なレイアウト:
- トランク: /ProjectNewName/トランク
- ブランチ: /ProjectNewName/branches/releases
- タグ: /ProjectNewName/tags
したがって、変換に使用した subgit マッピングは次のとおりです。
trunk = ProjectNewName/trunk:refs/heads/master
branches = trunk/ProjectNewName:refs/heads/old-master-interim
branches = ProjectOldName:refs/heads/old-master
branches = ProjectNewName/branches/releases/*:refs/heads/releases/*
branches = releases/ProjectNewName/*:refs/heads/old-releases-interim/*
branches = ProjectOldName/Releases/*:refs/heads/old-releases/*
tags = ProjectNewName/tags/*:refs/tags/*
shelves = ProjectNewName/shelves/*:refs/shelves/*
これにより、リリース ブランチの履歴が維持され、ファイルのログは再構築を超えてしまいます...ただし、ブランチの作成 (再構築の前に発生) で停止するように見えました。ただし、マスター上の同じファイルの履歴は、再構築の最終ステップの作成で停止し、予期された「old-master-interim」および「old-master」ブランチは git リポジトリに存在しませんでした。
svn コピーを使用して再構築が行われたようです (つまり、手動でファイルをコピーして再コミットしませんでした)。最終的なレイアウトの履歴は正しく保存されていました。中間レイアウトは 2 回作成されましたが、最初の試みは削除され、履歴が保存されていないことを示すコメントが付けられました。したがって、再構築コミットのチェーンが(トランクの場合)行ったことがわかります。
- /ProjectOldName から始めます
- ディレクトリ /trunk/ProjectNewName を追加
- /ProjectOldName/ から /trunk/ProjectNewName/ に複数のディレクトリ (すべてではありませんがほとんど) を追加します。これらのディレクトリの削除は追加されません (ディレクトリがそのブランチにまだ存在していないため、これがどのように行われたかはわかりません)。
- /trunk/ProejctNewName/ 内の複数のディレクトリ (上記で追加したものと同じセット) を /ProjectOldName/ から置き換えます (わずかに異なるリビジョンで、おそらく以前の追加をやり直そうとしていますか?)
- ディレクトリ /trunk/ProjectNewName を削除 (履歴が保存されていないというコメント付き)
- ディレクトリ /trunk/ProjectNewName を追加 (2 回目)
- /ProjectOldName/ から /trunk/ProjectNewName/ に複数のディレクトリを追加します。同じディレクトリのセットをもう一度追加しますが、今回は削除が存在しませんでした
- ディレクトリ /ProjectNewName/trunk を追加
- /trunk/ProjectNewName/ から /ProjectNewName/trunk/ に複数のディレクトリを追加します
- ディレクトリ /trunk/ProjectNewName を削除
似ていますが、リリース ブランチでは少し異なります。
- /ProjectOldName/Releases から始めます
- ディレクトリ /releases を追加
- 複数のディレクトリ (ブランチごとに 1 つ) を /ProjectOldName/Releases/ から /releases/ に追加します。
- ディレクトリ /releases を削除
- ディレクトリ /releases/ProjectNewName を追加
- 複数のディレクトリ (ブランチごとに 1 つ) を /ProjectOldName/Releases/ から /releases/ProjectNewName/ に追加します。
- ディレクトリを追加 /ProjectNewName/branches/releases
- /releases/ProjectNewName/ から /ProjectNewName/branches/releases/ に複数のディレクトリ (ブランチごとに 1 つ) を追加します。
- ディレクトリ /releases/ProjectNewName を削除
唯一の本当の違いは、ブランチではなくトランクで発生した「複数のディレクトリを置き換える」ステップのようです。
結局のところ:
- トランクの再構築全体で履歴を維持しながら、SubGit に上記を変換させる方法はありますか?
- SubGit は、元のリポジトリ レイアウトのようにトランクの下にブランチを持つことを処理できますか (つまり、/OldProjectName のトランク、/OldProjectName/Releases のブランチ)?
- 「トランク」マッピングについて何か特別なことはありますか? それとも、実際には「ブランチ」マッピングと変わらないのでしょうか? 私の知る限り、svn と git の両方について、それぞれ「trunk」ディレクトリと「master」ブランチについて特別なことは何もありません。
- ブランチの履歴は再構築に問題がないように見えますが、ブランチの元の場所に進むのではなく、ブランチの作成で停止します。これは何が原因で、どのように修正できますか (可能な場合)?