すぐにSVNリポジトリで作業したい場合がよくあります。しかし、普通のgit svn clone [url]
履歴全体のクローンも作成します。だから私は物事をスピードアップしたいと思います。最初の部分は、最後のリビジョンのみをGitリポジトリにフェッチすることです。私はそうします:
URL=http://google-web-toolkit.googlecode.com/svn/trunk/
REV=`svn info $URL |grep Revision: | awk '{print $2}'`
PROJECT_FOLDER=google-web-toolkit-readonly
git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER
(StackOverflowの記事の詳細: "svnから最後のnリビジョンをgit-svnクローンする方法"
このようにして、私は稼働していて、すぐに作業できます。しかし、歴史のローカルコピーなし。
問題は、後でsvnリポジトリから履歴を取得するにはどうすればよいですか?
そして、できれば、これは、たとえば1000回のリビジョンのチャンクで(逆の順序で)実行できます。ここでの助けは大歓迎です:)
私はそれがどのようにできるかを知りました。秘訣はgit svn clone
を使用しないです。代わりに、git svn init
とgit svn fetch
を個別に使用してください。例を変更しました:
URL=http://google-web-toolkit.googlecode.com/svn/trunk/
REV=`svn info $URL |grep Revision: | awk '{print $2}'`
PROJECT_FOLDER=google-web-toolkit-readonly
mkdir $PROJECT_FOLDER
cd !$ #goes into dir named $PROJECT_FOLDER
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches
git svn fetch -r $REV
# hack, hack, hack
# or update history (fetch 50 revisions back each loop
for (( r=$REV; r>0; r-=50 ));
do
git svn fetch -r $r:HEAD
done
提案された答えはどれも機能しません。リビジョンのあるgit svn fetch
は、既に複製されているものよりも新しいリビジョンのみを取得します。 git svn reset
を使用して古いリビジョンに戻り、そこから取得できる場合がありますが、新しいリビジョンを完全なツリー(SHA1のSHA1)に「移植」するには、後でいくつかの汚い作業を行う必要があります。 gitのSVNリビジョンは、リビジョンの親子関係全体に依存します)。 git
が提供するメスが手元にある場合は、ぜひお試しください。
この問題を回避する方がはるかに簡単です。
だから、それは部分的な答えです-後でどのように履歴を取得できますか?それを別のリポジトリにフェッチし、必要なものをコピーします。 1000のチャンクで逆の順序で実行できますか?メスと多くの忍耐力で、それはできましたが、それだけの価値はありそうにありません。前方に実行される完全なフェッチは、git svn fetch
の各ブロックによって取得された最初のリビジョンすべてのオーバーヘッドを上回り、修正は面倒になります。
git svn fetch
は "remember"以前に見たリビジョンのように見えます。私は範囲を実行することに成功しています:
git svn fetch -r 0:100
git svn fetch -r 100:200
git svn fetch -r 4500
git svn rebase
git svn fetch -r 200:300
最新のリビジョンを取得してから、 "filling in"ギャップを開始しました。うまくいくようです。
Jesper-リポジトリにリビジョン1000がない場合、フェッチするものは何もありません。使用しているリビジョン番号が有効であることを確認してください。