如何从Subversion存储库中git-svn克隆最后n个修订版?

Ler*_*rve 310 svn git git-svn git-clone svn-checkout

问题

如何使用来自Subversion存储库的git-svn创建浅表副本,例如,如何仅提取最后三个修订版?

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

git clone --depth 3 git://some/repo myshallowcopyrepo
Run Code Online (Sandbox Code Playgroud)

git-svn有类似的选择吗?

到目前为止我的发现

到目前为止,我只找到了-rN选项在哪里N进行修改.例:

git svn clone -rN svn://some/repo
Run Code Online (Sandbox Code Playgroud)

根据文档,有可能使用-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
Run Code Online (Sandbox Code Playgroud)

所以我用HEAD~3第三个但最后一个修订版534的实际数字替换了.这有效,但这要求我首先找出第三个但最后一个提交的修订号.

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Run Code Online (Sandbox Code Playgroud)

文档

混帐克隆

GIT-SVN

Pau*_*aul 233

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

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

Git的数据结构基于有向无环图(DAG)中的指针,这使得返回n提交变得微不足道.但是在SVN(因此在Git-SVN中)你必须自己找到修订号.

  • 如果我想继续克隆早期修订版,怎么可能呢? (5认同)
  • @Zennichimaro:您可以通过添加另一个指向同一位置的`git-svn`远程并使用`git-svn fetch`来获取更多树来实现.此时,您必须使用`git filter-branch`将旧(部分)树重新显示到右侧分支上. (5认同)

Chr*_*ian 90

我发现自己经常使用以下内容从我们巨大的颠覆树中获得有限数量的修订(我们很快就会达到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
Run Code Online (Sandbox Code Playgroud)

找到分支开始位置的一个好方法是执行svn log它并在分支上找到第一个(执行时列出的最后一个):

svn log --stop-on-copy svn://some/repo/branch/some-branch
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还没有真正找到跟踪所有分支的麻烦.克隆和svn需要花费太多时间,并且git不能像我想的那样一起工作.我倾向于创建补丁文件并将其应用于另一个svn分支的git clone.


jon*_*one 33

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

我对接受的答案不满意,所以我在Github上为你创建了一些脚本.这些应该可以帮助任何想要使用git svn clone但不想克隆整个存储库并且不想在历史中间寻找特定修订版本克隆的人(也许你正在克隆一堆repos).在这里,我们可以克隆最后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
Run Code Online (Sandbox Code Playgroud)

从SVN仓库中找到以前的N版本

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

./svn-lookback.sh -u https://server/project/trunk -l 5     
Run Code Online (Sandbox Code Playgroud)