2015-12-21 23 views
2

假設我從一個git主存儲庫服務器開始。Git推/拉 - 按子域限制

稱之爲git.prod.example.com

我希望工作在dev.example.com的開發人員能夠push到這個主服務器。

但是,test.example.com,training.example.comprod.example.com中的主機只能執行pull請求。

也就是說,他們可以從主存儲庫中獲取代碼,但他們不能在主存儲庫中更改代碼。

我能做到這一點?如果是這樣,怎麼樣?

每個人都必須擁有git.prod.example.com的賬號,對不對?

(或在子域,至少。)

是混帳足夠明亮,分析pushpull請求的源位置,並從數額是多少,基於子域,黑名單拒絕代碼修改?

如果這在某個地方被很好地記錄下來,那麼鏈接指針會很棒。到目前爲止,我的google-fu已經失敗了。

回答

0

我需要工作的細節,但是這可能是最接近我去拿到解決方案,處理我的訪問控制需求:

開發人員push訪問git.dev.example.com只有,其中存儲庫init包括--shared=group。只允許開發人員成爲DEV中相應組的開發人員。

然後,在hooks/post-update包括一個命令,該命令允許用戶gitgit.dev.example.compushgit.prod.example.com。然後PROD服務器可以從所有環境中讀取,但除git用戶外,沒有人能夠更新那裏的代碼。

0

我可以那樣做嗎?如果是這樣,怎麼樣?

  • 還可以使用Git掛鉤這樣的事情。
    GIt鉤子可以「捕獲」在服務器上發出的任何請求,然後就可以阻止它。

    只需返回退出代碼0或1以允許或阻止提交。 檢查存儲庫名稱的鉤子,然後決定是允許還是阻止它。

  • Here是如何做到這一點的例子。

每個人都必須對git.prod.example.com賬戶,對不對?

  • 設置這個倉庫爲公衆一個(HTTP),所以任何人都可以克隆它。

是混帳足夠明亮,分析pushpull請求的源位置,並從數額是多少,基於子域,黑名單拒絕代碼修改?

  • 它不是黑名單。你寫自己的腳本來檢查你需要做什麼。

如果您使用的是像到位桶/ GitHub的中央服務器等一些人有此功能的建立,它可能會有所不同,從服務器到服務器螺母都那麼可以做一個用戶管理權限力。 !從所附的鏈接採取


示例代碼:

#/斌/慶典

protected_branch='master' 
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') 

if [ $protected_branch = $current_branch ] 
then 
    read -p "You're about to push master, is that what you intended? [y|n] " -n 1 -r < /dev/tty 
    echo 
     if echo $REPLY | grep -E '^[Yy]$' > /dev/null 
     then 
      exit 0 # push will execute 
     fi 
    exit 1 # push will not execute 
else 
    exit 0 # push will execute 
fi 
+0

如果我能弄清楚git是否可以將有關SSL或HTTP連接的任何信息傳遞到'.git/hooks'腳本中,那麼這將起作用。 '如果[$ SOURCE_DOMAIN ==「test.example.com」];然後退出1; fi'會很容易。我只是沒有找到如何將'$ SOURCE_DOMAIN'傳遞給鉤子腳本。 – dafydd

+0

我可能可以通過'$ SSH_CLIENT'或'$ SSH_CONNECTION'環境變量來做些什麼來拒絕來自所選子網的推送。我會看看我是否可以對此進行試驗。但是,http傳輸呢?我可以拒絕來自選定子網的POST請求,前提是我知道推送是通過來自指定客戶端的POST請求發出的。 – dafydd

+0

你不能直接這樣做,因爲git沒有關於倉庫的信息。你可以在你的git鉤子中找到你的倉庫的'$ PWD'文件夾並從那裏找出 – CodeWizard