设置每个裸仓库的工作树

Jür*_*aul 8 git

如下所示,我必须设置一个裸仓库的工作树:

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)
Run Code Online (Sandbox Code Playgroud)

如何为该repo设置工作树,以便我不必每次都指定它?

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

[core]
    repositoryformatversion = 0
    filemode = true
    bare = true
    worktree = /var/www/mywork
Run Code Online (Sandbox Code Playgroud)

Ple*_*and 12

Bare repos不应该有工作树,所以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
Run Code Online (Sandbox Code Playgroud)

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

git init --separate-git-dir=. /var/www/mywork
Run Code Online (Sandbox Code Playgroud)

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

gitdir: /home/user/barerepo
Run Code Online (Sandbox Code Playgroud)

  • 如果我设置`bare = false`会出什么问题 (2认同)

mar*_*rcz 5

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

$ git worktree add /var/www/mywork/ master
$ git worktree add /var/www/workdev/ devel
Run Code Online (Sandbox Code Playgroud)

请参阅git-worktree(1)

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

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

  • 添加工作树与移动主工作树完全不同。裸仓库可以拥有这些辅助工作树,因为它们只是作为便笺簿位置,但根据定义,它不能拥有主工作树,而这正是 core.worktree 所做的。 (2认同)