如何让git和svn在同一文件夹下共同工作,实现双向变更同步
Git与SVN同工作目录双向同步正确操作流程
异常问题根因
你当前遇到的SVN标记无内容变更文件的问题,核心是两类元数据冲突导致:
- Git默认开启行尾符自动转换、文件权限检测,拉取代码时修改了文件的行尾格式或权限标记,SVN识别为文件变更
- 直接合并两个无关仓库的操作打乱了工作区文件的校验值,导致SVN状态判断异常
操作前异常清理
先把当前工作区的异常状态还原,避免数据丢失:
- 所有未提交的SVN、Git变更提前提交或暂存
- 执行
svn revert -R .还原SVN侧的所有异常变更 - 执行
git reset --hard HEAD还原Git侧的工作区状态
正式配置流程
初始化SVN工作区
正常检出SVN仓库,确认工作区无未提交变更:svn checkout <SVN仓库地址> <工作目录> cd <工作目录>配置Git元数据规则
先创建.gitignore文件,添加SVN元数据目录屏蔽规则:
再关闭Git会和SVN冲突的元数据检测逻辑:.svn/git config core.autocrlf false # 关闭行尾自动转换,避免修改原文件内容 git config core.filemode false # 关闭文件权限检测,避免SVN权限标记冲突初始化Git仓库并关联远程
git init git remote add origin <Git仓库地址>无冲突合并两个仓库的内容
拉取Git远程内容时优先保留本地SVN的文件,避免覆盖现有内容:git fetch origin git checkout -b main origin/main # 替换为你实际的Git主干分支名,如master git reset --mixed HEAD # 将Git分支内容还原到暂存区,不修改工作区现有SVN文件 # 执行git status确认两边无冲突后,提交初始同步状态 git add . git commit -m "chore: 同步SVN与Git初始状态" git push origin main配置SVN元数据屏蔽规则
给SVN设置忽略规则,排除Git的元数据文件:svn propset svn:ignore '.git .gitignore' . svn commit -m "chore: 忽略Git元数据文件"
日常双向同步操作规范
SVN变更同步到Git
# 拉取SVN最新变更 svn up # 提交到Git远程 git add . git commit -m "sync: 同步SVN变更 - <对应SVN提交说明>" git push origin main
Git变更同步到SVN
# 拉取Git最新变更 git pull origin main # 提交到SVN远程 svn add --force . # 自动识别新增文件,自动跳过已配置的svn:ignore内容 svn commit -m "sync: 同步Git变更 - <对应Git提交说明>"
注意事项
- 不要同时在两边修改同一文件后提交,每次同步前先拉取另一边的最新变更,避免文件冲突
- 每次同步前先执行
svn status和git status确认没有未提交的本地变更 - 项目内统一行尾符格式,不要开启Git的自动转换逻辑
内容的提问来源于stack exchange,提问作者Cláudio Ribeiro
相关产品推荐
相关产品推荐

