You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用git-svn迁移SVN至Git时遭遇update-ref错误128的技术求助

解决git-svn克隆SVN项目时“refs/remotes/origin/trunk: not a valid SHA1”错误

针对你遇到的问题,结合git-svn的工作机制和你的场景,我整理了几个核心排查点和解决步骤:

1. 先确认起始版本r13800是否存在于trunk中

从错误日志里能看到r13800 = ... (refs/remotes/origin/aBranch ),说明这个版本对应的是某个分支的提交,而非trunk。如果trunk在r13800版本时没有任何提交记录,git-svn就无法生成有效的trunk引用,直接导致报错。

你可以用SVN命令验证这一点:

svn log -r 13800 http://<URL>/collectionOfRepositories/repository1/ProjectA/trunk

如果返回“找不到该版本”,那你需要调整起始版本——要么选一个trunk确实存在的更早版本(比如r13000),要么确认trunk在r13800之后才创建,那就从trunk的第一个版本开始克隆。

2. 调整克隆策略:先拉取trunk,再同步分支

如果一定要从r13800开始迁移,可以拆分克隆步骤,优先确保trunk被正确拉取,再同步分支和标签:

# 第一步:单独克隆trunk,从r13800开始
git svn clone -r 13800 --username=myUsername http://<URL>/collectionOfRepositories/repository1/ProjectA/trunk/ --authors-file "authors-transform.txt" projectA-git

cd projectA-git

# 第二步:初始化分支和标签的远程映射
git svn init http://<URL>/collectionOfRepositories/repository1/ProjectA/ --trunk trunk --tags tags --branches branches

# 第三步:拉取分支和标签的历史(从r13800到最新)
git svn fetch -r 13800:HEAD

这种方式能避免git-svn先处理分支导致trunk引用缺失的问题。

3. 检查authors-file的格式正确性

虽然错误日志没直接提到作者映射,但如果格式错误(比如缺少某个SVN用户的映射条目),可能间接导致git-svn在提交转换时失败,进而引发引用异常。确保每一行的格式严格为:

svn-username = Git Display Name <git-email@example.com>

4. 清理损坏的仓库,重新开始

之前失败的克隆可能已经生成了不一致的本地引用,建议直接删除projectA-git目录,从头执行调整后的命令,避免残留问题干扰。

关于Windows环境的替代方案

你提到Subgit之前出问题,可以再试一次,Subgit对Windows的支持很完善,步骤如下:

# 初始化Subgit转换配置
subgit configure http://<URL>/collectionOfRepositories/repository1/ProjectA/ projectA-git

# 编辑projectA-git/conf/subgit.conf:
# 1. 配置authors映射(和git-svn的authors-file格式一致)
# 2. 在[svn]区块添加`revision = 13800`指定起始版本

# 执行转换
subgit install projectA-git

如果还是出错,查看projectA-git/subgit/logs/下的日志文件,能找到具体的错误原因(比如权限问题、SVN路径错误等)。

另外,建议升级Windows上的Git和SVN到最新版本(Git 2.30+、SVN 1.14+),旧版本的git-svn存在不少兼容性bug。

内容的提问来源于stack exchange,提问作者Amon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:43:12