1. 前言
用 GitHub 管理自己的开源项目有几年了, 最近一年更新得比较多, 仓库也越来越多越来越大. 有时候感觉 GitHub 太慢, 尤其是最近感觉更为明显, 于是萌生了再找个国内类似 GitHub 的代码托管平台的想法, 同时我也还想持续更新 GitHub 上的仓库, 于是需要一个本地仓库 (我自己的开发机) 多个远程仓库(GitHub, 码云, coding).
2. 一个远程仓库的 Git config
我的开源项目 https://github.com/Bwar/Nebula 一个基于事件驱动的高性能 TCP 网络框架的 Git 配置文件. Git/config 如下:
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- [remote "origin"]
- url = https://github.com/Bwar/Nebula.git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
3. 用 Git 命令行添加多个远程仓库
添加一个名为 "mirror" 的远程仓库:
Git remote add mirror https://gitee.com/Bwar/Nebula.git
执行完这条命令后. Git/config 文件内容变成了:
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- [remote "origin"]
- url = https://github.com/Bwar/Nebula.git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
- [remote "mirror"]
- url = https://gitee.com/Bwar/Nebula.git
- fetch = +refs/heads/*:refs/remotes/mirror/*
此时已经是一个本地仓库, 两个远程仓库. 使用下面的命令可以分别从两个远程仓库拉取和推送到两个远程仓库.
- Git pull origin master
- Git pull mirror master
- Git push origin master
- Git push mirror master
4. 一条命令同时更新多个远程仓库
目前我的开源项目只有我一个 contributor(计划 2018 年 12 月开始引入其他 contributor), 主要 push 比较少 pull, 输入多条命令我都觉得麻烦, 一条命令将当前分支同时更新到两个远程仓库才能让我满意. 于是改变一下, 不用上面的 mirror 做法, 直接在 origin 中添加一个 url 来实现一个本地仓库多个远程仓库.
Git remote set-url --add origin https://gitee.com/Bwar/Nebula.git
执行这条命令后. Git/config 内容变成:
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- [remote "origin"]
- url = https://github.com/Bwar/Nebula.git
- url = https://gitee.com/Bwar/Nebula.git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
- [remote "mirror"]
- url = https://gitee.com/Bwar/Nebula.git
- fetch = +refs/heads/*:refs/remotes/mirror/*
之前添加的 "mirror" 留着或删掉都没关系, 这时候我们一条命令即可更新两个远程仓库:
Git push origin master
5. 免输入密码操作远程仓库
执行远程仓库操作需要输入密码是件比较麻烦的事情, 在配置文件的 url 里配上用户名和密码即可免掉这样的麻烦, 提高操作效率. 免输密码操作远程仓库还可以通过 SSH 方式实现, 下面只给出 https 方式的免输密码配置:
url = https://${user}:${password}@GitHub.com/Bwar/Nebula.Git
把上面配置中的 "${user}" 和 "${password}" 用你的远程仓库用户名和密码代入即可.
6. 直接修改 Git 配置文件实现多个远程仓库
上面通过 Git remote 命令完成一个本地仓库多个远程仓库配置, 这些命令实际上都是通过修改. Git/config 实现的, 其实直接修改配置文件可能会更快, 我就是直接修改配置文件完成. 最后我的多个远程仓库配置如下:
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- [remote "origin"]
- url = https://${user}:${password}@GitHub.com/Bwar/Nebula.Git
- url = https://${user}:${password}@gitee.com/Bwar/Nebula.Git
- url = https://${user}:${password}@Git.coding.NET/Bwar/NebulaBootstrap.Git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
完毕.
来源: http://www.bubuko.com/infodetail-3346162.html