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

如何将SVN的增量提交同步至Gerrit并保留提交历史

同步SVN增量提交到Gerrit并保留提交历史

替代svn diff获取变更的方法

如果需要获取r844之后的所有变更(含每个提交的独立记录),除了生成整体补丁,还有两种更实用的方式:

  • 查看所有提交明细:svn log -r r844:HEAD --verbose,能看到每个提交的作者、时间、变更文件列表和提交信息
  • 生成单提交补丁:svn diff -r rN:rN+1 > patch-N.diff(N从844开始,逐个生成每个提交的补丁)

不过最适合同步到Git/Gerrit的方式是用git-svn工具,直接将SVN提交转换为Git独立提交,无需手动处理补丁。

完整同步流程(保留每个提交历史)

1. 准备本地Gerrit仓库

确保你已经克隆了Gerrit目标仓库到本地:

git clone <Gerrit仓库URL> local-gerrit-repo
cd local-gerrit-repo

2. 配置git-svn连接SVN仓库

初始化SVN远程关联,指定SVN仓库地址:

git svn init <SVN仓库完整URL> --prefix=svn/

如果之前同步到SVN的r844,直接拉取该版本之后的所有提交:

git svn fetch -r r844:HEAD

这一步会将SVN从r844到最新的4个提交,逐个转换为Git提交,存储在svn/trunk(若为标准SVN trunk布局)分支中,每个提交会保留原SVN的作者信息、提交时间和提交日志。

提示:如果需要将SVN用户名映射为Git作者信息,可创建authors.txt文件,格式为svn_username = Git Full Name <email@example.com>,然后执行git config svn.authorsfile ./authors.txt再执行fetch。

3. 将SVN提交同步到Gerrit分支

查看svn/trunk中的提交记录,确认那4个转换后的Git提交:

git log svn/trunk --oneline

然后将这些提交逐个cherry-pick到你的Gerrit本地工作分支(比如master):

git checkout master
git cherry-pick <第一个SVN转换提交的哈希>
git cherry-pick <第二个SVN转换提交的哈希>
git cherry-pick <第三个SVN转换提交的哈希>
git cherry-pick <第四个SVN转换提交的哈希>

如果遇到冲突,解决冲突后执行git cherry-pick --continue即可。

4. 推送到Gerrit

完成所有cherry-pick后,将这些保留历史的提交推送到Gerrit进行审核:

git push origin HEAD:refs/for/master

(替换master为你的目标分支)

这样每个SVN提交都会对应一个独立的Gerrit提交,完整保留原提交的历史信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:50:24