2016-01-09 25 views
5

receive.denyCurrentBranchconfig option控制如果推送到结账的仓库分支时会发生什么情况。`receive.denyCurrentBranch = updateInstead`如何与索引进行交互?

默认情况下,它拒绝它(这就是为什么你通常只推送裸露回购,没有结帐分支)。

它可以通过ignorewarn被禁用。

另一种选择是updateInstead

这里做的事情是,如果HEAD和工作目录是相同的,并且被推分支是HEAD,无论是工作目录和分支/ HEAD都在同一时间更新。

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

我的问题是,这个选项是否与Index相互作用?

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

回答

5

索引是否已更新?如果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.denycurrentbranchupdateinstead和推入 当前分支,当工作树和索引是真正 干净,应该重新设置工作树以及匹配 推送提交的树的索引。