web-dev-qa-db-ja.com

ブランチとタグではなくトランクのみをチェックアウトするためにgit-svnを使用する方法は?

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


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

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

プロジェクトのトランクのみを複製して、ローカルでコミットを開始することは可能ですか?

40
toy

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

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

単一の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/

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

56
me_and

--stdlayoutを使用してgit svn cloneを実行しても、適切な結果が得られませんでした。

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

 git svn init --trunk $ repo/projects/module1/trunk --tags $ repo/projects/module1/tag --branches $ repo/projects/module1/branch 
 git svn fetch 
13
Dewey Sasser

@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フレンドリーに見えるため、作成する必要があるコマンドとシェルスクリプトを削減できる可能性があります:)

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

  • メタデータオプションを使用すると、コミットメッセージの後にgitがsvn情報を追加できなくなります。
  • authors-fileオプションを使用すると、svn貢献者をgit貢献者にマッピングできるため、svnの履歴リビジョンがgitで混乱することはありません。
3
stucash