2

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

我正在尝试建立一个通用的工作树工作流程。我的仓库真的很大,所以克隆它很昂贵。即使使用硬链接,当 repos 被gc编辑时,它们往往会随着时间的推移而分叉并占用额外的空间,并且一个 repo 中的 fetch 对另一个 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 ...

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

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

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

4

1 回答 1

6

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

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

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

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

git worktree add --force <path> master

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

于 2017-02-04T17:23:31.013 回答