12

receive.denyCurrentBranch config 选项控制如果你推送到一个 repo 的 checkout 分支会发生什么。

默认情况下,它会拒绝它(这就是为什么您通常只推送到没有结帐分支的裸仓库)。

可以通过ignore或禁用它warn

另一种选择是updateInstead

这样做的作用是,如果HEAD工作目录和工作目录相同,并且被推送的分支是HEAD,则工作目录和分支/ 都会HEAD同时更新。

如果工作目录不同于HEAD,则拒绝推送。
这对于推送到网络服务器很有用,例如.

我的问题是,这个选项是否与索引交互?

指数更新了吗?如果HEAD和工作目录匹配,但不匹配怎么Index办?

4

1 回答 1

11

指数更新了吗?如果 HEAD 和工作目录匹配,但索引不匹配怎么办?

提交 0855331(git 2.4.0-rc0,2014 年 12 月)明确指出:

receive.denyCurrentBranch设置为updateInstead时,仅当索引和工作树与当前签出的提交完全匹配时,才接受尝试更新当前签出的分支的推送,在这种情况下,索引和工作树将更新以匹配推送提交
否则拒绝推送。

虽然同样的提交引入了push-to-checkout钩子。

这个钩子可以用来定制这个“推送部署”逻辑。
钩子接收将要更新当前分支的尖端的提交,并且可以决定可以接受什么样的本地更改以及如何更新索引和工作树以匹配当前分支的更新尖端

这为索引提供了一些灵活性。


提交 1a51b52,git 2.4.0-rc2,2015 年 4 月再次说:

设置并推receive.denycurrentbranch送到updateinstead当前分支,当工作树和索引真正干净时,应该重置工作树和索引以匹配推送提交的树

于 2016-01-09T20:09:14.147 回答