Gitlab库镜像(Gitlab repository mirroring)

2019-07-18 03:02发布

是否有可能有gitlab设置自动同步(镜像)在另一地点举行的仓库?

目前,最简单的方法,我知道这样做的,涉及到手动推到两个(gitlab和其他)存储库,但这是耗时且容易出错。

最大的问题是,一个镜子可以重新同步是两个用户同时更改推送到两个不同的存储库。 我可以拿出来避免此问题最好的方法是确保用户只能推到库之一。

Answer 1:

更新2016年12月:镜像支载有GitLAb EE 8.2或以上版本:见“ 库镜像 ”。

正如评论说晓东齐 :

此答案可以在不使用任何命令行被简化(只是将它安放Gitlab回购管理接口)


原来的答案(2013年1月)

如果您的远程镜像回购是一个裸露的回购 ,那么你就可以在后收到钩添加到您的gitlab管理回购,并推到它远程回购。

#!/bin/bash
git push --mirror slave_user@mirror.host:/path/to/repo.git

如Gitolite(由Gitlab使用) 提到 :

如果你想在只有少数特定的仓库来安装一个钩子,直接做在服务器上。

这将是:

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

买者(更新Ocotober 2014)

西罗桑蒂利指出的评论 :

今天(Q4 2014),这将失败 ,因为GitLab自动符号链接github.com/gitlabhq/gitlab-shell/tree/...到它所管理的每个存储库。
所以,如果你做这种改变,每次你修改数据库将试推。
不要升级时提及可能的冲突gitlab-shell ,以及当前脚本是一个Ruby脚本,没有庆典(你不应该将其删除!)。

你可以通过读取当前目录名,并确保与远程之间的一一对应解决这个问题,但我建议人们呆在远远离那些事

见(投票支持) feeadback“ 自动推送到远程镜像回购推GitLab回购后 ” 。


更新2016年7月:我看到增加了GitLab EE(企业版)这样的功能: MR 249

  • 下添加镜像版本库的设置,进入远程推送URL能力
  • 添加实现代码推到远程仓库
  • 添加新的后台工作
  • 如果存在,它们显示最新更新日期和同步错误。
  • 同步远程镜像每隔一小时。

需要注意的是,近期Remote Mirror Repository ( 问题17940 )可能会非常棘手:

目前,我想要对我公司无损有限公司(开源NPM模块的主要发展转变https://www.npmjs.com/~lossless )从GitHub.com到GitLab.com

我导入所有的回购从GitHub,但是当我尝试关掉Mirror Repository和切换Remote Mirror Repository与原来的GitHub网址我得到一个错误说:

Remote mirrors url is already in use

这里是回购的一个失败有: https://gitlab.com/pushrocks/npmts编辑2个月前

原来,它只是需要多个步骤:

  • 禁用镜像版本库
  • 按保存
  • 删除的网址
  • 按保存
  • 然后添加远程镜像


Answer 2:

如果不能托管自己的GitLab,这是值得了解GitLab.com已直接引入此功能,而无需任何变通。

  1. 从项目中使用的齿轮图标,选择镜像版本库
  2. 向下滚动到推送到远程仓库
  3. 勾选远程镜像库 :自动更新远程镜像的分支,标签,并从这个仓库每隔一小时提交。
  4. 输入您要更新资源库; 对GitHub上至少可以包括你的URL的用户名和密码,就像这样: https://yourgithubusername:yourgithubpassword@github.com/agaric/guts_discuss_resource.git

请注意,如果你从远程仓库拉,它仍然会推动在此处设置远程仓库。 我还没有尝试过,但你应该能够推到和来自同一个仓库拉。



Answer 3:

我还创建了一个项目,通过API(API大多只创建项目使用),以反映在GitLab 6仓库。

https://github.com/sag47/gitlab-mirrors



Answer 4:

今天的最佳选择是使用GitLab CI。 它本质上是网络挂接,它可以自动克隆你,让你的运行任意shell命令已经执行服务器:所有你需要做的就是推动。

服务是最好的选择,如果有人实现了他们:他们生活在源代码树,会做一个推,并且不需要额外的部署开销。

关键的实现难度,现在是如何存储推凭据安全:可能对GitHub上的最好的选择是一键搞定不知何故(的Oauth UI上通过服务将是完美的),并将其存储明文。

刚刚被添加另一种选择是自定义的钩子 。



Answer 5:

配置的简单总结镜像与GitLab和GitHub的


  1. GitHub的 :设置>开发者设置>个人访问令牌
    • 您需要启用: public_repo
  2. GitLab :GitLab项目>设置>库>镜像库


  • Git仓库URL: https://username@github.com/username/repo.git
  • 镜子方向Push
  • 验证方法Password
    • 密码your_token


  • Git仓库URL: https://github.com/username/repo.git
  • 镜子方向Pull
  • 验证方法leave_empty


官方GitLab文档



Answer 6:

您可以使用挂钩,以自定义运行后,一些提交的脚本。 这样,您可以发送到另一个仓库的新变化。 查找有关钩下页了解更多信息: http://git-scm.com/book/en/Customizing-Git-Git-Hooks



Answer 7:

最好的办法是不使用后收到钩,但得到部署,通过rsync执行同步命令,使用Capistrano的 ,如果你喜欢红宝石,使用Shipit如果你喜欢使用Javascript(步兵)。



Answer 8:

GitLab企业版现在支持库镜像为8.2版本。 有关如何配置此信息是在库镜像帮助主题 。



文章来源: Gitlab repository mirroring