2

git-svn リポジトリで git-bundle を使用しようとしています。基本的に、本番 SVN システムのクローンを含むオフライン git リポジトリを作成する必要があります。SVN リポジトリは git-svn を介して複製されます。これはうまく機能します。コードのクローンを作成し、remotes/* の下にリストします。

今、難しい部分です。これをオフライン リポジトリと同期させる必要があります。オフライン環境にはインターネット アクセスがなく、一方向の方法 (CD など) を介してのみ更新を取得します。片道のみの取引です。これを git-bundle で行いたいと思います。問題は、git-svn が svn リポジトリをリモートとしてマークするという事実に要約されるようです。...を使用してバンドルをチェックアウトしようとしましたgit bundle create ____.bundle --allが、機能しますが、マスターしか含まれていません。リモート参照は含まれません。ただし、そのすべての情報を取得する必要があります。

これは理にかなっていますか?ヒント/提案はありますか?SVN 側の git リポジトリにコミットしないことを明確にする必要があります。これは読み取り専用になります。オフライン側では、リモート ブランチを分岐し、そこでコミットします。

ありがとう!

4

1 に答える 1

3

git svn は元々、svn ブランチがリモートとして表示されるように設定していますが、ブランチの作成に使用される refspec を変更することで変更できます。ただし、これは svn リポジトリから何かを取得する前に行う必要があります。

git svn init --stdlayout http/svn.server/path svnclone
cd svnclone
edit .git/config

次に行fetchbranches行を変更し、場合によってはtags行を次のように変更します。

fetch = trunk:refs/heads/trunk
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*

svn リポジトリが標準レイアウトを使用していない場合は、通常どおり への呼び出しでそれを指定できますgit svn init。その場合、コロンの後の部分のみを変更するため、上記の行のコロンの前の部分を残しておきます。

その設定が完了したらgit svn fetch、実際にコンテンツをコピーするために使用できます。ブランチはrefs/heads名前空間に入るため、コマンドを含む git はbundleそれらをローカル ブランチとして扱います。そのクローンが他のクローンのソースとしてのみ使用されている限り (バンドルを介して、または単に clone コマンドを使用して)、問題になることはありません。という名前の svn ブランチがある場合、masterまたはtrunkそれが問題になる可能性があります。

于 2013-02-28T04:17:01.093 に答える