Git 使用 URL 时获取不提取更改
Git fetch not pulling changes when using URL
我正在尝试设置一项服务,该服务将在检测到远程分支上的更改时自动更新我的存储库。在有人提到它之前,我知道将密码嵌入 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
然后 运行ning git status
按预期工作并检测到远程分支上有更改。
我对 Git 不是很有经验,我觉得我遗漏了一些非常明显的东西。我的错误在哪里?
编辑
所以看起来缺少的部分是让我在 URL:
之后指定本地和远程分支
git fetch https://<user>:<pass>@github.com/<org>/<repo> development:origin/development
正如接受的答案所指出的那样:如果您不指定远程名称,git 会将远程更改置于默认值 FETCH_HEAD 中。这可以通过明确指定本地和远程分支来解决。
我仍然有点困惑为什么 git fetch
默认情况下知道从 origin 远程抓取,但指定 URL 会更改此默认设置。但无论如何它现在都在工作
Git 遥控器是与 URL 关联的名称。默认名称是 origin
,URL 通常是您从中克隆的名称。
Git 将远程存储库的快照存储在 "remote tracking branches" 中。这些是 <remote-name>/<branch>
的形式。当您 git fetch origin
Git 从与 origin
关联的 URL 获取更改并将它们放入远程分支时。 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、set up a Git credential helper to securely store your username and password.
我正在尝试设置一项服务,该服务将在检测到远程分支上的更改时自动更新我的存储库。在有人提到它之前,我知道将密码嵌入 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
然后 运行ning git status
按预期工作并检测到远程分支上有更改。
我对 Git 不是很有经验,我觉得我遗漏了一些非常明显的东西。我的错误在哪里?
编辑
所以看起来缺少的部分是让我在 URL:
之后指定本地和远程分支git fetch https://<user>:<pass>@github.com/<org>/<repo> development:origin/development
正如接受的答案所指出的那样:如果您不指定远程名称,git 会将远程更改置于默认值 FETCH_HEAD 中。这可以通过明确指定本地和远程分支来解决。
我仍然有点困惑为什么 git fetch
默认情况下知道从 origin 远程抓取,但指定 URL 会更改此默认设置。但无论如何它现在都在工作
Git 遥控器是与 URL 关联的名称。默认名称是 origin
,URL 通常是您从中克隆的名称。
Git 将远程存储库的快照存储在 "remote tracking branches" 中。这些是 <remote-name>/<branch>
的形式。当您 git fetch origin
Git 从与 origin
关联的 URL 获取更改并将它们放入远程分支时。 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、set up a Git credential helper to securely store your username and password.