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

时间:2016-01-09 17:42:16

标签: git git-push git-config git-index

receive.denyCurrentBranch config option控制如果您推送到结帐的repo分支会发生什么。

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

可以通过ignorewarn停用它。

另一个选项是updateInstead

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

如果工作目录与HEAD不同,则推送被拒绝 这对推送到网络服务器for example非常有用。

我的问题是,此选项是否与Index完全互动?

指数是否已更新?如果HEAD和工作目录匹配,但不是Index

,该怎么办?

1 个答案:

答案 0 :(得分:8)

  

指数是否已更新?如果HEAD和工作目录匹配,但不匹配,该怎么办?

Commit 0855331 (git 2.4.0-rc0, Dec. 2014)明确说明:

  

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

尽管同一个提交引入了push-to-checkout钩子。

  

此挂钩可用于自定义此“推送 - 部署”逻辑   钩子接收用于更新当前分支的尖端的提交,并且可以决定可接受哪种局部变化以及如何更新索引和工作树以匹配当前更新的尖端分支

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

Commit 1a51b52, git 2.4.0-rc2, Apr 2015再说一遍:

  

receive.denycurrentbranch设为updateinstead并推进   工作树和索引是真实的当前分支   clean,应该重置工作树和索引以匹配   推送提交的树