2013-01-11 226 views
41

是否有可能讓gitlab設置自動同步(鏡像)託管在其他位置的存儲庫?Gitlab存儲庫鏡像

目前,我所知道的最簡單的方法是手動推送到兩個(gitlab和另一個)存儲庫,但這很耗時且容易出錯。

最大的問題是鏡像可以重新同步,兩個用戶同時將更改推送到兩個不同的存儲庫。爲防止此問題,我可以提出的最佳方法是確保用戶只能推送到其中一個存儲庫。

+0

此請求已在:http://feedback.gitlab.com/forums/176466-general/suggestions/4614663-automatic-push-to-remote-mirror-repo-after-push-to Go並將其取消。 –

回答

15

更新2016年12月:鏡像與GitLAb EE 8.2或以上版本支載:見「Repository mirroring」。

正如評論說Xiaodong Qi

這個答案可以在不使用任何命令行來簡化(只需將它安放Gitlab回購管理界面)


原來的答覆(2013年1月)

如果您的遠程鏡像回購是bare repo,那麼您可以將後接收掛鉤添加到您的gitla B管理回購,並推到你的遠程回購。

#!/bin/bash 
git push --mirror [email protected]:/path/to/repo.git 

由於Gitolite(由Gitlab使用)mentions

如果要安裝只在少數特定的倉庫鉤

,直接做在服務器上。

這將是:

~git/repositories/yourRepo.git/hook/post-receive 

買者(更新Ocotober 2014)

Ciro Santilli指出in the comments

今天(Q4 2014)這將b。失敗 b因爲GitLab自動將github.com/gitlabhq/gitlab-shell/tree/...鏈接到它管理的每個存儲庫中。
因此,如果您進行此更改,則修改的每個存儲庫都會嘗試推送。
更不用說在升級gitlab-shell時可能發生衝突,並且當前腳本是ruby腳本,而不是bash(並且您不應刪除它!)。

你可以通過讀取當前目錄名,並確保與遠程之間的一一對應解決這個問題,但我建議人們從那些東西

看到(和投票)feeadback "Automatic push to remote mirror repo after push to GitLab Repo"留很遠很遠。


更新2016年7月:我看到添加的GitLab EE(企業版)這樣的功能:MR 249

  • 下添加鏡像版本庫的設置,進入遠程推送URL能力
  • 添加實現代碼推到遠程倉庫
  • 添加新的後臺工作
  • 顯示最新更新日期和是否存在這些同步錯誤。
  • 每小時同步遠程鏡像。

注意到,最近Remote Mirror Repositoryissues 17940)可能會非常棘手:

我目前竟將我公司無損從GitHub公司(https://www.npmjs.com/~lossless)的開源NPM模塊的主要發展。 com可以GitLab.com

我導入所有的回購從GitHub,但是當我嘗試關掉Mirror Repository並打開Remote Mirror Repository與原來的GitHub網址我得到一個錯誤說:

Remote mirrors url is already in use 

下面是這個失敗的回購之一:https://gitlab.com/pushrocks/npmts 編輯2個月前

事實證明,它只是需要多個步驟:

  • 禁用鏡像版本庫
  • 按保存
  • 刪除的網址
  • 按保存
  • 然後添加遠程鏡像
+1

遠程回購不可用時,此設置會發生什麼,例如由於維護或網絡hickups?我猜想要麼推到gitlab倉庫是不可能的,否則在遠程倉庫中推送的提交將會丟失? – jfrantzius

+2

@jfrantzius後者:你的提交仍然會被推送到你的GitLab倉庫,但是不會將它提交給奴隸。 – VonC

+0

今天,這將失敗,因爲GitLab自動將https://github.com/gitlabhq/gitlab-shell/tree/7eb45672b77a0337e6568ef64cd84e13027f2d7b/掛鉤掛鉤到它管理的每個存儲庫中。因此,如果您進行此更改,則修改的每個存儲庫都會嘗試推送。更不用說升級gitlab-shell時可能發生的衝突,並且當前腳本是ruby腳本,而不是bash(並且不應該刪除它!)。您可以通過閱讀當前目錄名稱並確保它與遠程設備之間的雙向注入來更正此問題,但我建議人們遠離這些事情。 –

3

最好的選擇今天是使用GitLab CI。它本質上是一個已經實現的webhooks服務器,它會自動克隆你,讓我們運行任意的shell命令:你所要做的就是推送。

services如果有人實現它們,是最好的選擇:它們生活在源代碼樹中,只需一次推送,並且不需要額外的部署開銷。

現在關鍵的實現困難是如何安全地存儲推送憑證:可能GitHub的最佳選擇是以某種方式獲得密鑰(通過服務的UI上的Oauth將是完美的)並存儲該明文。

剛剛添加的另一個選項是custom hooks

0

最好的選擇是不使用post-receive掛鉤,但是部署通過rsync執行同步的命令,如果你喜歡Ruby的話使用Capistrano,如果你喜歡Javascript(Grunt),則使用Shipit

6

如果沒有託管自己的GitLab,值得了解GitLab.com直接引入了此功能,沒有任何解決方法。

  1. 從項目中使用的齒輪圖標,選擇鏡像版本庫
  2. 向下滾動到推送到遠程倉庫
  3. 對號遠程鏡像庫:自動更新遠程鏡像的分支機構,標籤,並且每小時從這個倉庫提交。
  4. 輸入您要更新的存儲庫;對GitHub上至少可以包括你的URL的用戶名和密碼,就像這樣:https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git

請注意,如果你從遠程倉庫拉,它仍然會推動在此處設置遠程倉庫。我還沒有嘗試過,但你應該能夠推送到同一個存儲庫並從中拉出。