git-svn
多くのブランチを持つ大規模な Subversion リポジトリを考えると、最初にクローンを作成しtrunk
、後で特定のブランチを追加して使用を開始したいと考えています。これを行う方法を少なくとも3つ見ましたが、それらのいずれかが「公式」ですか、それとも最善の方法はありますか?
次のレイアウトを想定します。
https://svn-repo.com/svn/company
+--core
| +--trunk
| +--branches
| | +--fastboot
| | +--playground
| +-tags
+--mobile
+--trunk
+--branches
+--tags
したがって、プロジェクトのトランク (ブランチなし) リビジョン 12345 のみを複製するにはcore
:
$ git svn clone --username=svnuser -r 12345 -Ttrunk https://svn-repo.com/svn/company/core
core
これにより、プロジェクトが同じ名前のディレクトリに複製され、実行git svn rebase
するとすべての変更が取り込まれます (リビジョン 12345 以降)。この時点.git/config
で、次のようなものが含まれているはずです。
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
ここまでは順調ですね。playground
ここで、ブランチを追加したいとしましょう。これは少しぼやけているところです。
オプション 1.git/config
:そこにブランチを追加して、既存のリモートを更新します。
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
branches = core/branches/{playground}:refs/remotes/branches/*
この時点で、次のことができました。
ブランチのリビジョン 23456 を取り込みます
playground
$ git svn fetch -r 23456
ローカルブランチを作成してそこに切り替える
$ git checkout -b playground branches/playground
最新の変更を取り込みます。
$ git svn rebase
オプション 2.git/config
: (既存のものに加えて)新しいリモートを追加します。
[svn-remote "playground"]
url = https://svn-repo.com/svn/company
fetch = core/branches/playground:refs/remotes/playground
ここからの手順は、オプション 1の手順と似ています。
$ git svn fetch playground -r 23456
$ git checkout -b playground remotes/playground
$ git svn rebase
オプション 3 : 誰かが既存のリモートに新しいフェッチを追加するのも見ました:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
fetch = core/branches/playground:refs/remotes/branches/playground
それが正しいかどうか、またはそれが機能するかどうかは完全にはわかりません。私はそれを見た場所を見つけることができません。
現在、私はOption 1に固執していますが、これを行うための最も適切な方法を本当に知りたいです。