3

次のようなレイアウトのリポジトリがあります。

    トランク/
        プロジェクトA
        プロジェクトB
    支店/
        projectA-1.0
        projectB-1.0
    タグ/
        projectA-1.0.1
        projectB-1.0.1

それらを、trunk/projectA を最上位ディレクトリとして、すべてのブランチを git ブランチとして、個別の git リポジトリに変換したいと考えています。

git svn initlikeを指定しようとすると、異なるリビジョンでgit svn init -T trunk/projectA -b branches -t tags http://svn.example.comフォローアップが不可解に失敗します。git svn fetch200まで上がることもあれば、止まってしまうこともあります。

私の現在の考えでは、Subversion リポジトリ全体を、各プロジェクトのサブディレクトリを持つ単一のエンティティとしてミラーリングする git リポジトリを作成する必要があります。次にgit-filter-branch、サブディレクトリをプロジェクトのルートに書き換えるために使用します。

ただし、and を使用したいようにブランチを動作させる方法がわかりませんgit-filter-branch

また、各プロジェクトの「トランク」に異なるブランチを持つ単一の git リポジトリを作成することも理想的です。この場合、実際にマスターがなくても問題はありません。

4

2 に答える 2

5

svn を git リポジトリにインポートするためにsvn2gitを検討しましたか?

git svn clonesvn に次のコードがある場合よりも優れ ています。

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

git-svnコミット履歴を調べて、新しい git リポジトリを構築します。
すべてのブランチとタグをリモート svn ブランチとしてインポートしますが、本当に必要なのは git-native ローカル ブランチと git タグ オブジェクト です
したがって、このプロジェクトをインポートすると、次のようになります。

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]

プロジェクトで svn2git が完了すると、代わりに次のようになります。

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

最後に、master の HEAD が svn リポジトリの現在のトランクと同じであることを確認します。

したがって、あなたの場合、実際の git ブランチを適用することができますgit-filter-branch

于 2009-02-12T05:09:04.180 に答える
0

私がやったことは、リポジトリのルートのクローンを作成し、プロジェクトごとにその新しいgitリポジトリをコピーして、物事を再配置することでした。きれいでもきれいでもありませんでしたが、私が頻繁に見る必要がなくなったのはレガシーコードでした。

于 2010-04-28T17:49:50.293 に答える