一个 Git 仓库有多个远程仓库是什么意思?

5
我在阅读《Pro Git》时,远程仓库这一章对我来说有些困惑。特别是,有一段话作者说:

http://git-scm.com/book/zh/v2/Git-基础-远程仓库的使用

“如果您有多个远程仓库,则该命令会列出所有仓库。例如,我的Grit仓库大致如下。”

$ cd grit
$ git remote -v
bakkdoor  git://github.com/bakkdoor/grit.git
cho45     git://github.com/cho45/grit.git
defunkt   git://github.com/defunkt/grit.git
koke      git://github.com/koke/grit.git
origin    git@github.com:mojombo/grit.git

这意味着我可以轻松地从这些用户中获取贡献。但请注意,只有origin remote是SSH URL,因此它是唯一可以推送的远程地址(我们将在第4章中介绍原因)。
我的问题是,在grit中,这四个远程存储库(bakkdoor、cho、defunkt、koke)是什么关系?它们是grit repo的组成部分吗?还是它们是相同grit repo的独立副本?或者它们根本没有关系?
此外,如果grit repo由这4个单独的repos组成,为什么它们被单独命名?将它们全部放在“origin”下面不更合理吗?
正如您所看到的,我完全摸不着头脑。我觉得对我解释的方式正在让我感到困惑。
1个回答

7
这个想法是你可以创建一个远程仓库("origin"),并将项目的代码推送到那里。假设由于你是该项目的创建者,因此你的仓库被认为是该项目的官方版本。
假设只允许你向该远程仓库推送,但其他人可以从中拉取。
因此,其他人可以克隆你的仓库并基于它创建自己的远程仓库(例如,GitHub允许您基于另一个用户的仓库创建远程仓库)。他们可以在自己的仓库中添加功能。现在,如果他们想要贡献给官方版本(由你维护),他们可以告诉你他们添加的新功能,并要求你将它们添加到你的项目中。
其中一种方法是将他们的仓库作为附加的远程仓库进行添加(bakkdoor、cho45等都是这样的仓库,它们以创建它们的GitHub用户命名)。由于你不拥有这些仓库,因此你只能读取它们。然后,你可以从中拉取任何想要的更改,并将它们推送到你的远程仓库,从而将这些更改集成到官方版本中。
这种类型的协作在《Pro Git》书中讨论。你应该继续阅读,一切都会变得更加清晰。

如果我不是grit存储库的所有者,这样的东西有什么用途? - itsmichaelwang
@Zapurdead 嗯,一些开源项目就是这样运作的。很多人都可以做出贡献,但一个人维护着项目的主要版本。 - Eran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接