不知道它是否是问这个问题的合适地点,我无法理解某些内容,因此谷歌搜索无济于事。

我一直在引用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 ,因此这是一个足够正常的状态。 编辑:与sschuberth answered一样,多个 Remote 具有相同的URL是很不正常的。这不是有害的,但您最好删除其中之一。

什么是 Remote ?

Remote 只是一个名称,例如originupstreamgithub甚至fredsrujan

Git将每个这样的名称存储在配置文件中。然后,使用该名称,Git可以存储其他信息,例如一个或多个URL。 (要使一个 Remote 有用,它需要至少有一个URL,存储为其url设置。)要进行获取,Git通常每个 Remote 也至少需要一个fetch设置。

git remote -v列出两个或多个 Remote 时

最常见的是,您的每个Git存储库都只有一个远程服务器,通常命名为origin。这是因为当git clone通过复制某些现有存储库创建新存储库时,它会在新存储库中记录现有存储库的URL。要记录此消息,它将创建一个远程,默认情况下,它将使用名称origin来表示该远程。
git remote add子命令添加了其他 Remote 。您为 Remote 指定一个名称和一个URL,然后Git记录新的 Remote 名称,并将其主URL设置为您刚提供的名称。

之后,git remotegit remote show将列出您已设置的两个(或更多) Remote 。

如何使用 Remote ?

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

如果您有两个 Remote ,一个名为fred,一个名为srujan,则可以git fetch fredgit fetch srujan。同样,您可以git push fredgit push srujan。这些将使用存储在该 Remote 下的URL与指定的 Remote 联系。

从远程获取时,您的Git将复制其Git的分支,但重命名它们,以便它们对于特定的远程是唯一的。例如,如果我从远程srujan获取,并且srujan的Git(位于指定的URL)具有masterdevelop分支,那么我将获得名为srujan/mastersrujan/develop的远程跟踪分支。如果我随后从远程fred获取,我将获得远程跟踪分支,例如fred/masterfred/develop

git pull呢?
git pull命令是git fetch后跟git merge的便捷缩写。像git fetch一样,git pull也使用第三个单词,即 Remote 的名称。 git pull的主要功能是将其交给git fetch

关于git pull的怪异之处在于它还带有分支名称。它以一种奇怪的方式使用它们:git pull srujan master的意思是“先运行git fetch srujan,然后再运行git merge surjan/master”。

通常最好至少自己一开始就自己运行git fetch,因为获取步骤可能会失败(例如,如果您的网络连接断开),或者 merge 步骤可能会失败(如果 merge 无法完成)自动地)。在您不熟悉Git之前,我相信您最好能准确地知道哪一步出错了,因为您将需要采取不同的措施来修复它,具体取决于哪一步失败了。

您可能还想重新建立基础,而不是 merge 。如果有的话,这比 merge 要复杂得多(尽管通常也是一种更好的方法)。您可以让git pull进行重新设置而不是 merge ,事实上,您可以自动执行此操作,但是细节有点复杂,首先手动运行git fetch,然后再手动运行git rebase,一点也不复杂。

(简而言之,除非您非常熟悉获取, merge 和重新设置基础,并准备让Git一次尝试完成所有操作,否则请不要使用git pull。)

10-06 13:45
查看更多