使用Git 2.3.0(2015年2月之后)
如果没有人在该远程非裸仓库中工作,则应该可以将其推送到已签出的分支。
但是为了确保操作安全,现在(在Git 2.3.0中,2015年2月)可以在该远程仓库中进行操作:
git config receive.denyCurrentBranch updateInstead
它比config安全得多receive.denyCurrentBranch=ignore
:仅当您不覆盖正在进行的修改时,它才允许推送。
见提交1404bcb由约翰内斯Schindelin( )dscho
:
receive-pack
:为添加另一个选项 receive.denyCurrentBranch
在工作目录之间进行同步时,可以方便地通过' push
'而不是' pull
'更新当前分支,例如,当从VM内部推送修订时,或推送在用户机器上进行的修订时(开发人员不在安装ssh守护程序的自由(更不用说知道用户密码了)。
此修补程序不再需要常见的解决方法-进入临时分支,然后合并到另一台计算机上。
新选项是:
updateInstead
相应地更新工作树,但是如果有任何未提交的更改,则拒绝这样做。
该承诺4d7a5ce增加了更多的测试,并提到:
上一个仅测试以下情况:要通过推送部署更新的路径在目标工作树中具有不兼容的更改,该更改已经添加到索引中,但是功能本身希望将工作树设置为索引。比测试的要干净得多。
添加一些其他测试以保护功能部件免受将来错误地更改(从功能部件的发明者的角度出发),从而放松了对清洁度的要求,即:
- 仅更改工作树而不更改索引仍然是要保护的更改;
- 需要保护工作树中未被一键部署覆盖的未跟踪文件;
- 碰巧使文件与要推送的文件相同的更改仍然是要保护的更改(即,功能的清洁度要求比签出更为严格)。
另外,测试仅对工作树进行仅统计的更改是否不是拒绝即按即用的原因。
Git <2.3.0(2015年2月之前)
最常见的方法是从非裸存储库创建裸存储库,并在新创建的裸存储库上同时具有远程/本地非裸git回购点。