什么是GIT_WORK_树,为什么我从未需要设置这个环境变量,为什么是现在?
我在Ubuntu Linux下使用Git来同步和部署我的项目 我在本地Linux工作机器上有一个Repo,在服务器上有两个Repo,一个是裸Repo,另一个是作为部署的应用程序 它一直运行良好,但现在我为我的另一个网站创建了另一个回购协议,我发现以下错误:什么是GIT_WORK_树,为什么我从未需要设置这个环境变量,为什么是现在?,git,Git,我在Ubuntu Linux下使用Git来同步和部署我的项目 我在本地Linux工作机器上有一个Repo,在服务器上有两个Repo,一个是裸Repo,另一个是作为部署的应用程序 它一直运行良好,但现在我为我的另一个网站创建了另一个回购协议,我发现以下错误: root@vserver5:/var/www/ninethsky# git pull origin master fatal: /usr/lib/git-core/git-pull cannot be used without a worki
root@vserver5:/var/www/ninethsky# git pull origin master
fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
所以我必须设置一个GIT\u WORKING\u树
ENV Var,但这到底是什么,在哪里设置
这是我的回购协议的.git/config:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = /home/git/ninethsky/.git
fetch = +refs/heads/*:refs/remotes/origin/*
还有另一个回购协议,bare=true
和我的本地工作机器上的回购协议
然后,除了最初的回购协议,我删除了所有回购协议,现在我得到:
root@vserver5:/var/www/ninethsky# git init
fatal: GIT_WORK_TREE (or --work-tree=<directory>) not allowed without specifying GIT_DIR (or --git-dir=<directory>)
root@vserver5:/var/www/ninethsky# git init --git-dir=/var/www/ninethsky
error: unknown option `git-dir=/var/www/ninethsky'
root@vserver5:/var/www/ninethsky#git init
致命:未指定GIT_DIR(或--GIT DIR=)不允许使用GIT_工作树(或--WORK TREE=)
root@vserver5:/var/www/ninethsky#git init--git dir=/var/www/ninethsky
错误:未知选项'git dir=/var/www/ninethsky'
我通过取消设置git_WORK_树(设置为空),解决了git init
问题。
GIT\u工作树
和GIT\u目录
未设置git init
再次起作用,但在克隆的repo中,git add.等操作在设置为bare时仍然存在问题
谢谢,
Joern.如果您有一个非裸git存储库,它有两个部分:
- 工作树。
工作树已签出源代码,以及您可能进行的任何更改 - git目录。
git目录通常称为
,位于工作树的顶层-它包含项目的所有历史记录、配置设置、分支指针、索引(临时区域)等。.git
您的git目录包含的文件和目录有点像这样:branchs description HEAD index log ORIG_HEAD refs config FETCH_HEAD hooks info objects packed refs
虽然我上面描述的是git存储库的默认布局,但实际上可以将文件系统中的任何目录设置为git目录和工作树 您可以更改这些目录的默认值
- 使用
和--work tree
选项切换到--git dir
git
- 或者使用
和GIT_DIR
环境变量。但是,通常不需要设置这些参数GIT_WORK_树
您看到的错误来自于
git pull
执行的第一个检查之一-它必须从工作树运行。我假设这是因为您设置了GIT\u DIR
或GIT\u WORK\u树
环境变量。否则,我最好的猜测是,您的
.git
目录无法访问或以某种方式损坏
- 如果您列出了
的内容,它看起来像我上面引用的清单吗/var/www/ninethsky/.git
- 您运行命令的用户是否可以读取和写入所有这些文件和目录,或者他们的权限是否已更改
更新:在回答您更新问题的附加信息中的要点时:
可能会失败,因为您仍然设置了git init
环境变量,并且,正如错误消息所述,如果您要指定工作树,还必须指定git目录git_WORK_TREE
- 第二个变量(
)失败,因为git init--git dir=/var/www/ninethsky
应该在--git dir
之前init
GIT\u工作树
和GIT\u DIR
环境变量
1也就是说,将.git
目录放在/var/www
下可能会被认为是一个坏主意,以防您意外设置权限,使其可以通过web访问。
因此,这可能是一个您希望将git目录保留在其他位置的实例。
但是,由于这些选项显然已经给您带来了混乱,因此最好保持git部分的简单,并用其他方法拒绝访问
.git
目录。也许最好保持git部分的简单,并用其他方法拒绝访问.git目录
如果重命名了git子模块的路径(工作树),也可能会遇到此错误。在我的例子中,我更新了
.gitmodules
中的路径以匹配我的新路径,并认为我很好。但是当我做了一个git pull
之后,它在旧路径中添加了新文件。这是因为有两个地方定义了模块路径。您还需要更新.git/modules/{modulename}/config
文件中定义的“工作树”。是否/var/www/ninethsky
是一个工作目录,即/var/www/ninethsky/.git
是否存在?或者/var/www/ninethsky
本身就是git目录吗?/var/www/ninethsky/.git
存在/var/www/ninethsky
中的其他git操作是否正常?e、 g.git status
是否也会产生错误?当您遇到该错误时,是否设置了其他git环境变量?(env | egrep GIT
)@Joern Akkermann:我更新了我的答案以回应你的补充点。最关键的信息仍然是你在环境中设置了什么-env | grep GIT显示了什么?你如何取消设置GIT工作树
?@Sisir:嗯,暂时(在bash、dash等中)使用unset GIT\u WORK\u TREE
,但如果这是一个问题,那么它可能是在启动文件(例如~/.bashrc
)或包装器脚本中设置的,因此您需要从那里删除设置