假设我从路径克隆了一个git存储库/path/to/repo.原始存储库将是一个名为"origin"的远程存储库.我可以使用命令从原点获取对象git fetch origin.这将从远程"origin"中检索所有对象,包括所做的任何分支.
令人好奇的是,如果我使用该命令从同一个存储库中显式获取git fetch /path/to/repo,我似乎检索所有提交对象,但不检索任何分支.
这是为什么?在这两种情况下我都没有做同样的事情吗?Git的行为如何如此不同?
命名远程使用其配置,在refspec获取此远程时设置架构:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = /path/to/repo
Run Code Online (Sandbox Code Playgroud)
所以,这两种格式是等价的:
git fetch origin
git fetch /path/to/repo +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)
基本上:git fetch <path> <source>:<destination>.目的地在这里很重要,因为它是存储远程HEAD和分支指针的地方.
通过这样做git fetch /path/to/repo,您不需要设置任何refspec.因此,它只提取提交,而不是对象,因为git没有指示获取和存储它们.
这里可能有一些细节或命名约定不正确,随时编辑.但全球的想法应该是正确的