我正试图从刚刚设置的远程仓库中取出,我正在收到消息 没有工作树就不能使用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命令感到困惑,文件还没有被推送?
答案 0 :(得分:15)
您似乎正在使用裸存储库。
裸存储库就像普通存储库一样,除了它没有关联的工作目录。
由于pull
一个fetch
加一个merge
,它无法应用于裸存储库。
详情:
毕竟,git存储库只是一个.git
目录,其中存储在特殊目录中的已定义元数据集(如refs
,其中存储了本地和远程分支,并且{{1} },包含所有文件内容,等等。)
通常,git存储库与所谓的工作目录相关联,这是一个特定提交的结帐:开发人员可以使用工作目录来执行对源代码的修改,从而准备下一次提交。
然而,有时候,没有必要有一个工作目录。最常见的情况是,存储库托管在共享服务器中,并且它被用作开发人员用于集成其代码的中央共享位置。存储库必须存储所有信息(因此,它有自己的objects
目录副本),开发人员可以推动它们的贡献,但没有开发人员可以直接使用它;所以,没有提供工作目录。这是一个裸存储库。
现在,有一些git命令在Working目录上运行。这些命令不能在裸存储库上运行,因为它缺少工作目录。
.git
就是其中之一。 git pull
是git pull
和git fetch
的组合。现在,git merge
仅涉及git fetch
目录,因此可以在裸存储库上执行。另一方面,.git
要求在工作目录上进行合并。由于工作目录不存在,命令将失败。
git merge
和pull
不是唯一无法在裸存储库上执行的命令。我强烈建议您查看this interactive map,这将帮助您选择无法在裸存储库上执行哪些操作(see the amazing Interactive Git Cheatsheet)