使用TortoiseGit转换EDK2本地SVN至Git时连接失败求助
问题说明
EDK2已从SVN迁移至Git,我想把本地SVN工作副本转换为Git版本库,以便和官方Git版本同步并合并本地修改,但执行以下命令时出现仓库连接错误:
git.exe svn clone "file:///C/edk/edk2" "C:\edk\edk2-git\edk2" -T trunk -b branches -t tags
错误输出:
Can't create session: Unable to connect to a repository at URL 'file:///C/edk/edk2': Unable to open repository 'file:///C/edk/edk2' at C:/Program Files/Git/mingw64/share/perl5/Git/SVN.pm line 310.
git did not exit cleanly (exit code 1) (28781 ms @ 3/24/2024 1:44:47 PM)
我已补充svn status、ls -l、svn ls、git status、git ls-tree HEAD的输出信息,想确认该操作是否可行,是否遗漏了关键步骤。
分析与解决方案
1. 先排查路径有效性
你用的file:///C/edk/edk2是否指向完整的SVN仓库根目录?注意:git svn clone需要的是包含conf、db等子文件夹的SVN仓库核心目录,而不是你平时签出的SVN工作副本目录。如果C:\edk\edk2是工作副本,那路径直接错了,必须改为真正的SVN仓库路径(本地裸仓库或远程SVN服务器地址)。
2. 更稳妥的转换流程(不建议直接用git svn克隆工作副本)
直接从本地SVN工作副本通过git svn clone转换本身就不合理,因为工作副本不是完整仓库。推荐以下流程:
- 步骤1:克隆官方Git仓库
git clone https://github.com/tianocore/edk2.git C:\edk\edk2-git\edk2 cd C:\edk\edk2-git\edk2 - 步骤2:导出本地SVN修改
在你的SVN工作副本目录下,生成差异补丁:
或者直接备份所有修改过的文件。svn diff > local_changes.patch - 步骤3:将补丁应用到Git仓库
把补丁文件复制到Git仓库目录,执行:
若有冲突,手动解决后用git apply local_changes.patchgit add标记冲突已处理。 - 步骤4:提交并同步官方代码
提交本地修改:
拉取官方最新代码并合并:git add . git commit -m "合并本地SVN修改"
(若官方主分支为git pull origin mainmaster,替换为对应分支名)
3. 若坚持用git svn方式
如果一定要通过git svn转换,需满足:
- 确保路径指向完整SVN仓库(比如当初用
svnadmin create创建的目录); - 检查目录权限,保证Git进程能读取仓库内所有文件(尤其是
db文件夹); - 先验证
svn ls file:///C/edk/edk2能否正常输出内容,若该命令失败,说明路径或仓库本身有问题。
内容的提问来源于stack exchange,提问作者user3161924

