使用git svn clone克隆非标准SVN布局的正确命令咨询
问题分析与修正命令
错误原因
你犯了两个关键错误:
- 基础URL与路径参数冲突:你指定的克隆URL是
http://mysvn/svn/repo/hcp/trunk/project1,同时设置--trunk=hcp/trunk/project1,导致git svn尝试在该子路径下再次拼接hcp/trunk/project1,形成不存在的路径/hcp/trunk/project1/hcp,触发文件找不到的错误。 - 分支/标签路径未匹配项目范围:直接指定
--branches=hcp/branches会拉取所有分支,但你需要的是与project1关联的分支和标签(或分支中属于project1的内容)。
正确命令(分两种场景)
场景1:分支/标签按项目分目录存储
如果SVN中project1的分支和标签单独存放在子目录下(如hcp/branches/project1/、hcp/tags/project1/),直接使用以下命令:
git svn clone --trunk=hcp/trunk/project1 \ --branches=hcp/branches/project1 \ --tags=hcp/tags/project1 \ --authors-file=authors.txt \ http://mysvn/svn/repo project1
场景2:分支/标签是全局trunk的快照
如果分支是整个trunk的完整快照,但你只需要提取其中project1的内容,需要用--include-paths过滤路径,之后调整仓库目录结构:
- 克隆并过滤内容:
git svn clone --trunk=hcp/trunk \ --branches=hcp/branches \ --tags=hcp/tags \ --include-paths="^hcp/(trunk|branches/[^/]+|tags/[^/]+)/project1" \ --authors-file=authors.txt \ http://mysvn/svn/repo project1
- 进入仓库,将project1内容移到根目录(使用
git filter-repo替代旧的filter-branch,需提前安装):
cd project1 git filter-repo --subdirectory-filter hcp/trunk/project1
验证
克隆完成后,执行git branch -a和git tag即可看到对应的分支和标签。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

