git - 使用 URL 时 Git fetch 不提取更改
问题描述
我正在尝试设置一个服务,该服务将在检测到远程分支上的更改时自动更新我的存储库。在任何人提到它之前,我知道在 URL 中嵌入密码是不好的做法。我目前正在使用:
git fetch https://<user>:<pass>@github.com/<org>/<repo>
这给出了以下输出:
From https://github.com/<org>/<repo>
* branch development -> FETCH_HEAD
当我git status
在获取后运行时,它不会检测到最新的更改。
如果我在没有 URL 的情况下运行正常git fetch
并手动提供用户名和密码,我会得到不同的输出:
From https://github.com/<org>/<repo>
96353f7..e88782c development -> origin/development
然后git status
按预期运行并检测到远程分支上有更改。
我对 Git 不是很有经验,我觉得我错过了一些非常明显的东西。我的错误在哪里?
编辑
所以看起来缺少的部分是我在 URL 之后指定本地和远程分支:
git fetch https://<user>:<pass>@github.com/<org>/<repo> development:origin/development
正如公认的答案指出的那样:如果您不指定远程名称,git 会将远程更改放在默认的 FETCH_HEAD 中。这可以通过明确指定本地和远程分支来解决。
我仍然有点困惑为什么git fetch
知道默认情况下从源远程获取,但是指定 URL 会改变这个默认值。但无论如何它现在都在工作
解决方案
Git 遥控器是与 URL 关联的名称。默认名称是origin
,并且 URL 通常是您从中克隆的任何内容。
Git 将远程存储库的快照存储在“远程跟踪分支”中。这些是形式<remote-name>/<branch>
。当你git fetch origin
Git 从关联的 URL 中获取更改origin
并将它们放入远程分支时。development -> origin/development
告诉你它把远程的开发分支放到你的origin/development
远程分支中。
当你运行git fetch https://<user>:<pass>@github.com/<org>/<repo>
并只给它 URL,没有远程名称时,Git 没有远程跟踪分支的名称。所以它只是把它们粘在一个短暂的地方FETCH_HEAD
,记录你的最后一个git fetch
。这development -> FETCH_HEAD
就是告诉你的。
无论如何,git status
都不会显示任何变化。git fetch
永远不要更改您的本地分支机构、索引或结帐。它只会更新您的远程跟踪分支。这样可以安全地习惯性地运行git fetch
以更新远程存储库的快照。
您正在寻找更新远程分支的本地副本的内容是git pull
.
最后,为了避免每次都输入您的用户名和密码,或者更糟糕的是,将它们硬编码到 URL 中,设置一个 Git 凭证助手来安全地存储您的用户名和密码。
推荐阅读
- php - 如何将文档根目录更改为脚本的公共目录?
- ios - SpriteKit 驾驶技巧
- asp.net - 在 Modalpopupextender 内的 Datalist 按钮中未触发
- c++ - 顺序必要的正则表达式脚本的时间复杂度更高?
- bash - 在 ubuntu / Linux 中从 Shell 脚本(启动)运行 GamingAnywhere
- woocommerce - Woocommerce 我的帐户屏幕导航链接区域搞砸了
- java - 为什么数据在 Firebase 数据库的循环中一次又一次地添加?
- fortran - 如何显示不连续函数
- javascript - 在 SVG 中动态插入图像不显示
- microsoft-graph-api - 如何以编程方式触发 OneDrive/OneNote 同步?