12

正如你在下面看到的,我必须设置一个裸仓库的工作树:

cd barerepo
git status
fatal: This operation must be run in a work tree

git --work-tree=/var/www/mywork/ status
# On branch master
nothing to commit (working directory clean)

如何为该仓库设置工作树,这样我就不必每次都指定它?

我尝试barerepo/config用这个进行修改,但它不起作用。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = true
    worktree = /var/www/mywork
4

3 回答 3

16

裸仓库不应该有工作树,因此 git 会打印“致命:core.bare 和 core.worktree 没有意义”错误消息。因此,您需要bare = false在 repo 的配置文件中进行设置。

user@host:~$ cd barerepo
user@host:~/barerepo$ git config --bool core.bare false
user@host:~/barerepo$ git config --path core.worktree /var/www/mywork

但是,如果以前不存在 barerepo,则应使用此命令:

git init --separate-git-dir=. /var/www/mywork

此命令还将.git在工作树中创建一个指向 git 目录的文件:

gitdir: /home/user/barerepo
于 2012-08-08T02:34:07.320 回答
3

请注意,建议的解决方案(2012 年,预 Git 2.5,将于 2015 年 7 月发布)不能直接使用git config命令。
它会继续死亡:

fatal: core.bare and core.worktree do not make sense.

这就是 Git 2.5(2015 年 7 月)将解决的问题:

请参阅Jeff King ( )的commit fada767(2015 年 5 月 29 日) 。(由Junio C Hamano 合并 -- --提交 103b6f9中,2015 年 6 月 16 日)peff
gitster

setup_git_directory:延迟core.bare/core.worktree错误

如果两者core.barecore.worktree设置了,我们会抱怨虚假配置并死掉。
死是好的,因为它可以避免命令运行并在可能不正确的设置中造成损坏。
但是死在那里是不好的,因为这意味着甚至不关心工作树的命令无法运行。
这会使修复情况变得更加困难

  [setup]
  $ git config core.bare true
  $ git config core.worktree /some/path

  [OK, expected.]
  $ git status
  fatal: core.bare and core.worktree do not make sense

  [Hrm...]
  $ git config --unset core.worktree
  fatal: core.bare and core.worktree do not make sense

  [Nope...]
  $ git config --edit
  fatal: core.bare and core.worktree do not make sense

  [Gaaah.]
  $ git help config
  fatal: core.bare and core.worktree do not make sense

取而代之的是,当我们注意到虚假配置时(即,对于所有命令),让我们发出关于虚假配置的警告,但仅在命令尝试使用工作树时(通过调用 setup_work_tree)死亡。

所以我们现在得到:

$ git status
warning: core.bare and core.worktree do not make sense
fatal: unable to set up work tree using invalid config

$ git config --unset core.worktree
warning: core.bare and core.worktree do not make sense
于 2015-06-18T23:07:07.727 回答
3

请注意,问题和答案来自 2012 年,但从 git 2.5 开始,即使使用裸存储库,您也可以使用以下命令创建单独的工作树:

$ git worktree add /var/www/mywork/ master
$ git worktree add /var/www/workdev/ devel

请参阅git-worktree(1)

它不会更改,但会在您的 git 存储库中core.worktree创建一个目录。worktrees

extensions.worktreeConfig如果您不希望所有工作树和裸存储库共享相同的配置,您可能需要将配置选项更改为 true。

于 2019-09-26T18:25:25.633 回答