gon*_*opp 53 git version-control mirroring gitlab
是否有可能让gitlab设置自动同步(镜像)在另一个位置托管的存储库?
目前,我知道这样做最简单的方法是手动推送到两个(gitlab和另一个)存储库,但这很费时且容易出错.
最大的问题是镜像可以重新同步是两个用户同时将更改推送到两个不同的存储库.我可以提出的防止此问题的最佳方法是确保用户只能推送到其中一个存储库.
Von*_*onC 19
2016年12月更新:使用GitLAb EE 8.2+支持镜像:请参阅" 存储库镜像 ".
正如Xiaodong Qi所评论的那样:
无需使用任何命令行即可简化此答案(只需在Gitlab repo管理界面上进行设置)
原始答案(2013年1月)
如果您的远程镜像仓库是一个裸仓库,那么您可以在gitlab管理的仓库中添加一个post-receive挂钩,并将其推送到您的远程仓库中.
#!/bin/bash
git push --mirror slave_user@mirror.host:/path/to/repo.git
Run Code Online (Sandbox Code Playgroud)
正如Gitolite(由Gitlab使用)提到:
如果要仅在几个特定存储库中安装挂钩,请直接在服务器上执行.
将在:
~git/repositories/yourRepo.git/hook/post-receive
Run Code Online (Sandbox Code Playgroud)
警告(更新Ocotober 2014)
今天(2014年第四季度),这将失败,因为GitLab会自动将 github.com/gitlabhq/gitlab-shell/tree/...符号链接到它管理的每个存储库中.
因此,如果您进行此更改,您修改的每个存储库都将尝试推送.
更不用说升级时可能发生的冲突gitlab-shell了,当前脚本是ruby脚本,而不是bash(你不应该删除它!).你可以通过读取当前目录名称并确保它与遥控器之间的双射来纠正这个问题,但我建议人们远离那些东西
有关反馈的信息,请参阅(并投票支持)" 推送到GitLab Repo后自动推送到远程镜像回购 ".
2016年7月更新:我看到为GitLab EE(企业版)增加了这种功能:MR 249
请注意,最近Remote Mirror Repository(问题17940)可能很棘手:
我目前正试图将我公司Lossless GmbH(https://www.npmjs.com/~lossless)的开源npm模块的主要开发从GitHub.com转移到GitLab.com
我正在从GitHub导入所有repos,但是当我尝试关闭
Mirror Repository并Remote Mirror Repository使用原始GitHub URL 打开时,我收到一条错误消息:
Remote mirrors url is already in use
Run Code Online (Sandbox Code Playgroud)
这是其中一个失败的回购:https://gitlab.com/pushrocks/npmts 编辑于2个月之前
事实证明,它只需要多个步骤:
- 禁用镜像存储库
- 按保存
- 删除URl
- 按保存
- 然后添加远程镜像
如果没有托管你自己的GitLab,值得知道GitLab.com直接引入了这个功能,没有任何解决方法.
https://yourgithubusername:yourgithubpassword@github.com/agaric/guts_discuss_resource.git请注意,如果您从远程存储库中提取,它仍将继续到此处设置的远程存储库.我没有尝试过,但你应该能够从同一个存储库推送和拉出.
https://username@github.com/username/repo.gitPushPassword
your_github_tokenhttps://github.com/username/repo.gitPullleave_empty