git“更新当前检出分支”警告是什么意思?

当我执行git push时,我看到以下内容:

warning: updating the currently checked out branch; this may cause confusion,
as the index and working tree do not reflect changes that are now in HEAD.

我搜索了这条消息,我所能找到的只是一个git邮件列表讨论,作者试图准确地决定如何更好地将这条消息传达给我,让我知道真正的问题。

我是如何造成这种情况的?如何解决这个问题?


发生这种情况时,你推动到一个非裸露的回购。 裸露的repo是一个完全由.git目录组成的库。 非裸回购还包括结账。 一般情况下,你不应该推到非裸回购; 实际上,在未来的git版本中,这将被禁止。 如果您推送到非裸回购,那么回购的HEAD将与索引和工作副本不同步。

如果你正在创建一个人们想要推到的git init --bare ,那么你应该使用git init --bare (和git init --bare --shared如果多个用户账户需要访问它)来创建它,或者git clone --bare如果您是通过克隆现有的回购库来创建它的话。


简而言之,您的远程存储库不再是一个简单的存储库,并且您正在推送远程检出分支。

请参阅“如何发布Git存储库”:

裸仓库是没有签出工作副本的代码。 它只包含git数据库。
作为一般规则,您绝不应将其推入包含工作副本更改的存储库中。
为了确保不会发生这种情况,我们将服务器存储库设置为裸存储库 - 它没有工作副本

从这里:

请注意,“推送”的目标通常是仓库(即没有自己的工作树)。
您也可以推送到具有检出工作树的存储库,但工作树不会通过推送进行更新。
如果您推送到的分支是当前签出的分支,这可能会导致意外的结果。

如果定义了分离的工作树(例如,它可以对应于Web服务器的DocumentRoot),则需要:

  • 在你的远程仓库上有一个post-receive钩子(像这里描述的那样),运行“ git checkout -f ”和
  • 忽略警告信息( git config receive.denycurrentbranch ignore
  • 请检查您的远程存储库中git config core.worktreegit config core.bare


    我通过克隆一个新的,裸露的存储库,从而将我的存储库裸露出来,为了以防万一,保留了这个混乱的存储库,并用我的克隆裸机替换它。

    我是git的新手,当我设置了repsitory时,我忘记使用--bare选项。 感谢你的帮助!

    我已经阅读了O'Reilly的git书,现在我已经完成了git convert。

    链接地址: http://www.djcxy.com/p/49017.html

    上一篇: What does git "updating currently checked out branch" warning mean?

    下一篇: > master (branch is currently checked out)'