如果您希望在之后重新指出本地git fetch
分支提示,则需要一些额外的步骤。
更具体地说,假设 github repo 有分支D
, B
, C
, 和master
(这个奇怪的分支名称集的原因稍后会很清楚)。您在主机上,并且在 github 存储库devhost
所在的存储库中。origin
您这样做git fetch
了,这会带来所有对象和更新origin/D
、、、origin/B
和。到目前为止,一切都很好。但是现在您说您希望在本地分支机构, , ,和/或上发生一些事情?origin/C
origin/master
devhost
D
B
C
master
我有这些明显的(无论如何对我来说)问题:
- 为什么要更新所有分支的提示?
- 如果某个分支(例如,
B
)具有远程(github)repo 缺少的提交怎么办?它们应该被合并、重新定位还是……?
- 如果您在某个分支(例如,
C
)并且工作目录和/或索引已修改但未提交怎么办?
- 如果远程仓库添加了新分支 (
A
) 和/或删除了分支 ( D
) 怎么办?
如果 (1) 的答案是“因为devhost
实际上不是用于开发,而是一个本地镜像,它只是保留 github 存储库的本地可用副本,以便我们所有实际开发人员可以快速从中读取,而不是从缓慢读取github”,那么你想要一个“镜像”而不是“普通”回购。它不应该有工作目录,也许它也不应该接受推送,在这种情况下,剩下的问题就会消失。
如果有其他答案,(2-4)就会有问题。
无论如何,这是一种基于远程引用(git fetch -p
例如在运行之后)更新本地引用的方法:
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
本... code here ...
节内容取决于对问题 (2-4) 的回答。