Git 设置多个远程仓库

使用两个或更多的Git仓库?没问题!在本教程中,您首先将学习如何设置多个Git远程仓库。接下来,您还将学习如何通过一条命令将代码“推送”到多个Git仓库。
作为一名程序员,Git的出现对我来说是最棒的事情之一!如果您不知道Git是什么,在继续学习之前,您或许应该先阅读一段相关介绍。Git能让您将本地计算机上的代码与远程仓库中的代码进行同步,这些远程仓库是与其他开发人员(通常是团队成员)共享的。在本教程中,我们将学习如何配置一个或多个Git远程仓库,并通过一条命令将代码推送到这些仓库。
两分钟速成版
- 定义一个指向多个Git远程仓库的Git远程引用。
- 比如说,我们将其命名为“all”:
git remote add all REMOTE-URL-1
。
- 比如说,我们将其命名为“all”:
- 注册第一个推送URL:
git remote set-url --add --push all REMOTE-URL-1
。 - 注册第二个推送URL:
git remote set-url --add --push all REMOTE-URL-2
。 - 使用
git push all BRANCH
将一个分支推送到所有远程仓库——将BRANCH
替换为实际的分支名称。 - 您无法从多个远程仓库进行拉取操作,但可以使用
git fetch --all
从多个远程仓库获取更新。
先决条件
- 具备Git的使用知识——了解
git init
、git pull
、git commit
和git push
等命令。 - 对一个或多个远程Git仓库具有写入权限。
添加多个远程仓库
当您执行git init
时,会初始化一个本地Git仓库。一般来说,其目的是将这个本地仓库与一个远程Git仓库进行同步。为了能够将代码与远程仓库进行同步,您需要指定远程仓库的位置。
第一步是向您的项目中添加远程仓库。
# 添加Git远程仓库的语法
git remote add REMOTE-ID REMOTE-URL
按照惯例,最初的/主要的远程仓库被称为“origin”。以下是一个实际示例:
# 添加远程仓库1:GitHub
git remote add origin git@github.com:jigarius/toggl2redmine.git
# 添加远程仓库2:BitBucket
git remote add upstream git@bitbucket.org:jigarius/toggl2redmine.git
在上述示例中,我们添加了一个名为Toggl 2 Redmine的项目在GitHub上的远程仓库。使用上述命令可以添加一个或多个远程Git仓库——确保每个仓库都有其唯一的ID,比如上述示例中的“origin”和“upstream”。
配置主要远程仓库
尽管您可以添加多个远程仓库,但通常情况下,您项目的每个分支都可以配置为跟踪单个远程分支。您可以按照以下方式设置一个分支来跟踪远程分支:
# 切换本地分支
git checkout BRANCH
# 配置本地分支以跟踪远程分支
git branch -u origin/BRANCH
在这里,BRANCH
是远程分支的名称,通常与您的本地分支名称相同。
更改远程仓库的URL
如果您想更改已经添加的远程仓库所关联的URL,可以使用以下命令:
# 语法为:git remote set-url REMOTE-ID REMOTE-URL
git remote set-url upstream git@foobar.com:jigarius/toggl2redmine.git
列出所有远程仓库
要查看所有远程仓库的列表,只需使用以下命令:
$git remote -v
origin git@github.com:jigarius/toggl2redmine.git (fetch)
origin git@github.com:jigarius/toggl2redmine.git (push)
upstream git@bitbucket.org:jigarius/toggl2redmine.git (fetch)
upstream git@bitbucket.org:jigarius/toggl2redmine.git (push)
删除一个远程仓库
如果您添加了一个不再需要的远程仓库,可以按照以下方式删除它:
# 语法为:git remote remove REMOTE-ID
git remote remove upstream
推送到多个远程仓库
现在您已经有了一个主要的远程仓库以及其他远程仓库,是时候配置推送操作了。目标是通过一条git push
命令将代码推送到多个Git远程仓库。
要做到这一点,选择一个将指代所有远程仓库的远程引用ID。我通常将其命名为“all”,但也有一些开发者更喜欢使用“origin”。思路是将所有远程仓库的URL作为“推送URL”添加到这个远程引用中。以下是具体操作:
# 使用主要仓库的URL创建一个名为“all”的新远程引用
git remote add all git@github.com:jigarius/toggl2redmine.git
# 将该远程引用重新注册为推送URL
git remote set-url --add --push all git@github.com:jigarius/toggl2redmine.git
# 向一个远程引用添加一个推送URL。这意味着“git push”操作也会将代码推送到这个Git URL
git remote set-url --add --push all git@bitbucket.org:jigarius/toggl2redmine.git
如果您不想创建一个名为“all”的额外远程引用,可以跳过第一条命令,并在后续命令中使用“origin”代替“all”。
现在,您可以通过一条命令将代码推送到所有远程仓库了!
# 将BRANCH替换为您想要推送的分支名称
git push all BRANCH
从多个远程仓库拉取
无法从多个仓库执行git pull
操作。然而,您可以使用以下命令从多个仓库执行git fetch
操作:
git fetch --all
这将从所有远程仓库获取信息。您可以使用以下命令切换到特定远程仓库上某个分支的最新版本:
# 检出您想要操作的分支
git checkout BRANCH
# 将分支重置为与特定远程仓库上的状态匹配
git reset --hard REMOTE-ID/BRANCH
结论
在多个Git仓库之间同步代码很容易,尤其是推送到多个远程仓库的操作。当您在维护同一个仓库的镜像/副本时,这会很有帮助。您所需要做的就是在一个远程引用上设置多个推送URL,然后像往常一样对该远程引用执行git push
操作。
后续步骤
- 阅读关于Git远程仓库的官方文档。