2009-10-12 156 views
31

我经常遇到这样的情况,我想立即在SVN存储库上工作。但普通的git svn clone [url]也克隆了整个历史。所以我想加快速度。第一部分是只把最后一个版本提取到你的Git仓库中。我这样做,像这样:Git svn clone:如何推迟修订历史记录的提取

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个修订版块(以相反的顺序)完成,任何帮助在这里将不胜感激:)

+0

我发现下面的解决方案很有用http://stackoverflow.com/a/2348596/429476 – 2016-01-27 08:12:20

回答

21

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

这似乎不适用于我,它只是返回时,当我尝试做git svn fetch -r 1000:HEAD – Verhogen 2009-10-25 23:10:56

+0

它也不适用于我,以及Rob Crawford提出的解决方案。对我而言,最初的问题仍然未得到答复。 – sthiers 2012-09-11 12:42:23

+2

@verhogen - 'git svn fetch -r 1000:HEAD'表示“从rev 1000开始获取所有修订直到当前HEAD”。如果你在SVN中有800个修订版,那么这个版本不会获取任何东西。如果你有50k的修订版本,它会取得比你想的更多的方式。 – 2013-12-10 09:15:35

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,那么它没有任何提取。确保您使用的版本号是有效的!

+1

不知道这是什么实现。它成功了,但是一个git日志不会告诉你任何东西超过你最初的抓取和转发。 – 2012-12-06 22:20:14

5

建议的答案都不起作用。修改后的git svn fetch只会检索比已经克隆的修订版更新的修订版。您可能可以使用git svn reset返回到较旧版本并从那里检索,但之后必须执行一些肮脏的工作,以将新版本“嫁接”回到完整树(SVN修订版的SHA1 git取决于修订的整个亲子关系)。如果你方便使用手柄git为您提供,请为它服务。

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

  • 做一个最后几个修订版的初始克隆,这样你就可以立即开始工作;
  • 启动完整历史的另一个克隆到另一个目录/ git仓库;
  • 在您的部分历史中尽可能多地工作;
  • 完整克隆完成后,使用类似http://www.sanityinc.com/articles/relocating-git-svn-repositories/的方法将工作从部分存储库复制到完整存储库。

所以,这是一个部分的答案 - 你如何获取历史?把它拿到另一个回购中,并复制你需要的东西。它可以以相反的顺序以1000块完成吗?用手术刀和很多耐心,可能,但它不值得。完全取得前进将超过所有第一次修订的开销,这些修改是由每个块git svn fetch抓取的,修复将变得单调乏味。