158

Subversion リポジトリを Git サブモジュールとして Git リポジトリに追加する方法はありますか?

何かのようなもの:

git-svn submodule add https://svn.foo.com/svn/proj --stdlayout svn-project

https://svn.foo.com/svn/projSubversion リポジトリを指す場所。

git-svnSubversion リポジトリとやり取りできるものがあることは知っています。Subversionリポジトリをチェックアウトしgit-svnてサブモジュールとして使用する方法があるのではないかと考えています。

4

6 に答える 6

130

いいえ。最善の策は、svn リポジトリのミラーを専用の git リポジトリにセットアップすることです。

git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin git@example.com:project.git
git push origin master

次に、git リポジトリをサブモジュールとして元のプロジェクトに追加できます。

cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"

svn:externals と git サブモジュールの間には概念的な違いが 1 つあります。サブバージョンの観点からアプローチすると、つまずく可能性があります。git サブモジュールは、指定したリビジョンに固定されています。「上流」が変更された場合は、サブモジュールの参照を更新する必要があります。

したがって、アップストリームのサブバージョンと再同期すると、次のようになります。

cd /path/to/mysvnclone
git svn rebase
git push

... git プロジェクトは、以前にコミットした元のリビジョンを引き続き使用します。svn HEAD に更新するには、使用する必要があります

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
于 2009-01-21T12:47:31.597 に答える
6

現在、git-svnはsvn:externalsをサポートしていません。しかし、あなたを助けることができる他の2つのツールがあります:

  1. SubGit

    SubGitはサーバー側のソリューションであり、GitがSubversionリポジトリにアクセスできるようにします。その逆も可能です。詳細についてはドキュメントを参照できますが、一般的にはSubGitを使用するのはかなり簡単です。

    $ subgit configure --layout auto $SVN_URL $GIT_REPO
    

    上記のコマンドは、SVNプロジェクトのブランチレイアウトを検出し、SVNプロジェクトをミラーリングする準備ができている空のベアGitリポジトリを作成します。クレデンシャルが〜/ .subversionディレクトリのSVNクレデンシャルキャッシュにすでに保存されていない限り、クレデンシャルの入力を求められる場合があります。$GIT_REPO/subgit/authors.txtSVN作成者名をGitIDにマップするように調整することもできます。

    $ subgit install $GIT_REPO
    $ ... let initial translation complete ... 
    $ TRANSLATION SUCCESSFUL
    

    この時点で、Subversionリポジトリが新しく作成されたGitリポジトリに接続されています。SubGitは、SVNリビジョンをすべてのGitコミットに変換しsvn commit、GitコミットをすべてのSVNリビジョンに変換しますgit push

さらに必要なのは、コミッターがGitリポジトリを利用できるようにすることです。そのためのgit-http-backendを見てください。次に、作成したGitリポジトリを通常のサブモジュールとして追加できます。SubGitは、Bitbucket Serverのアドオンとしても利用できます。詳細については、こちらをご覧ください。したがって、 git-svnなどの外部ツールを使用する必要はありません。

SubGitはプロプライエタリソフトウェアですが、中小企業(最大10人のコミッター)、学術およびオープンソースプロジェクトは無料です。

  1. SmartGit

    SmartGitは、クライアント側のgit-svnを置き換えます。その機能の詳細については、こちらをご覧ください

    特に、SmartGitはgitサブモジュールsvn:externalsの両方をサポートしているので、リポジトリにそれらを混在させることができます。

    SmartGitはプロプライエタリソフトウェアですが、非営利目的での使用は無料です。

于 2011-12-09T03:40:59.403 に答える
4

rq が言ったことに加えて、別の方法は、サードパーティの「externals」プロジェクト ( http://nopugs.com/ext-tutorial ) を使用することです。これは、svn 外部参照の動作をよりよく模倣します。外部を使用すると、git または svn リポジトリのいずれかを追跡でき、変更をそれらのリポジトリに上流にプッシュする方が簡単に見えます。ただし、プロジェクト メンバーは別のパッケージをダウンロードしてインストールする必要があります。

サブモジュールやエクスターナルはまだ使用していません。ただし、すべての代替案について数時間かけて読んだところ、外部が私のニーズにより適しているようです。Jon Loeliger ( http://oreilly.com/catalog/9780596520120 ) による「Git を使用したバージョン管理」の第 15 章には、これらおよびその他のカスタム メソッドに関する優れた説明があり、強くお勧めします。

于 2010-07-18T17:58:11.570 に答える
0

Piston は、これとその逆をサポートするために書き直されており、さらに Subvresion リポジトリと git+git の既存の Subversion URL もサポートされています。

ピストン Github レポジトリをチェックしてください。

残念ながら発売されていないようです。

于 2009-01-21T18:45:39.627 に答える