Git:从命名远程获取和从 URL 获取有什么区别?

标签 git fetch

假设我从路径 /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/

相关文章:

javascript - 等待 JavaScript 中的获取结果

git 确保每个文件末尾有换行符

asp.net - azure 部署问题:do not have permission to view this directory or page

javascript - 如何在 javascript 中迭代 'fetch' 返回的结果?

json - 工兵/ slim : how to fetch a local json file to retrieve data

php - 如何在 PHP 中仅使用用户名作为登录名发布从 MySQL 提取的全名?

Git:如何从主分支中较早/较旧的提交创建新分支?

git - Terraform 不遵守 git 的 ssh 配置

git - 删除 Azure Devops (VSTS) 中的 git fork 关系

javascript - 为什么 fetch 会返回 "TypeError: Failed to fetch"而不仅仅是 "Failed to fetch"?