Git clone - 创建一个裸克隆但具有远程跟踪分支(用于工作树'main'repo)

时间:2016-08-16 17:56:17

标签: git git-worktree

与worktrees一起使用时,我正在尝试制作裸克隆,但远程分支 映射到远程跟踪分支。

我正在尝试设置通用的工作树工作流程。我的回购真的很大,所以克隆它很贵。甚至使用硬链接,因为repos得到gc,它们往往会随着时间的推移而分散并占用额外的空间,并且在一个回购中的提取对另一个回收没有帮助,因此在工作树中工作似乎是显而易见的事情。 (你必须相信我。)

工作树需要一个实际拥有对象的“主”回购。显然,不能删除该克隆,所以我想把它放在/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 ...

但是a)它似乎太长而且复杂,并且b)git存储库仍然认为它已经检出master

有没有更好的方法来制作“带遥控器的裸克隆”?

(也许有一种更好的方法来设置工作树,但我明白,它会在堆栈溢出的“特定编程解决方案”范围内处于毛边。)

1 个答案:

答案 0 :(得分:1)

您可以配置裸存储库以使远程跟踪分支包含:

git config --local --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"

运行git fetch,您应该看到git branch -a

我不相信可以在存储库中签出master(或其他分支),但是有一个裸存储库&#39 ;无论如何都可以安全地为它创建一个链接的工作树,例如:

git worktree add --force <path> master

即使在裸存储库中检出master,如果存储库是裸的,那么它没有主要的工作树,所以你最终不会得到两个可以解决的工作树同步。