我正在尝试从我刚刚设置的远程存储库中提取数据,并且收到了消息
没有工作树就无法使用 git-pull
我读过的所有内容似乎都指向我的 .git 目录,但看起来不错
git branch
给出输出
* master
and
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 命令感到困惑并且文件尚未推送?
看起来您正在一个裸存储库中工作。
裸存储库就像普通存储库一样,只是它没有关联的工作目录。
存在pull
a fetch
plus a merge
,它不能应用于裸存储库。
详细信息:
毕竟,git 存储库只是一个.git
具有存储在特殊目录中的一组定义的元数据的目录(例如refs
,存储本地和远程分支的位置,以及objects
,其中包含所有文件内容,依此类推)。
通常,git 存储库与所谓的工作目录相关联,工作目录是某个提交的签出:开发人员可以使用工作目录对源代码进行修改,从而准备下一次提交。
然而,有时,不需要有工作目录。最常见的情况是存储库托管在共享服务器中,并用作开发人员集成代码的中央共享位置。存储库必须存储所有信息(因此,它有自己的副本).git
目录),开发人员可以将自己的贡献推送给它,但开发人员不应该直接在它上面工作;因此,没有提供工作目录。这是一个裸存储库。
现在,有一些在工作目录上运行的 git 命令。这些命令不适用于裸存储库,因为它缺少工作目录。
git pull
是其中之一。git pull
是以下组合git fetch
and git merge
. Now, git fetch
仅涉及.git
目录,因此可以在裸存储库上执行。另一方面,git merge
需要对工作目录执行合并。由于工作目录不存在,该命令将失败。
pull
and merge
并不是唯一不能在裸存储库上执行的命令。我强烈建议你看看这个互动地图 http://ndpsoftware.com/git-cheatsheet.html#loc=remote_repo;这将帮助您选择不能在裸存储库上执行哪些操作(请参阅令人惊奇的交互式 Git 备忘单 http://ndpsoftware.com/git-cheatsheet.html)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)