我正在跟踪远程存储库,即我有refs/remotes/joe/master
。
我知道希望尽快将乔的变化送到我的存储库中
我不想使用fetch
,因为我提交时可能不会在电脑前。所以我告诉他:我可能会出去购物,所以请将你的更改推到refs/remotes/joe/master
我希望他的变化尽快回到我的回购中的原因是他晚上关掉电脑,所以当我从购物中回来时我无法取得他的变化。
我知道joe应该只设置一个裸的公共存储库,但这有点开销。
在这种情况下,推动refs/remotes/joes/master
做一件好事吗?
答案 0 :(得分:1)
“best/simplest way to keep multiple (non-bare) Git repos in sync”建议用更新后的钩子来处理这种贡献。
然而,有一个更直接的解决方案:
作为OP zedoo评论,thread on git push to a non-bare repo(由Git维护者Junio C Hamano编写,早在2007年)详情:
(这是一个很好的例子,适合推向非裸仓库的情况)
receive-pack没有更新
HEAD
reflog作为更新实际分支,而不是HEAD
。
如果你推到HEAD
,你也应该看到HEAD
reflog条目。当您推送到底层分支并将
HEAD
设为非symref时,如何拆分HEAD
?我认为不需要任何复杂功能,我认为有人提到了一个好的例子,这是一个防火墙的主机,只能被推入。 在那个例子中,即使他知道他可以在理想的世界中反向获取,网络配置也不允许他这样做,因此需要推送。
为了妥善处理这些问题,在非裸存储库之间推送的人可能会忘记推进分支机构。
相反,他们可以安排他们的推送成为他们希望可以做的>>的真实镜像。
举例说明:在只能推送的repo
A
上,如果你可以从回购B
获取,你会:
$ git fetch B
有这样的事情:
[remote "B"] fetch = refs/heads/*:refs/remotes/B/*
但不幸的是,因为您只能从
A
进入B
,所以您可以在B
上运行此代码:
$ git push A
使用:
[remote "A"] push = refs/heads/*:refs/remotes/B/*
在您执行推送之后,您带着回购
A
来到机器上,并记住您所做的是“git fetch B
”的镜像 ,你会:
$ git merge remotes/B/master
你已经完成了。
换句话说,不要将
refs/remotes/B
视为使用“git fetch
”的内容。
其目的是跟踪远程存储库B
的头部 您可以通过在存储库A
中发出提取来维护该层次结构 您也可以在存储库B
中发出推送来执行此操作。我几乎每天都进入一个真实的存储库 我的典型日子总结如下:
gitster$ git push kernel-org-private
gitster$ ssh kernel.org
kernel.org$ git merge origin
kernel.org$ Meta/Doit -pedantic &
kernel.org$ exit
... go drink my tea ...
,其中
gitster
是我的私人开发机器kernel.org
是友好的k.org人员可以使用的机器- 的结帐
Meta
是我的“todo
”分支和- 醇>
Doit
是一个用于构建所有四个公共分支的脚本。我总是在我的
master
存储库中签出'kernel.org
',并且我的私人计算机的推送完成(我仍然使用非单独的远程布局):
Push: refs/heads/master:refs/heads/origin
Push: refs/heads/next:refs/heads/next
Push: +refs/heads/pu:refs/heads/pu
Push: refs/heads/maint:refs/heads/maint
因此,登录
kernel.org
计算机后我要做的第一件事就是运行“git merge origin
”以使“master
”更新。
如果您认为“push
”是“fetch
”的镜像,您就会理解为什么。
这就像在kernel.org
机器上发出“git fetch”来检索我的私人机器上的热销,然后“git merge
”它(通常是“git pull
”会做作为一个 单步)。但是,有时我会不小心将“
next
”签出 如果我发现我已经退出非“master
”,那么在做其他事情之前我会做“git reset --hard HEAD
”,而且我不希望我的推动有时会导致分离HEAD
有时候没有。
我不想丢失我最后一个分支的信息(因为接下来我要做的就是找出哪个分支Meta
/Doit
失败了。)
如果我 有时会错误地推入实时分支,我会切换到单独的远程布局并推入remotes/origin/*
层次结构,并且 在那之后真的没什么可担心的。