2014-04-04 93 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

相關問題