如何git-svn克隆Subversion版本库的最后n个版本?

问题

你如何从一个Subversion版本库创build一个git-svn的浅拷贝,也就是说,你如何只提取最后三个版本?

如果使用选项--depthgit clone命令可以从Git存储库获取最后n个版本,也就是说,您可以获取存储库的浅表副本。 例:

 git clone --depth 3 git://some/repo myshallowcopyrepo 

有没有类似的选项git-svn?

到目前为止,我的发现

到目前为止,我只find了-rN选项,其中N是要修改的版本。 例:

 git svn clone -rN svn://some/repo 

根据文档可以使用-r $ REVNUMBER:HEAD。 我尝试了以下获得最后3个返回错误消息的修订。

 $ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo . revision argument: HEAD~3:HEAD not understood by git-svn 

所以我用第三个534的最后一个修订版的实际数字replace了HEAD〜3。这个工作,但是这需要我先计算出第三个修订版本,但是最后一个修订版本。

 $ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo . 

文档

混帐克隆

GIT-SVN

您已经发现了在Git-SVN中指定浅度克隆的最简单方法,方法是指定要在( -r$REV:HEAD )处开始克隆的SVN修订版本号。

例如: git svn clone -s -r1450:HEAD some/svn/repo

Git的数据结构是基于有向无环图(DAG)中的指针的,这使得返回n提交变得微不足道。 但是在SVN(因此在Git-SVN中),你将不得不自己find版本号。

我发现自己经常使用以下方法从我们巨大的颠覆树中获取有限数量的修订(我们很快就达到了svn修订版35000)。

 # checkout a specific revision git svn clone -r N svn://some/repo/branch/some-branch # enter it and get all commits since revision 'N' cd some-branch git svn rebase 

而find分支开始的一个好方法是做一个svn log并find分支上的第一个(当做最后一个时):

 svn log --stop-on-copy svn://some/repo/branch/some-branch 

到目前为止,我还没有真正发现跟踪所有分支的麻烦。 克隆需要很长时间,svn和git不能一起工作。 我倾向于创build补丁文件,并将其应用于另一个svn分支的git克隆。

… … 7年后,在沙漠里,一场风滚草正在吹…

我不满意接受的答案,所以我创build了一些脚本来为你在Github上提供这个function。 这些应该可以帮助任何想要使用git svn clone但不想克隆整个版本库,也不想在历史中间寻找特定的修订版本(也许你正在克隆一堆回购)。 在这里,我们可以克隆最后的N个修订:

使用git svn clone克隆最近的50个修订版本

 # -u The SVN URL to clone # -l The limit of revisions # -o The output directory ./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt 

从SVN回购中find以前的N版本

 # -u The SVN URL to clone # -l The limit of revisions ./svn-lookback.sh -u https://server/project/trunk -l 5