是否可以将GitLab设置为自动同步(镜像)托管在其他位置的仓库?
目前,我所知道的最简单方法是手动推送到两个(GitLab和另一个)存储库,但这很耗时且容易出错。
最大的问题在于如果两个用户同时将更改推送到两个不同的存储库,那么镜像就会重新同步。我能想到的防止此问题的最佳方法是确保用户只能向其中一个存储库推送。
是否可以将GitLab设置为自动同步(镜像)托管在其他位置的仓库?
目前,我所知道的最简单方法是手动推送到两个(GitLab和另一个)存储库,但这很耗时且容易出错。
最大的问题在于如果两个用户同时将更改推送到两个不同的存储库,那么镜像就会重新同步。我能想到的防止此问题的最佳方法是确保用户只能向其中一个存储库推送。
2016年12月更新:使用GitLab EE 8.2+支持镜像功能,请参见“仓库镜像”。
Xiaodong Qi评论道:
无需使用任何命令行即可简化此答案(只需在Gitlab仓库管理界面上设置即可)
原始答案(2013年1月)
如果你的远程镜像仓库是bare repo,那么你可以在gitlab管理的仓库中添加一个post-receive钩子,并在其中推送到你的远程仓库。
#!/bin/bash
git push --mirror slave_user@mirror.host:/path/to/repo.git
作为Gitlab使用的Gitolite 提到:
如果您只想在几个特定的存储库中安装钩子,请直接在服务器上进行操作。
这将位于:
~git/repositories/yourRepo.git/hook/post-receive
注意事项(2014年10月更新)
Ciro Santilli在评论中指出:
在当前情况下(Q4 2014) 这将失败,因为GitLab会自动将github.com/gitlabhq/gitlab-shell/tree/…软链接到它管理的每个仓库中。
因此,如果您进行此更改,您修改的每个仓库都会尝试推送。
更不用说升级gitlab-shell时可能产生的冲突,以及当前脚本是Ruby脚本而不是Bash(您不应该删除它!)。您可以通过读取当前目录名称并确保其与远程目录一一对应来纠正此问题,但我建议人们远离这些事情。
看看(并投票)feeadback "推送到GitLab Repo后自动推送到远程镜像仓库"。
2016年7月的更新: 我看到GitLab EE(企业版)增加了这种功能:MR 249
请注意,最近的Remote Mirror Repository
(issues 17940)可能会有些棘手:
我目前正在尝试将我公司Lossless GmbH (https://www.npmjs.com/~lossless)的开源npm模块的主要开发从GitHub.com转移到GitLab.com
我正在从GitHub导入所有存储库,但是当我尝试关闭
Mirror Repository
并打开带有原始GitHub URL的Remote Mirror Repository
时,我会收到一个错误消息:
Remote mirrors url is already in use
这是其中一个仓库失败的原因:https://gitlab.com/pushrocks/npmts 2个月前进行了编辑
事实证明,它需要多个步骤:
- 禁用镜像仓库
- 点击保存
- 移除URL
- 点击保存
- 然后添加远程镜像
如果您没有托管自己的GitLab,那么值得知道的是,GitLab.com已经直接引入了此功能,无需任何变通方法。
https://yourgithubusername:yourgithubpassword@github.com/agaric/guts_discuss_resource.git
请注意,如果您正在从远程存储库拉取,它仍将推送到此处设置的远程存储库。我尚未尝试过,但您应该能够将数据推送到并从同一个存储库拉取。
https
会确保使用 SSL,但是它是否加密了实际的 URL 字符串被请求(在这种情况下将包括密码)? - user2490003https://username@github.com/username/repo.git
推送
密码
your_github_token
https://github.com/username/repo.git
拉取(Pull)
不需要认证(leave_empty)
2020更新
你们都知道,外部私有仓库的免费Gitlab镜像支持已于3月22日结束。
使用定时任务自动化,这里提供了一小段PHP代码:
您可以使用钩子来自定义在某个提交后运行的脚本。通过这样做,您可以将新更改发送到另一个存储库。请查看以下页面中有关钩子的更多信息:http://git-scm.com/book/en/Customizing-Git-Git-Hooks
GitBitLabHub 允许您使用简单的 Webhooks 在 Bitbucket / Gitlab / Github 之间自动镜像存储库。
ssh-keygen -t rsa -f ~/.ssh/project_id_rsa
docker run -it \
-e SRC_REPO=git@bitbucket.org:vendor/src_repo.git \
-e DEST_REPO=git@gitlab.example.com:2222/vendor/dest_repo.git \
-e SRC_DEPLOY_KEY=base64_encoded_key== \
-e DEST_DEPLOY_KEY=base64_encoded_key== \
-p 8181:8080/tcp \
karser/gitbitlabhub
base64 -w 0 < ~/.ssh/project_id_rsa
最好的选择不是使用post-receive钩子,而是使用部署命令通过rsync进行同步,如果您喜欢Ruby,则可以使用Capistrano,如果您更喜欢Javascript(Grunt),则可以使用Shipit。