致命:此操作必须在工作树中运行

Kir*_*nta 70 git command-line

当我尝试更改分支时出现此错误.

我可能会给出一些命令的信息

/path/to/git/repo/.
Run Code Online (Sandbox Code Playgroud)

根据命令:

git branch
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

* V1.5
  V2.0
  master
Run Code Online (Sandbox Code Playgroud)

当我尝试命令时

git checkout V2.0
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

fatal: This operation must be run in a work tree
Run Code Online (Sandbox Code Playgroud)

配置文件内容:

cat config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
[remote "origin"]
        url = /path/to/git/repo/.git
Run Code Online (Sandbox Code Playgroud)

Bom*_*mbe 52

您的存储库是裸的,即它没有附加工作树.您可以在本地克隆它以为其创建工作树,或者您可以使用其他几个选项中的一个来告诉Git工作树的位置,例如--work-tree单个命令的选项或GIT_WORK_TREE环境变量.还有core.worktree配置选项,但它不能在裸存储库中工作(请查看手册页中的内容).

# git --work-tree=/path/to/work/tree checkout master
# GIT_WORK_TREE=/path/to/work/tree git status
Run Code Online (Sandbox Code Playgroud)

  • 哪里到底是工作树? (30认同)
  • 我知道这是一个旧线程但对我来说问题是我在.git子目录中.一旦我退出它,一切正常. (28认同)
  • 我的downvote是告诉我们/我们能做什么,但不是/如何/做到这一点.对于偶尔的用户来说,Git是出了名的讽刺,我们来找s/o寻找方法. (12认同)
  • 嗯...通过使用`--work-tree`选项,通过设置`GIT_WORK_TREE`环境变量,或通过设置`core.worktree`配置选项.我有一个似曾相识. (8认同)
  • 工作树必须存在,否则失败 (5认同)
  • 说明不够清楚。 (3认同)
  • 我的问题是我已经克隆到一个地方,并且它已将到该位置的绝对路径放在“.git/config”中,但我随后将整个存储库上移了一个文件夹,而 Git 不喜欢这样。修复`.git/config`中的路径解决了我的问题。 (3认同)
  • 运行 `git config core.bare false` 来更新 `.git/config` 文件 (3认同)
  • 我有多个工作地点通过ssh和上面的路径我不工作.那我怎么能给出工作树路径呢? (2认同)
  • 嗯,我只是将core.bare设置为false,并且看,它工作w/o --work-tree(文档说如果没有给出,git假设你在树的顶部.) (2认同)
  • @JonnyCerveza 请添加您的评论作为答案——这也是我的解决方案。 (2认同)