`receive.denyCurrentBranch=updateInstead` 如何与索引交互?

14
receive.denyCurrentBranch配置选项控制了当你推送到一个检出分支的仓库分支时会发生什么,默认情况下,它会拒绝它(这就是为什么通常只推送到没有检出分支的裸仓库)。可以通过ignore或者warn禁用它。另一个选项是updateInstead。如果HEAD和工作目录相同,并且被推送的分支是HEAD,那么同时更新工作目录和分支/HEAD。如果工作目录与HEAD不同,则会拒绝推送。这对于推送到Web服务器很有用,例如这样。我的问题是,此选项是否与索引有任何交互?索引会被更新吗?如果HEAD和工作目录匹配,但索引没有匹配呢?
1个回答

11
索引是否已更新?如果HEAD和工作目录匹配,但索引不匹配会怎样?提交0855331(git 2.4.0-rc0,2014年12月)清楚地说明了这一点:当receive.denyCurrentBranch设置为updateInstead时,只有当索引和工作树与当前检出的提交完全匹配时,才接受试图更新当前检出分支的推送,在这种情况下索引和工作树将更新以匹配推送的提交。否则,推送将被拒绝。尽管同一提交引入了push-to-checkout钩子。
这个钩子可以用来自定义"push-to-deploy"逻辑。 钩子会接收将要更新当前分支尖端的提交,并且可以决定什么样的本地更改是可接受的,以及如何更新索引和工作树以匹配当前分支的更新尖端。 这在索引方面提供了一定的灵活性。

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

receive.denycurrentbranch 设置为 updateinstead 并推送到当前分支时,当工作树和索引确实干净时,应该将工作树和索引重置为与推送的提交的树相匹配


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接