首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有工作树,则无法使用git-pull

如果没有工作树,则无法使用git-pull
EN

Stack Overflow用户
提问于 2014-02-06 22:39:51
回答 1查看 18.2K关注 0票数 10

我正在尝试从我刚刚设置的远程存储库中拉出,我得到消息git-pull在没有工作树的情况下无法使用

我读到的所有内容似乎都指向我的.git目录,但看起来还不错

代码语言:javascript
复制
git branch

给出输出

代码语言:javascript
复制
* master

代码语言:javascript
复制
git ls-tree --full-tree -r HEAD

列出大量条目,如下所示

代码语言:javascript
复制
100644 blob c825c0607f77e1df4e05920037a2ce09c08e5180app/assets/javascripts/ready.js

哪一项看起来是正确的,并使我认为我已经成功地将文件正确地推送到此存储库?

代码语言:javascript
复制
git status

给出输出

代码语言:javascript
复制
fatal: This operation must be run in a work tree

和ls -l .git给出了

代码语言:javascript
复制
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之前有什么需要做的吗?我是不是被ls-tree命令搞糊涂了,而且文件还没有被推送?

EN

回答 1

Stack Overflow用户

发布于 2015-05-07 04:59:29

看起来你是在一个裸库中工作。

裸存储库就像普通存储库一样,只是它没有关联工作目录。作为一个fetch加一个mergepull,它不能应用于裸存储库。

具体内容如下:

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

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

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

现在,有一些可以在工作目录上操作的git命令。这些命令在裸存储库上不起作用,因为它缺少工作目录。

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

pullmerge并不是仅有的不能在裸存储库上执行的命令。我强烈建议您查看this interactive map,它将帮助您选择哪些操作不能在裸存储库(see the amazing Interactive Git Cheatsheet)上执行

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21605884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档