将裸repo中的当前分支签出到工作树

  • 本文关键字:工作 分支 repo 将裸 git
  • 更新时间 :
  • 英文 :


我正在做一个本地测试,我有:

回购1
  • 裸回购
  • work-tree文件夹

我将一些更改推到裸repo。现在我想手动地将它部署到工作树中。

我进入裸repo,其中master被签出,我尝试签出master并将工作树设置为工作树文件夹:

set WT=../myworktree                     //<-- create env variable on windows
git --work-tree=%WT% checkout -f master

但是结果是:'Already on 'master',并且没有对工作树文件进行任何更改。

我从你推送到一个远程裸repo的时候认出来了,你有一个post-receive钩子,它也说"Already on master";但它确实将文件部署到工作树(由于-f(force)标志,我认为)

那么我怎样才能再次签出相同的分支到工作树,使它被"刷新"?新内容?

顺便说一下,如果我在裸回购中做git worktree list,它指向裸回购并显示(bare),我想应该是这样的。

编辑

工作树文件夹最初有一个。git目录,但我删除了它-这是问题吗?我在想,我只需要裸露的repo和工作树内没有repo ?

编辑-问题消失了,一定是什么错误(?)

这可能不是一个问题,因为它现在开始工作了,所以可能是我犯了什么错误。

我新建了一个"工作树"文件夹(从裸repo克隆,删除了远程和.git文件夹)。然后再次尝试该命令,但首先添加一个指向"工作树"的远程url,然后从"repo 1"推送一个更改。到裸回购。现在在裸repo中,当我执行git --work-tree=%WT% checkout -f master时,它显示为'Already on 'master',但文件在工作树文件夹中更新了。所以我认为这是因为远程url,但在删除(git remote remove origin)后,checkout命令仍然有效。

所以我最初一定是犯了什么错误(不确定是什么)。

(如何创建工作树也无关紧要,因为我再次创建了一个新的工作树文件夹,并手动添加了一些随机文件,命令仍然有效,更新文件)

使用git worktree add

如果你想创建附属于裸repo的工作树,你需要使用git worktree add命令,就像你在一个普通的沙箱中一样。

git worktree add <pathtoworktree> master

那么你可以在工作树或裸repo中进行Git操作。

例如:

cd bare-repo
git --work-tree=<pathtoworktree> status

等价于:

cd <pathtoworktree>
git status

和所有其他Git操作,如签出,提交和诸如此类的相同。

然后git worktree list将显示(bare)的裸repo路径和当前签出提交和分支的工作树路径。

可选-直接克隆

您也可以将裸repo视为位于远程服务器上:

cd sandboxes
git clone <path-to-bare-repo>

,这将创建一个新的沙盒,你可以以正常的方式使用,它将从你的裸repo中推送和拉取。

个人观点

当这个工作树工作时,我实际上只是将本地裸repo视为远程并克隆它。

使用工作树更有效,因为它们共享Git文件夹的内容,但我个人发现,当我看到我的沙箱集合时,如果一些沙箱连接到其他沙箱,它会更令人困惑。我喜欢能够在不影响任何其他沙盒的情况下清除任何沙盒,而工作树意味着当我这样做时,我必须注意潜在的连接。

我宁愿只有副本,除非repo非常大,我需要工作树提供的优化。(例如,如果我在Linux内核上工作,是的,我会使用工作树!)

最新更新