将 Git 项目提交到多个不同的仓库

在维护一些开源项目的时候,会遇到需要将代码提交到多个开源仓库,比如 Github/Gitlab/Gitee 等等,一般的做法是借助 GUI 工具配置多个远程仓库,例如 Sourcetree 里就是这样。

但是这样也并没有很方便,因为提交的时候需要分别提交,例如我配置了 2 个仓库,就需要提交 2 次,如果仓库比较多,重复性的操作就会比较多,而且容易出错,忘记提交了哪些仓库,哪些仓库还没提交。

其实有个更方便的方法可以解决这个问题,但有个前置要求,就是不同仓库的分支名必须相同。

确保分支名一致后,打开项目目录下的 .git/config 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://gitee.com/eoner/gulp-automation.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "master"]
url = http://192.168.1.15/1one/gulp-automation.git
fetch = +refs/heads/*:refs/remotes/master/*

这份配置就是上面我举例的 git 仓库的配置,如果要一次提交到多个仓库,就只需要在 [remote "origin"] 里配置多个 url 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://gitee.com/eoner/gulp-automation.git
url = http://192.168.1.15/1one/gulp-automation.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

是不是很简单?好叭,我承认我水了一篇,但这个需求对我来说确实挺需要的。因为有个开源项目不光需要在公司内网发布,还需要提交到 Gitee 。

原本提交 2 个仓库还可以接受,大不了多操作一遍。但最近我把它在 Github 上也开了一个仓库,这一下就需要提交到 3 个仓库了,这个重复的工作就变得有点烦人了,于是就打算把这个问题解决一下。

在解决这个问题的时候还想到一件事,其实看一个人是否有程序员思维,除了直接看代码外,从做事方式和流程也能看出来。就比如这次这事,如果我还在坚持手动重复提交 3 次的操作方式,或许我就不太适合干这一行了,毕竟程序员如果不会“偷懒”,怎么能算个合格的程序员呢。