web-dev-qa-db-ja.com

Git svn clone:リビジョン履歴のフェッチを延期する方法

すぐに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回のリビジョンのチャンクで(逆の順序で)実行できます。ここでの助けは大歓迎です:)

31

私はそれがどのようにできるかを知りました。秘訣はgit svn cloneを使用しないです。代わりに、git svn initgit 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
22

提案された答えはどれも機能しません。リビジョンのあるgit svn fetchは、既に複製されているものよりも新しいリビジョンのみを取得します。 git svn resetを使用して古いリビジョンに戻り、そこから取得できる場合がありますが、新しいリビジョンを完全なツリー(SHA1のSHA1)に「移植」するには、後でいくつかの汚い作業を行う必要があります。 gitのSVNリビジョンは、リビジョンの親子関係全体に依存します)。 gitが提供するメスが手元にある場合は、ぜひお試しください。

この問題を回避する方がはるかに簡単です。

  • 最後のいくつかのリビジョンの初期クローンを作成して、すぐに作業を開始できるようにします。
  • 完全な履歴の別のクローンを別のディレクトリ/ gitリポジトリに開始します。
  • 部分的な履歴で好きなだけ作業します。
  • 完全なクローンが完了したら、 http://www.sanityinc.com/articles/relocating-git-svn-repositories/ のようなアプローチを使用して、部分リポジトリから完全リポジトリに作業をコピーします。

だから、それは部分的な答えです-後でどのように履歴を取得できますか?それを別のリポジトリにフェッチし、必要なものをコピーします。 1000のチャンクで逆の順序で実行できますか?メスと多くの忍耐力で、それはできましたが、それだけの価値はありそうにありません。前方に実行される完全なフェッチは、git svn fetchの各ブロックによって取得された最初のリビジョンすべてのオーバーヘッドを上回り、修正は面倒になります。

5
Chris Nash

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がない場合、フェッチするものは何もありません。使用しているリビジョン番号が有効であることを確認してください。

0
Rob Crawford