Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Subversion存储库中克隆git svn的最后n个版本?_Git_Svn_Git Svn_Git Clone_Svn Checkout - Fatal编程技术网

如何从Subversion存储库中克隆git svn的最后n个版本?

如何从Subversion存储库中克隆git svn的最后n个版本?,git,svn,git-svn,git-clone,svn-checkout,Git,Svn,Git Svn,Git Clone,Svn Checkout,问题 如何使用git svn从Subversion存储库创建浅拷贝,例如,如何仅获取最后三个修订 如果使用选项--depth,即获取存储库的浅拷贝,那么git clone命令可以从git存储库获取最后n个修订。例如: git clone --depth 3 git://some/repo myshallowcopyrepo git svn clone -rN svn://some/repo git svn有类似的选项吗 我迄今为止的发现 到目前为止,我只找到了-rN选项,其中N是要拉取的修订

问题

如何使用git svn从Subversion存储库创建浅拷贝,例如,如何仅获取最后三个修订

如果使用选项
--depth
,即获取存储库的浅拷贝,那么
git clone
命令可以从git存储库获取最后n个修订。例如:

git clone --depth 3 git://some/repo myshallowcopyrepo
git svn clone -rN svn://some/repo
git svn有类似的选项吗

我迄今为止的发现

到目前为止,我只找到了
-rN
选项,其中
N
是要拉取的修订。例如:

git clone --depth 3 git://some/repo myshallowcopyrepo
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的实际数字替换了头3。这是可行的,但这需要我首先计算出第三次但也是最后一次提交的修订号

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


您已经找到了在Git SVN中指定浅层克隆的最简单方法,方法是指定要开始克隆的SVN修订号(
-r$REV:HEAD

例如:
gitsvnclone-s-r1450:headsome/svn/repo


Git的数据结构基于有向无环图(DAG)中的指针,这使得回溯
n
commits变得很简单。但是在SVN中(因此在Git SVN中),您必须自己找到修订号。

我发现自己经常使用下面的方法从我们庞大的subversion树中获得有限数量的修订(我们很快将达到SVN修订版35000)

找出分支起始位置的一个好方法是对其执行
svn日志
it并找到分支上的第一个(执行时列出的最后一个):

到目前为止,我还没有发现追踪所有分支的麻烦值得。克隆需要花费太多时间,而且svn和git不能像我希望的那样协同工作。我倾向于创建补丁文件并将它们应用到另一个svn分支的git克隆上。

。。。7年后,在沙漠中,一棵风滚草从这里飞过

我对接受的答案不满意,所以我为您创建了一些脚本。这些可以帮助任何想要使用<代码> Git Svn克隆< /COD>的人,但是不想克隆整个存储库,也不想从历史的中间寻找一个特定的克隆版本(也许你正在克隆一堆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
从SVN回购中查找以前的N修订版

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

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

+1来自我-帮助我绕过了一个错误128问题我正在克隆一个完整的svn repo svn log命令正是我想要的!感谢与我合作的POS具有非标准的分支和布局,因此我通常为每个SVN分支创建一个本地Git回购,然后在这些分支之间进行
cherry pick
/
rebase
。提交需要额外的步骤(
push
,然后从远程回购中执行
dcommit
),但我认为这是值得折衷的。没有考虑过这一点,只需克隆特定的标记/分支可能会更快,正如您所说:)回答我自己的问题:
-s代表--stdlayout,它假定svn推荐的标记、中继、,和分支。
(但对我不起作用)对于
git svn
,实现
--depth
有多难,因为支持已经存在。它已经从服务器上找到了最新的版本了?如果我想在将来继续克隆早期版本,有可能吗?@Zennichimaro:你可以通过添加另一个
git svn
remote指向同一位置,并使用
git svn fetch
来获取更多的树。此时,您必须使用
git filter branch
将旧(部分)树重新分配到右分支上。Paul有没有办法通过执行从SVN到git的增量迁移来获取最新修订版本()SVN使用连续整数来识别修订,使返回
n
commits变得更加简单…我认为-r之后缺少一个空格。例如,git svn clone-r 1133:HEAD some/svn/repo将对此进行破解,我们的repo有大约170000次修订,而且做一个项目花费的时间太长,我在repo中有10多个具体项目要做:|考虑只做3-4年的历史。我采纳了Jonathan的想法,做了一些改进,并删除了对Python的依赖,可在以下位置获得: