"git remote -v" 显示 (fetch) 和 (push) 两次,一次用于 'github',一次用于 'origin' 这是什么意思?

"git remote -v" shows (fetch) and (push) twice, once for 'github' and once for 'origin' what does that mean?

不确定在这个地方问这个问题是否合适,我无法理解某些内容,谷歌搜索也无济于事。

我一直在参考 git 教程,(显然我是新手)。

我学会了检查远程状态的命令git remote -v。好吧,所有 git 教程都有像 this 这样的快照,显示结果:

origin  https://github.com/something/something-else.git (fetch)
origin  https://github.com/something/something-else.git (push)

但是当我尝试该命令时,我得到了 origingithub 相似的结果。像这样:

github  https://github.com/srujan7/something-something-url.git (fetch)
github  https://github.com/srujan7/something-something-url.git (push)
origin  https://github.com/srujan7/something-something-url.git (fetch)
origin  https://github.com/srujan7/something-something-url.git (push)

问题:

我不知道这里的 githuborigin 是什么意思。为什么我得到了两次? (与教程不同) 我也不确定是否做错了什么,或者完全正确。将我指向其他一些解释这一点的教程也可以。

随时提出修改建议。

在 Git 中,"remote" 基本上只是服务器 URL 的别名,因此您不必一直输入完整的 URL .如果您没有明确指定远程名称,则默认名称为 origin。在你的例子中,你有两个遥控器,origingithub,指向同一个 URL(无论出于何种原因;你可能按照一些教程步骤创建了 github 遥控器用于演示目的)。所以两者之一是多余的。由于 github 是非标准名称,我只需通过键入

再次远程遥控
git remote rm github

Git支持多个遥控器,所以这是一个足够正常的状态。 编辑:作为,多个遥控器具有相同的URL不是很正常。它无害,但您不妨删除其中一个。

什么是遥控器?

遥控器只是一个名称,例如 originupstreamgithub 甚至 fredsrujan

Git 将每个这样的名称存储在配置文件中。在该名称下,Git 可以存储附加信息,例如一个或多个 URL。 (要使遥控器有用,它需要至少有一个 URL,存储为它的 url 设置。)对于抓取,Git 通常需要至少一个 fetch 设置每个遥控器也是如此。

git remote -v 列出两个或更多遥控器时

最常见的是,每个 Git 存储库只有一个远程,通常命名为 origin。这是因为当 git clone 通过复制一些现有的存​​储库来创建新的存储库时,它会记录(在新存储库中)现有存储库的 URL。为了记录这一点,它创建了一个遥控器,默认情况下,它使用该遥控器的名称 origin

git remote add 子命令添加了额外的遥控器。您为遥控器指定一个名称和一个 URL,Git 记录新的遥控器名称并将其主要 URL 设置为您刚刚提供的名称。

在此之后,git remotegit remote show 将列出您设置的两个(或更多)遥控器。

如何使用遥控器?

当您 运行 git fetchgit push 时,下一个单词通常是要从中获取或推送到的远程名称。例如,git fetch origin 从名为 origin.

的远程获取

如果您有两个遥控器,一个叫 fred,一个叫 srujan,您可以 git fetch fredgit fetch srujan。同样,您可以 git push fredgit push srujan。这些将使用存储在该遥控器下的 URL 联系指定的遥控器。

从远程获取时,您的Git将复制他们Git的分支,但重命名 以便它们对于那个特定的遥控器是唯一的。例如,如果我从远程 srujan 获取,并且 srujan 的 Git(在指定的 URL)有分支 masterdevelop,我将得到 远程跟踪 个名为 srujan/mastersrujan/develop 的分支。如果我然后从远程 fred 获取,我将得到像 fred/masterfred/develop.

这样的远程跟踪分支

git pull呢?

git pull 命令是为了方便 shorthand 用于 git fetch 后跟 git merge。和 git fetch 一样,git pull 接受第三个词,即遥控器的名称。 git pull 做的主要事情是将它交给 git fetch

git pull 的奇怪之处在于它还采用分支名称。它以一种奇怪的方式使用它们:git pull srujan master 表示 "run git fetch srujan first, then run git merge surjan/master".

您通常最好自己 运行宁 git fetch,至少在一开始是这样,因为 提取步骤可能会失败(例如,如果您的网络连接中断) 合并步骤失败(如果无法自动完成合并)。在你非常熟悉 Git 之前,我相信你最好准确地知道 哪一步 出错了,因为你需要采取不同的行动来修复它,这取决于哪一步失败了。

您可能还想变基而不是合并。如果有的话,这比合并更复杂(尽管通常也是更好的方法)。您 可以 获得 git pull 进行变基而不是合并,实际上您可以自动完成此操作,但细节有点复杂,手动 运行宁git fetch第一,然后git rebase其次,一点也不复杂。

(简而言之,在您非常熟悉获取、合并和变基并准备好让 Git 尝试一次完成所有操作之前,请不要使用 git pull。 )