是否可以将一个Git仓库同时关联两个远程仓库并同步推送?
解决方案
你的两个需求均可以通过Git原生功能实现,无额外工具依赖,操作不会损坏你现有仓库内容:
一、实现单命令同时推送两个远程仓库(满足需求1)
该方案不需要修改你现有操作习惯,配置一次后后续git push即可同时同步两个仓库:
- 第一步:查看当前本地仓库已关联的远程地址,确认现有origin指向你的个人仓库
正常输出会包含以下两行(地址匹配你个人仓库地址):git remote -vorigin git@github.com/user/repo.git (fetch) origin git@github.com/user/repo.git (push) - 第二步:给origin远程添加学校仓库作为第二个推送地址
# 地址替换为你学校仓库的实际SSH/HTTPS地址 git remote set-url --add origin git@github.university.com/user/repo.git - 第三步:验证配置是否生效,再次执行
git remote -v,此时origin的push条目会显示两个地址:origin git@github.com/user/repo.git (fetch) origin git@github.com/user/repo.git (push) origin git@github.university.com/user/repo.git (push)
配置完成后,你平时正常执行git push origin <分支名>就会自动将改动同时推送到个人和学校两个仓库,拉取代码时仍默认从你个人仓库拉取,不影响原有使用体验。
如果后续毕业不需要再推送学校仓库,可执行以下命令删除第二个推送地址:
git remote set-url --delete origin git@github.university.com/user/repo.git
二、仅迁移仓库保留全部提交历史(满足需求2,保底方案)
如果你不需要同时推送,仅需要把现有代码和全部提交历史同步到学校仓库,操作更简单,完全不会影响你现有本地和个人仓库的内容:
- 第一步:在学校GitHub企业服务器上创建完全空白的新仓库,不要勾选初始化README、LICENSE、.gitignore等选项,保持仓库为空状态。
- 第二步:进入本地项目目录,执行命令推送所有分支的全部提交历史:
git push git@github.university.com/user/repo.git --all - 第三步(可选):如果需要把所有标签也同步到学校仓库,额外执行:
git push git@github.university.com/user/repo.git --tags
注意事项
操作前可以提前复制一份本地项目目录作为备份,进一步降低风险。只要你不执行git push -f这类强制覆盖命令,原有个人仓库的所有内容都不会被修改。
内容的提问来源于stack exchange,提问作者Henry Dikeman
相关产品推荐
相关产品推荐

