git worktree中的.git目录不是目录

时间:2018-12-15 20:07:32

标签: git

我想创建一个bash脚本,该脚本允许我在master分支上运行其他bash脚本,同时允许我继续在其他分支中工作。

我正在尝试使用git worktree实现此目的,但是这样做很麻烦。这些是我正在运行的命令:

git checkout other-branch
git worktree add ./temp master
cd temp
./some-script

一旦我进入工作树,我想运行git hooks,但这告诉我.git不是工作树中的目录。这是为什么?是否可以访问工作树中的“原始” .git目录?

1 个答案:

答案 0 :(得分:1)

来自manual

  

每个链接的工作树在存储库的$ GIT_DIR / worktrees目录中都有一个私有子目录。私有子目录的名称通常是链接的工作树路径的基础名称,可能还会附加一个数字以使其唯一。例如,当$ GIT_DIR = / path / main / .git命令时,git worktree add / path / other / test-next接下来会在/ path / other / test-next中创建链接的工作树,并还会创建$ GIT_DIR / worktrees / test-next目录(如果已使用test-next,则为$ GIT_DIR / worktrees / test-next1)。

     

在链接的工作树中,$ GIT_DIR设置为指向此私有目录(例如,示例中的/path/main/.git/worktrees/test-next),而$ GIT_COMMON_DIR设置为指向主工作目录树的$ GIT_DIR(例如/path/main/.git)。这些设置在链接的工作树顶部目录中的.git文件中进行。

也就是说,当您检出工作树时,$ GIT_DIR不再直接指向您通常的.git,是的,您可以从$ GIT_COMMON_DIR访问主.git。

替代解决方案

一种简单的访问文件的方法,而不管检出了哪个分支是使用git-cat-file。如果您需要在其上运行git hooks,或者脚本本身需要从分支访问其他文件,则这可能对您不起作用,但是否则可能更简单。

例如:

git cat-file -p master:myscript.sh | bash -