Git pull引发以下错误:致命此操作必须在工作树中运行

时间:2018-12-27 13:53:03

标签: git

仅存在一个分支。 我已经将文件从本地系统推送到远程仓库。

在远程仓库中,我正在git pull 如何解决致命错误:this operation must be run in a work tree

1 个答案:

答案 0 :(得分:0)

  

在远程仓库中,我正在执行git pull ...

更准确地说,您在服务器上有一个裸存储库(使用--bare创建的存储库)。然后,通过服务器上的一个挂钩(例如接收后挂钩),或者通过登录服务器,您将进入这个裸仓库并运行git pull

这失败了,因为git pull需要在其中工作的工作树。这是因为git pull的意思是:

  1. 先运行git fetch ,然后
  2. 运行第二个Git命令。

第一个命令-git fetch- 可以在裸仓库中使用。第二个通常为git merge不能在裸仓库中使用。您可以指示Git使用git rebase而不是git merge,但这也不能在裸仓库中使用。

虽然还有其他(相当复杂的)方法可以直接在服务器上处理此问题,但通常的最佳方法是:不要这样做。服务器存储库应该简单地服务:它在那里接收推送操作,该操作将新的提交放入其中,并且在那里进行服务克隆操作,从而从中取出所有提交。

如果您想做一些复杂的事情,例如从多个Git存储库中获取并合并各种提交,请在克隆中进行。整理好结果后-一些合并非常复杂且杂乱,需要大量的人工干预,因此需要在其中进行工作的工作树-根据结果进行提交,并将提交推送到服务器。复杂的工作发生在常规的(非裸露的)存储库中,该存储库由人监督。面向服务器的简单操作发生在服务器上的简单裸存储库中。

请注意,裸存储库的全部意义在于它充当git push的简单接收者。一个带有工作树的非裸仓库可能会有人在上面工作。如果要在人类工作期间 接受推送,那么人类的工作将与基础存储库不同步。当人类完成他或她的工作时,实际上将回滚所收到的推动。效果大致等同于将git revert-n选项一起使用,不同之处在于当人类实际上确实使用git revert -n时,他们知道这一点,但是当他们不知不觉地还原时推送,他们不知道:他们没有办法知道。