Git clone - 创建一个带有远程跟踪分支的裸克隆(用于工作树“主”存储库)

Mor*_*ort 2 git git-worktree

为了与工作树一起使用,我正在尝试制作一个裸克隆,但是远程分支映射到远程跟踪分支。

我正在尝试建立一个通用的工作树工作流程。我的 repo 真的很大,所以克隆它很昂贵。即使使用硬链接,随着 repos 被gc编辑,它们往往会随着时间的推移而发散并占用额外的空间,并且在一个 repo 中获取对另一个 repo 没有帮助,因此在工作树中工作似乎是显而易见的事情。(你必须相信我。)

工作树需要一个实际保存对象的“主”存储库。显然,该克隆不能被删除,所以我想把它放在像/var/cache/git/reponame.wt.git. (我正在为我和我的同事制定一个通用的解决方案,所以我必须使它相当万无一失。)

可以让它成为一个普通的克隆,但是它必须有一个分支检出,然后该分支不能被任何其他工作树检出,所以我必须制作一个wt_dummy可能混淆人们的虚拟分支(例如)。我真正想做的是使主要回购成为bare回购。

问题是git clone --bare不创建远程跟踪分支。所以为了制作一个“裸回购但带有远程跟踪分支”,我已经开始走这条路

git clone --bare <remote> repo.tmp
mv repo.tmp.git reponame.wt.git
cd reponame.wt.git
git config core.bare true
git config --remove-section branch.master
... and I'm not quite there yet ...
Run Code Online (Sandbox Code Playgroud)

但是 a) 看起来太长太复杂了,并且 b) git 存储库仍然认为它已经master检出。

有没有更好的方法来制作这个“带遥控器的裸机”?

(也许总体上有更好的方法来设置工作树,但我知道这处于堆栈溢出的“特定编程解决方案”范围的毛茸茸的边缘。)

小智 5

您可以配置裸存储库以具有远程跟踪分支:

git config --local --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
Run Code Online (Sandbox Code Playgroud)

运行git fetch,你应该看到它们git branch -a

我不相信这是可能具有master(或其他分支机构)在仓库中检出,但有一个纯仓库是安全反正为它创建一个链接worktree,如:

git worktree add --force <path> master
Run Code Online (Sandbox Code Playgroud)

即使master在裸存储库中签出,如果存储库是裸存储库,也没有主工作树,因此您最终不会得到两个不同步的工作树。