如何将类SVN Fork结构迁移至Azure Git并保留双向合并能力?
SVN到Azure Git迁移并实现双向合并Fork结构方案
一、迁移Project1到Azure Git
- 本地使用
git-svn克隆SVN的Project1仓库,保留标准trunk/tags/branches布局:git svn clone --stdlayout --no-metadata --authors-file=users.txt <SVN仓库中Project1的根URL> Project1-git- 可选
--authors-file参数,用于映射SVN作者到Git身份,格式为svn_username = Git Name <git_email@example.com>
- 可选
- 进入本地仓库,添加Azure Git的Project1远程地址:
cd Project1-git git remote add azure <Azure Git上Project1的仓库URL> - 推送所有分支和标签到Azure Git:
git push azure --all git push azure --tags
二、将Project2迁移为Project1的Azure Git Fork
- 在Azure Git界面找到已创建的Project1仓库,点击「Fork」创建对应名称的Project2仓库。
- 本地克隆SVN的Project2仓库:
git svn clone --stdlayout --no-metadata --authors-file=users.txt <SVN仓库中Project2的根URL> Project2-git - 进入Project2本地仓库,配置两个远程源:
cd Project2-git git remote add origin <Azure Git上Project2的仓库URL> git remote add upstream <Azure Git上Project1的仓库URL> - 推送Project2的所有分支和标签到Azure Git Fork仓库:
git push origin --all git push origin --tags
三、配置双向合并流程
1. 从Project1全量同步到Project2
在Project2本地仓库执行以下步骤:
# 拉取Project1的最新代码 git fetch upstream # 切换到主分支(如main/trunk) git checkout main # 合并上游代码(--no-ff保留合并历史) git merge upstream/main --no-ff # 推送同步后的代码到Project2仓库 git push origin main
可将上述步骤封装为脚本,定期执行以保持同步。
2. 将Project2的部分提交合并到Project1
方式一:本地挑选提交后推送
# 找到Project2中需要合并的提交ID(如abc123) # 基于Project1最新代码创建临时分支 git checkout upstream/main -b cherry-pick-branch # 挑选目标提交 git cherry-pick abc123 # 推送临时分支到Project1仓库,创建Pull Request git push azure cherry-pick-branch
随后在Azure Git界面创建Pull Request,审核通过后合并到Project1主分支。
方式二:Azure Git界面创建选择性PR
- 在Project2的Azure仓库中,基于需要合并的提交创建新分支,确保分支仅包含目标提交。
- 从该分支向Project1主分支创建Pull Request,明确说明包含的提交内容,审核通过后完成合并。
注意事项
- 迁移前备份SVN仓库,避免数据丢失。
- 若SVN存在复杂分支合并历史,迁移后需验证Git历史的准确性。
- 双向合并前需拉取最新代码,本地解决冲突后再推送。
内容的提问来源于stack exchange,提问作者h3dkandi
相关产品推荐
相关产品推荐

