2009-04-14 182 views
289

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

如何从Subversion存储库创建git-svn的浅拷贝,例如:你怎么只拉最后三个修订版?

如果您使用选项--depth,即命令可以从Git存储库获取最后n个修订版本,即获得存储库的浅表副本。例如:

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

git-svn有类似的选项吗?

我发现至今

到目前为止,我只找到了-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 

所以我取代HEAD~3与第三,但最后一次修订534.这工作的实际数量,但要求我先弄清楚第三的版本号,但最后提交。

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

文档

git-clone

git-svn

+1

什么呢查找以前的N修改`-s`在这里做? – 2012-05-04 21:20:04

+5

回答我自己的问题: `-s用于--stdlayout,它假设标签,树干和分支的svn推荐布局。' (但对我来说不起作用) – 2012-05-04 23:55:04

+0

实现``` -depth` for`git svn`,因为支持已经在那里了。它已经必须从服务器中找出最新的版本? – 2015-03-01 06:45:45

回答

211

你已经发现指定的Git,SVN浅克隆最简单的方式,通过指定SVN版本号,你想要在(-r$REV:HEAD)开始克隆。

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

GIT中的数据结构是基于在一个有向非循环图(DAG),这使得它琐碎走回n提交指针。但是在SVN中(因此在Git-SVN中),您必须自己找到修订版本号。

+47

因此,例如 git svn clone -s -r1450:HEAD http:// some/svn/repo。 – 2011-03-02 12:16:59

83

我发现自己经常使用以下方式从我们巨大的颠覆树中获取有限数量的修订版本(我们即将达到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 

,并找出其中的一个分支开始的好方法是做一个svn log它,找到在树枝上的第一个(最后一个做时列出):

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

到目前为止我没有真正发现跟踪所有分支的麻烦。克隆需要花费太多时间,svn和git不能像我想的那样好。我倾向于创建补丁文件并将它们应用于另一个svn分支的git克隆。

24

... 7年后,在沙漠中,一个风滚草被吹...

我不满意接受的答案,所以我创建了一些脚本来为你available on Github做到这一点。这些应该可以帮助任何想要使用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回购

# -u The SVN URL to clone 
# -l The limit of revisions 

./svn-lookback.sh -u https://server/project/trunk -l 5