是否有可能讓gitlab設置自動同步(鏡像)託管在其他位置的存儲庫?Gitlab存儲庫鏡像
目前,我所知道的最簡單的方法是手動推送到兩個(gitlab和另一個)存儲庫,但這很耗時且容易出錯。
最大的問題是鏡像可以重新同步,兩個用戶同時將更改推送到兩個不同的存儲庫。爲防止此問題,我可以提出的最佳方法是確保用戶只能推送到其中一個存儲庫。
是否有可能讓gitlab設置自動同步(鏡像)託管在其他位置的存儲庫?Gitlab存儲庫鏡像
目前,我所知道的最簡單的方法是手動推送到兩個(gitlab和另一個)存儲庫,但這很耗時且容易出錯。
最大的問題是鏡像可以重新同步,兩個用戶同時將更改推送到兩個不同的存儲庫。爲防止此問題,我可以提出的最佳方法是確保用戶只能推送到其中一個存儲庫。
更新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
注意到,最近Remote Mirror Repository
(issues 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個月前
事實證明,它只是需要多個步驟:
- 禁用鏡像版本庫
- 按保存
- 刪除的網址
- 按保存
- 然後添加遠程鏡像
遠程回購不可用時,此設置會發生什麼,例如由於維護或網絡hickups?我猜想要麼推到gitlab倉庫是不可能的,否則在遠程倉庫中推送的提交將會丟失? – jfrantzius
@jfrantzius後者:你的提交仍然會被推送到你的GitLab倉庫,但是不會將它提交給奴隸。 – VonC
今天,這將失敗,因爲GitLab自動將https://github.com/gitlabhq/gitlab-shell/tree/7eb45672b77a0337e6568ef64cd84e13027f2d7b/掛鉤掛鉤到它管理的每個存儲庫中。因此,如果您進行此更改,則修改的每個存儲庫都會嘗試推送。更不用說升級gitlab-shell時可能發生的衝突,並且當前腳本是ruby腳本,而不是bash(並且不應該刪除它!)。您可以通過閱讀當前目錄名稱並確保它與遠程設備之間的雙向注入來更正此問題,但我建議人們遠離這些事情。 –
您可以使用掛鉤來自定義一些提交後運行的腳本。藉此,您可以將新更改發送到另一個存儲庫。查找有關鉤下頁瞭解更多信息:http://git-scm.com/book/en/Customizing-Git-Git-Hooks
我還創建了一個項目,通過API(API大多隻創建項目使用),以反映在GitLab 6倉庫。
最好的選擇今天是使用GitLab CI。它本質上是一個已經實現的webhooks服務器,它會自動克隆你,讓我們運行任意的shell命令:你所要做的就是推送。
services如果有人實現它們,是最好的選擇:它們生活在源代碼樹中,只需一次推送,並且不需要額外的部署開銷。
現在關鍵的實現困難是如何安全地存儲推送憑證:可能GitHub的最佳選擇是以某種方式獲得密鑰(通過服務的UI上的Oauth將是完美的)並存儲該明文。
剛剛添加的另一個選項是custom hooks。
最好的選擇是不使用post-receive掛鉤,但是部署通過rsync執行同步的命令,如果你喜歡Ruby的話使用Capistrano,如果你喜歡Javascript(Grunt),則使用Shipit。
如果沒有託管自己的GitLab,值得了解GitLab.com直接引入了此功能,沒有任何解決方法。
https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git
請注意,如果你從遠程倉庫拉,它仍然會推動在此處設置遠程倉庫。我還沒有嘗試過,但你應該能夠推送到同一個存儲庫並從中拉出。
從版本8.2開始,GitLab Enterprise Edition現在支持存儲庫鏡像。有關如何配置的信息位於Repository Mirroring help topic。
此請求已在:http://feedback.gitlab.com/forums/176466-general/suggestions/4614663-automatic-push-to-remote-mirror-repo-after-push-to Go並將其取消。 –