使用git-tfs迁移TFS代码至Azure DevOps Git仓库时推送失败求助
解决TFS迁移至Azure DevOps Git仓库的推送问题
核心问题分析
你之前的三种操作都踩了git-tfs的使用误区:
- 方法1、2:在已存在Git仓库(提前
git init或克隆远程仓库)的目录下执行git tfs clone,导致嵌套Git仓库,触发submodule提示,后续的git add .也无法正确识别嵌套的仓库内容。 - 方法3:本地git-tfs仓库与远程Azure DevOps Git仓库属于无关历史,直接pull会被拒绝,而push失败是因为远程仓库有初始提交(比如默认的README),本地分支落后。
正确迁移步骤
清理环境,全新开始
删除之前所有操作生成的文件夹,创建一个全新的空目录并进入。用git-tfs完整克隆TFS代码及历史
执行以下命令,将TFS的目标分支完整克隆到本地(替换占位符为你的实际路径):git tfs clone <TFS服务器集合URL> <TFS项目/分支路径>示例:
git tfs clone http://tfs-server:8080/tfs/DefaultCollection $/MyProject/Main
该命令会自动在本地创建Git仓库,包含TFS的所有提交历史。关联Azure DevOps Git远程仓库
进入克隆后的本地仓库目录,添加远程origin:git remote add origin <Azure DevOps Git仓库URL>处理远程仓库的初始提交(若有)
如果Azure DevOps Git仓库是空的,直接跳过这一步;如果仓库有默认生成的README.md或其他初始提交,执行:git pull origin main --allow-unrelated-histories(注:若远程默认分支是
master,替换为master)
此时会触发合并冲突,根据需求保留或合并文件(比如保留远程的README),完成后提交合并结果:git add . git commit -m "Merge initial remote commit with TFS history"推送所有分支与历史
执行推送命令,将本地所有分支和标签推送到远程:git push -u origin --all git push origin --tags
额外注意事项
- 确保git-tfs版本为最新,避免兼容性问题。
- 如果TFS有多个分支,可使用
git tfs fetch拉取所有分支后再逐个推送。
内容的提问来源于stack exchange,提问作者user1748546
相关产品推荐
相关产品推荐

