1. ホーム
  2. svn

[解決済み] SubversionのリポジトリをGitのサブモジュールとして持つことは可能ですか?

2022-04-26 12:27:08

質問

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

のようなものです。

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

ここで https://svn.foo.com/svn/proj は、Subversion リポジトリを指します。

があるのは知っています。 git-svn これは、Subversion リポジトリと対話することを可能にします。そこで私は、Subversionのリポジトリをチェックアウトする方法として git-svn を作成し、それをサブモジュールとして使用します。

どのように解決するのですか?

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

git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin [email protected]: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 submodule の間には、Subversion の観点からアプローチするとつまずくかもしれない、ひとつのコンセプトの違いがあります。git サブモジュールは、あなたが与えたリビジョンに固定されています。もし "upstream" が変更されたら、サブモジュールのリファレンスを更新しなければなりません。

そこで、上流のサブバージョンと再同期するとき。

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"