git“更新当前检出分支”警告是什么意思?
当我做一个git推,我看到以下内容:
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.
我search了这个消息,我所能find的只是一个git邮件列表讨论 ,作者试图准确地决定如何使这个消息更好地传达给我,真正的问题是什么。
我是如何造成这种情况的?如何解决这个问题?
发生这种情况时,你推动到一个非裸露的回购。 裸回购是一个完全由.git
目录组成; 非裸回购还包括结帐。 一般来说,你不应该推到一个非裸露的回购; 事实上,在未来的git版本中,这将是被禁止的。 如果你推到一个非裸回购,那么回购的HEAD将失去与索引和工作副本的同步。
如果你正在创build一个人们希望推到的git init --bare
,那么你应该使用git init --bare
(和git init --bare --shared
如果多个用户帐户需要访问它)来创build它,或者git clone --bare
如果你是通过克隆现有的回购来创build它。
简而言之,您的远程存储库不再是一个裸机,而是您在远程结帐分支上进行推送。
请参阅“ 如何发布Git存储库 ”:
裸仓库是一个没有签出工作副本的代码。 它只包含git数据库。
作为一般规则,您绝对不应该推入包含工作副本中更改的存储库。
为了确保不会发生这种情况,我们将服务器存储库作为裸存储库 – 它没有工作副本
从这里 :
请注意,“推”的目标通常是裸仓库(即没有自己的工作树)。
您也可以推送到具有检出工作树的存储库,但工作树不会被推送更新。
如果您推送到的分支是当前签出的分支,这可能会导致意外的结果。
如果定义了分离的工作树(例如,可以对应于Web服务器的DocumentRoot),则需要:
- 在你的远程仓库( 像这里描述的那样 )上有一个
post-receive
钩子,运行“git checkout -f
”和 - 忽略警告信息 (
git config receive.denycurrentbranch ignore
)
在远程仓库上检查git config core.worktree
和git config core.bare
我通过克隆一个新的,裸露的,从我的杂乱的存储库中删除裸露的存储库,以防万一,并用我的克隆裸机replace它。
我是新来的混帐,当我build立repsitory时,我忘了使用–bare选项。 感谢你的帮助!
我已经阅读了O'Reilly的git书,现在是一个完整的git convert。