假设我从路径 /path/to/repo
克隆了一个 git 存储库。原始存储库将是一个名为“origin”的远程仓库。我可以使用命令 git fetch origin
从 origin 获取对象。这将从远程“源”检索所有对象,包括创建的任何分支。
奇怪的是,如果我使用命令 git fetch/path/to/repo
显式地从同一个存储库中获取数据,我似乎会获取所有提交对象,但不会获取任何分支。
这是为什么呢?在这两种情况下,我不是在做完全相同的事情吗? Git 的行为为何如此不同?
最佳答案
命名远程使用他们的配置,他们设置了一个 refspec
获取此 Remote 时的模式:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = /path/to/repo
所以,这两种格式是等价的:
git fetch origin
git fetch /path/to/repo +refs/heads/*:refs/remotes/origin/*
基本上:git fetch <path> <source>:<destination>
.目的地在这里很重要,因为它是存储远程 HEAD 和分支指针的地方。
通过做 git fetch /path/to/repo
,您没有设置任何 refspec。因此,它只获取提交,而不是对象,因为 git
尚未指示获取和存储它们。
这里可能有一些细节或命名约定不正确,请随时编辑。但是全局思路应该是正确的
关于Git:从命名远程获取和从 URL 获取有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085504/