仅存在一个分支。 我已经将文件从本地系统推送到远程仓库。
在远程仓库中,我正在git pull
如何解决致命错误:this operation must be run in a work tree
答案 0 :(得分:0)
在远程仓库中,我正在执行git pull ...
更准确地说,您在服务器上有一个裸存储库(使用--bare
创建的存储库)。然后,通过服务器上的一个挂钩(例如接收后挂钩),或者通过登录服务器,您将进入这个裸仓库并运行git pull
。
这失败了,因为git pull
需要在其中工作的工作树。这是因为git pull
的意思是:
git fetch
,然后第一个命令-git fetch
- 可以在裸仓库中使用。第二个通常为git merge
的不能在裸仓库中使用。您可以指示Git使用git rebase
而不是git merge
,但这也不能在裸仓库中使用。
虽然还有其他(相当复杂的)方法可以直接在服务器上处理此问题,但通常的最佳方法是:不要这样做。服务器存储库应该简单地服务:它在那里接收推送操作,该操作将新的提交放入其中,并且在那里进行服务克隆操作,从而从中取出所有提交。
如果您想做一些复杂的事情,例如从多个Git存储库中获取并合并各种提交,请在克隆中进行。整理好结果后-一些合并非常复杂且杂乱,需要大量的人工干预,因此需要在其中进行工作的工作树-根据结果进行提交,并将提交推送到服务器。复杂的工作发生在常规的(非裸露的)存储库中,该存储库由人监督。面向服务器的简单操作发生在服务器上的简单裸存储库中。
请注意,裸存储库的全部意义在于它充当git push
的简单接收者。一个带有工作树的非裸仓库可能会有人在上面工作。如果要在人类工作期间 接受推送,那么人类的工作将与基础存储库不同步。当人类完成他或她的工作时,实际上将回滚所收到的推动。效果大致等同于将git revert
与-n
选项一起使用,不同之处在于当人类实际上确实使用git revert -n
时,他们知道这一点,但是当他们不知不觉地还原时推送,他们不知道:他们没有办法知道。