我在服务器上有一个中央存储库,在本地有一个本地存储库.在服务器repo中有一个分支实时,有时从master获取,添加一些修改然后用于更新服务.
服务器的实时分支对其本地存储库中的用户不感兴趣.他们不应该看到它,也不能抓住它/推送它,简而言之,它以任何方式与它互动.
在Git中是否有任何方法允许这样的行为:防止服务器的分支被列在本地存储库中?
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
服务器上的解决方案将是首选.但截至目前,由于目前没有不受信任的提交者,因此在本地存储中通过配置隐藏实时分支的解决方案也可以工作.
最佳答案 编辑:从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并从“de-live-d”克隆中提供服务会更简单.等效,但更简单,可能更快,使用不同的repo首先保存“live”分支 – repo可以像往常一样从共享的分支中获取,但是拥有自己的私有“live”分支.)
您可以通过通常的预接收和更新挂钩来阻止某人或任何人更新您喜欢的任何引用.但你有任何参考,其他人可以看到.