2016-08-16 72 views
0

用于工作区,我试图做一个裸克隆,但远程分支映射到远程跟踪分支。Git克隆 - 创建一个裸露的克隆,但与远程跟踪分支(工作树'主'回购)

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

工作区需要一个实际存放对象的“主”回购。显然,这个克隆不能被删除,所以我想把它放在类似/var/cache/git/reponame.wt.git的地方。 (我正在为我和我的同事制定一个通用的解决方案,所以我必须使其相当安全)。

I 可能使它成为一个常规克隆,但它必须检出一个分支然后该分支不能被任何其他工作树检出,所以我必须制作一个可能会让人困惑的虚拟分支(例如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 ... 

但)它似乎过于漫长而复杂的,和b)git仓库仍然认为它已经master查了出。

有没有更好的方法来使这个“遥控裸露克隆”?

(也许有更好的方法来设置一般worktrees,但我明白,得到的堆栈溢出的“特定的编程解决方案”范围的毛茸茸的边缘。)

+1

“*我可以使它成为一个常规的克隆,但它必须检出一个分支,然后该分支不能被任何其他工作树检出,所以我必须创建一个虚拟分支(例如wt_dummy)这可能会使人们感到困惑*“为什么你不创建一个空的提交并在非裸仓库中检出它(作为分离的HEAD)? – Leon

+0

一个合理的想法。你甚至可以做'git clone --no-checkout --branch v1.0 reponame.wt'来给你一个没有签出但是头部指向'v1.0'标签的repo。 – Mort

回答

1

您可以配置一个纯仓库有远程跟踪分支有:

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

运行git fetch,你会看到他们git branch -a

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

git worktree add --force <path> master 

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