Git svn clone:如何推迟获取修订历史记录

时间:2009-10-12 12:13:54

标签: git git-svn clone git-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文章中的更多信息:"How to git-svn clone last n revisions from svn"

这样我就可以立即运行了。但没有历史的本地副本。

问题是,我如何从svn存储库中获取历史记录?

最好是,这可以在1000个版本(反向顺序)中完成。这里的任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:22)

我发现了它是如何完成的。诀窍是不使用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

答案 1 :(得分:5)

所有建议的答案都不起作用。带有修订版的git svn fetch只会检索比已经克隆的版本更新的版本。您可以使用git svn reset返回旧版本并从那里检索,但之后您必须做一些肮脏的工作,将您的新版本“移植”回完整的树(SHA1的SHA1) git中的SVN修订版取决于修订版的整个父级。如果您使用手术刀({1}}为您提供便利,请继续使用。

避免这个问题要容易得多。

  • 执行最后几次修订的初始克隆,以便立即开始工作;
  • 将完整历史记录的另一个克隆启动到另一个目录/ git repository;
  • 尽可能多地处理您的部分历史记录;
  • 完整克隆完成后,使用http://www.sanityinc.com/articles/relocating-git-svn-repositories/之类的方法将您的工作从部分存储库复制到完整克隆。

所以,这是一个部分答案 - 你怎么能获取历史?将其提取到另一个仓库并复制您需要的内容。它可以以相反的顺序以1000块的形式完成吗?有了手术刀和耐心,它可以,但它不太值得。正在运行的完整提取将超过您git每个块所抓取的所有首次修订的开销,并且修复将变得乏味。

答案 2 :(得分:0)

git svn fetch似乎“记住”之前看到的修订版。我在做范围方面取得了成功:

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

我获取了最新修订版,然后开始“填写”这些空白。它似乎工作正常。

Jesper - 如果您的存储库没有修订版1000,那么它就没有任何内容可供获取。确保您使用的修订号有效!