我在server
有一个中央存储库,local
有一个本地存储库。在server
repo中有一个分支live
,有时从master
拉出,添加一些修改,然后用于更新服务。
live
存储库中的用户对server
的{{1}}分支不感兴趣。他们不应该看到它,也不能抓住它/推送它,简而言之,就是以任何方式与它互动。
Git中有没有办法允许这样的行为:阻止local
存储在server
存储库中?
local
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
repos中的配置隐藏live
分支的解决方案也可以。
答案 0 :(得分:2)
修改:从git 1.8.2开始,git支持transfer.hiderefs
(the git config documentation中拼写为transfer.hideRefs
)。在git 2.3.5 / 2.4.0之前有点错误(如果你允许smart-http传输,请避免使用它,直到你在服务器上安装了2.3.5或2.4.0)。
隐藏服务器/直播:
git config --add transfer.hiderefs refs/heads/server/live
这不是完美隐藏:它暴露了推送探针的名称的存在(与receive.hiderefs
一样)。另请参阅uploadpack.allowTipSHA1InWant
。
否:标准的git远程协议允许传入的querents查看所有引用。 (您可以通过在为客户端提供服务时删除引用来伪造它,然后重新插入它,但是如果这是对相关提交的唯一引用,那么您必须避免运行任何垃圾收集,当然还有引用在那个时候,你自己的代码也将无法使用。只需克隆repo,然后删除ref并从&#34; de-live-d&#34;克隆中提供服务会更简单。等效,但即便如此更简单,可能更快,使用不同的回购来首先保持&#34; live&#34;分支 - 回购可以照常从共享的那个获取,但拥有自己的私有&#34; live&#34;分支)。
您可以通过常用的预接收和更新挂钩阻止某人或任何人更新您喜欢的任何引用。但是你有任何参考,其他人都可以看到。