我可以在所有远程克隆的git仓库中隐藏分支吗?

时间:2014-04-04 07:36:47

标签: git deployment remote-access

我在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分支的解决方案也可以。

1 个答案:

答案 0 :(得分:2)

修改:从git 1.8.2开始,git支持transfer.hiderefsthe 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;分支)。

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