不知道它是否是问这个问题的合适地点,我无法理解某些内容,因此谷歌搜索无济于事。
我一直在引用git
教程,(显然,这是我的新手)。
我学会了命令git remote -v
来检查远程状态。好吧,所有的git教程都有类似this的快照,显示了结果:
origin https://github.com/something/something-else.git (fetch)
origin https://github.com/something/something-else.git (push)
但是,当我尝试使用该命令时,
origin
和github
都得到了相似的结果。像这样的东西: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)
问题:
我不确定这里的
github
和origin
是什么意思。为什么我两次得到它? (与教程不同)我也不确定是否做错了什么,或者说是完全正确的。将我指向其他一些解释此问题的教程也可以。随时提出修改建议。
最佳答案
Git支持多个 Remote ,因此这是一个足够正常的状态。 编辑:与sschuberth answered一样,多个 Remote 具有相同的URL是很不正常的。这不是有害的,但您最好删除其中之一。
什么是 Remote ?
Remote 只是一个名称,例如origin
或upstream
或github
甚至fred
或srujan
。
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 remote
或git remote show
将列出您已设置的两个(或更多) Remote 。
如何使用 Remote ?
当您运行git fetch
或git push
时,下一个单词通常是要从中获取或推送到的 Remote 的名称。例如,git fetch origin
从名为origin
的远程获取。
如果您有两个 Remote ,一个名为fred,一个名为srujan,则可以git fetch fred
或git fetch srujan
。同样,您可以git push fred
或git push srujan
。这些将使用存储在该 Remote 下的URL与指定的 Remote 联系。
从远程获取时,您的Git将复制其Git的分支,但重命名它们,以便它们对于特定的远程是唯一的。例如,如果我从远程srujan
获取,并且srujan的Git(位于指定的URL)具有master
和develop
分支,那么我将获得名为srujan/master
和srujan/develop
的远程跟踪分支。如果我随后从远程fred
获取,我将获得远程跟踪分支,例如fred/master
和fred/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
。)