没有工作树就不能使用git-pull

时间:2014-02-06 14:39:51

标签: git

我正试图从刚刚设置的远程仓库中取出,我正在收到消息 没有工作树就不能使用git-pull

我读过的所有东西似乎都指向我的.git目录,但看起来很好

git branch

给出输出

* master

git ls-tree --full-tree -r HEAD

列出像这样的条目

100644 blob c825c0607f77e1df4e05920037a2ce09c08e5180app/assets/javascripts/ready.js

看起来是正确的,让我觉得我已经设法将文件正确地推送到这个仓库?

git status

给出输出

fatal: This operation must be run in a work tree

和    ls -l .git 给出

drwxrwxr-x 2 roy roy 4096 Feb  6 14:24 branches
-rw-rw-r-- 1 roy roy   66 Feb  6 14:24 config
-rw-rw-r-- 1 roy roy   73 Feb  6 14:24 description
-rw-rw-r-- 1 roy roy   23 Feb  6 14:24 HEAD
drwxrwxr-x 2 roy roy 4096 Feb  6 14:24 hooks
drwxrwxr-x 2 roy roy 4096 Feb  6 14:24 info
drwxrwxr-x 4 roy roy 4096 Feb  6 14:24 objects
drwxrwxr-x 4 roy roy 4096 Feb  6 14:24 refs

这看起来有点奇怪,因为它看起来就像它在推动之前所做的那样。

任何人都可以帮我解决我做错的事吗? 在我做一个git pull之前,我有什么必须做的吗?我对ls-tree命令感到困惑,文件还没有被推送?

1 个答案:

答案 0 :(得分:15)

您似乎正在使用裸存储库。

裸存储库就像普通存储库一样,除了它没有关联的工作目录。 由于pull一个fetch加一个merge,它无法应用于裸存储库。

详情:

毕竟,git存储库只是一个.git目录,其中存储在特殊目录中的已定义元数据集(如refs,其中存储了本地和远程分支,并且{{1} },包含所有文件内容,等等。)

通常,git存储库与所谓的工作目录相关联,这是一个特定提交的结帐:开发人员可以使用工作目录来执行对源代码的修改,从而准备下一次提交。

然而,有时候,没有必要有一个工作目录。最常见的情况是,存储库托管在共享服务器中,并且它被用作开发人员用于集成其代码的中央共享位置。存储库必须存储所有信息(因此,它有自己的objects目录副本),开发人员可以推动它们的贡献,但没有开发人员可以直接使用它;所以,没有提供工作目录。这是一个裸存储库。

现在,有一些git命令在Working目录上运行。这些命令不能在裸存储库上运行,因为它缺少工作目录。

.git就是其中之一。 git pullgit pullgit fetch的组合。现在,git merge仅涉及git fetch目录,因此可以在裸存储库上执行。另一方面,.git要求在工作目录上进行合并。由于工作目录不存在,命令将失败。

git mergepull不是唯一无法在裸存储库上执行的命令。我强烈建议您查看this interactive map,这将帮助您选择无法在裸存储库上执行哪些操作(see the amazing Interactive Git Cheatsheet

enter image description here