44

私は、20 個のモジュールが相互に接続されている Java レガシー プロジェクトに取り組んでいます。したがって、各モジュールには独自のブランチとタグがあります。構造は次のようになります。


/projects
   .svn
   - module1
       .svn
       -trunk
       -branch
       -tag
   - module2
       .svn
       -trunk
       -branch
       -tag

プロジェクト フォルダーは約 30 GB でgit-svn clone、すべてのモジュールをチェックアウトするために使用することはほとんど不可能ですが、それはすべてのブランチとタグをカウントするためです。

ローカルでコミットを開始できるように、プロジェクトのみのトランクを複製することはできますか?

4

3 に答える 3

63

編集:私は質問を読み違えて、あなたが実際に尋ねたことではなく、あなたが尋ねていると思っていたことに答えました。

トランクだけを複製するには

単一の Subversion ディレクトリのクローンを作成するのは簡単で、実際にはどのディレクトリをクローンするかは問題ではありません。「レイアウト」引数を指定せず、トランクへのパスを直接指定します。

git svn clone http://path.to.svn.repo/module1/trunk

タグやブランチなどを含む特定のモジュールを複製するには

「通常」git svn cloneは次のようになります。

git svn clone --stdlayout http://path.to.svn.repo/

代わりに使用したいものは次のようになります。

git svn clone --stdlayout http://path.to.svn.repo/module1/

trunkこれにより、フォルダーの、branchおよびtagサブフォルダーが検索され、module1それらのクローンが作成されます。

于 2013-01-30T09:43:04.990 に答える
13

--stdlayout を使用した git svn clone は、私にとってまったく正しいことをしていないことがわかりました。

同じ状況で、この戦略はうまく機能しました。

git svn init --trunk $repo/projects/module1/trunk --tags $repo/projects/module1/tag --branches $repo/projects/module1/branch
git svn フェッチ
于 2013-02-20T22:08:24.577 に答える
4

@me_and の回答に基づいて、さらに情報を追加したかっただけです。

トランクだけを複製するために指定されたコマンドは機能しますが、git フォルダーで作成された構造は次のとおりです。

refs
 |--remotes
    |--git-svn

これはrefs/remotes/git-svnと同等です。

代わりにこれを行う場合:

git svn clone https://domain/svn/repo/trunk --no-metadata --authors-file=authors.txt --trunk=https://domain/svn/repo/trunk

作成される構造は次のとおりです。

refs
 |--remotes
    |--origin
       |--trunk

これはrefs/remotes/origin/trunkと同等です

2 番目の構造はより git に適しているように見え、作成しなければならないコマンドとシェル スクリプトを削減できる可能性があります :)

PS [--no-metadata] および [--author-file] 引数はオプションです。

  • metadata オプションは、git がコミット メッセージの後に svn 情報を追加するのを無効にします。
  • author-file オプションを使用すると、svn の貢献者を git の貢献者にマップできるため、svn の履歴リビジョンが git で台無しになることはありません。
于 2016-11-24T12:11:53.530 に答える