Git 设置多个远程仓库

Git

使用两个或更多的Git仓库?没问题!在本教程中,您首先将学习如何设置多个Git远程仓库。接下来,您还将学习如何通过一条命令将代码“推送”到多个Git仓库。

作为一名程序员,Git的出现对我来说是最棒的事情之一!如果您不知道Git是什么,在继续学习之前,您或许应该先阅读一段相关介绍。Git能让您将本地计算机上的代码与远程仓库中的代码进行同步,这些远程仓库是与其他开发人员(通常是团队成员)共享的。在本教程中,我们将学习如何配置一个或多个Git远程仓库,并通过一条命令将代码推送到这些仓库。

两分钟速成版

  • 定义一个指向多个Git远程仓库的Git远程引用。
    • 比如说,我们将其命名为“all”:git remote add all REMOTE-URL-1
  • 注册第一个推送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 initgit pullgit commitgit 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远程仓库的官方文档
Git
Publish on 2024-07-01,Update on 2025-02-10