是否有可能让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并将其取消。 –