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

Jes*_*sen 31 git clone git-svn 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
Run Code Online (Sandbox Code Playgroud)

(StackOverflow文章中的更多信息:"如何从svn中git-svn克隆最后修订版本"

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

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

并且优选地,这可以在块中进行,例如1000次修改(以相反的顺序).这里的任何帮助将不胜感激:)

Jes*_*sen 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
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说似乎不起作用,它只是在我尝试做git svn fetch -r 1000时返回:HEAD (3认同)
  • @verhogen - `git svn fetch -r 1000:HEAD`表示"从rev 1000开始直到当前HEAD的所有修订".如果您的SVN中有800个修订版,则无法获取任何内容.如果您有50k的修订版,那么它的获取方式将超出您的预期. (3认同)

Chr*_*ash 5

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

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

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

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