当我进行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.
我用Google搜索了这条消息,而我所能找到的只是git mailing list discussion,作者试图确切地决定如何更好地传达此信息,以便与我沟通真正的问题。
我是如何造成这种情况的,我该如何解决?
答案 0 :(得分:46)
当您推送非裸机时会发生这种情况。一个裸仓库是一个仅由.git
目录组成的仓库;非裸仓库还包括结账。一般来说,你不应该推到一个非裸的回购;事实上,在未来的git版本中,这将被禁止。如果您推送到非裸仓库,则该仓库的HEAD将与索引和工作副本不同步。
如果您要创建人们想要推送的回购,那么您应该使用git init --bare
创建回报(如果有多个用户帐户需要访问权限,则为git init --bare --shared
),或{ {1}}如果您是通过克隆现有仓库来创建它。
答案 1 :(得分:12)
简而言之,您的远程存储库不再是一个裸存储库,而是您推动远程结账分支。
请参阅“How to publish a Git repository”:
裸存储库是没有签出的代码工作副本的存储库。它只包含git数据库 作为一般规则,您不应该进入包含工作副本更改的存储库 为了确保不会发生这种情况,我们将服务器存储库作为一个裸存储库 - 它没有工作副本
来自here:
请注意,“推送”的目标通常是裸存储库(即,没有自己的工作树)。
您还可以推送到具有签出工作树的存储库,但是工作树
推送不会更新
如果您推送的分支是当前已检出的分支,则可能会导致意外结果。
如果定义了分离的工作树(例如可以对应于Web服务器的DocumentRoot),则需要:
post-receive
挂钩,运行“git checkout -f
”和git config receive.denycurrentbranch ignore
)在远程存储库中检查git config core.worktree
和git config core.bare
答案 2 :(得分:5)
我通过克隆一个新的,裸露的存储库使我的存储库裸露出来,保存了混乱的存储库以防万一,并用我克隆的裸存储库替换它。
我是git的新手,当我设置代表时,我忘了使用--bare选项。谢谢你的帮助!
我已经读过O'Reilly git书,现在已经是一个完全的git转换器了。