2014-04-04 91 views
4

我有一个中央存储库server和本地回购local。在server repo中有一个分支live,它有时会从master中抽取,并添加一些修改,然后用于更新服务。我可以隐藏所有远程克隆的git仓库中的分支吗?

liveserver的分支对于其local存储库中的用户没有兴趣。他们不应该看到它,也不能获取它/推动它,总之,以任何方式与它交互。

在Git中是否有任何方式允许这样的行为:防止在local存储库中列出server的分支?

local$ git remote add server example.com 
local$ git fetch server 
local$ git branch --remotes 
server/foo 
server/live  # <-- don't show this branch 
server/master 

关于server的解决方案将是优选的。但截至目前,由于目前还没有不可信任的提交者,因此通过配置local回收站隐藏live分支的解决方案也可以工作。

回答

2

编辑:作为git的1.8.2的,GIT中支持transfer.hiderefs(拼写在the git config documentationtransfer.hideRefs)。在git 2.3.5/2.4.0之前,它有些bug,因为如果你允许智能HTTP传输,直到你在服务器上安装了2.3.5或2.4.0,那么避免它。

要隐藏服务器/直播:

git config --add transfer.hiderefs refs/heads/server/live 

这是不完美的隐藏:它暴露了名的存在,推动探针(一样receive.hiderefs)。另见uploadpack.allowTipSHA1InWant。编号:标准的git远程协议允许传入的队列看到全部引用。 (你可以通过在服务客户端的时候删除引用来伪造它,然后重新插入它,但是如果这是对所提交的唯一引用,那么你必须避免运行任何垃圾回收,当然引用是当时你的代码也是无法使用的,只需要克隆repo,然后删除ref并从“de-live-d”克隆中提供服务就简单多了,等等,但是更简单也可能更快,使用不同的回购保持在首位,即回购“活”的分支可以从共享一个像往常一样抓取,但是我们有自己的私人“生活”分支)。

您可以防止有人或任何人更新通过通常的预接收和更新钩子,您喜欢的任何引用。但是你有任何参考,别人都可以看到。

+0

感谢您的回答!我已经有了第二次回购的想法。由于硬链接,这可能是非常便宜的存储方式。虽然,通过钩子阻止提交的想法现在可能更容易实现(快速的 - 肮脏的,但有诀窍)。 – Boldewyn

相关问题