2014-02-23 36 views
30

我想在Gitlab中创建webhook,以便在发生push事件时自动更新Github上的镜像存储库。我检查了这个page,但我不明白它是如何完成的。如何创建一个Gitlab webhook来更新Github上的镜像库?

我的Gitlab版本是6.5。下面是配置页:

inserir a descrição da imagem aqui

我应该把什么网址?我需要在哪里放置脚本来更新存储库?

+0

可能重复[Gitlab库镜像(http://stackoverflow.com/questions/14288288/gitlab-repository-mirroring) –

回答

40

你不需要webhook。一个普通的接收后挂钩将会很好地工作。

要创建和使用这样一个钩子,您只需登录安装了gitlab的服务器并为git用户创建一个ssh密钥。

sudo -u git ssh-keygen -f /home/git/.ssh/reponame_key 

(提示时不输入任何密码)

转到您的github帐户,并添加公钥(它被创建为/home/git/ssh/reponame_key.pub)到项目的部署重点。 看看https://help.github.com/articles/managing-deploy-keys如果你需要帮助。

一旦做到这一点,你只需要配置你的混帐服务器和GitHub的之间的连接: 添加一个别名与git用户的ssh配置(添加以下行/home/git/.ssh/config - 创建它,如果它不存在)

Host reponame 
IdentityFile /home/git/.ssh/reponame_key 
HostName github.com 
User git 

现在,添加新的远程(使用您刚才创建的别名)到你的资料库:

cd /home/git/repositories/namespace/reponame.git 

git remote add --mirror github reponame:youruser/reponame.git 

现在,一切都在地方,你就必须创建实际钩:

cd /home/git/repositories/namespace/reponame.git/hooks 

echo "exec git push --quiet github &" >> post-receive 

chmod 755 post-receive 

lastcommand非常重要,因为git会在运行前检查钩子是否可执行。

就是这样!

(根据您的真实账户取代reponame,namespace和youruser并享受)。

最后注意:如果您希望自己的名字和头像在github上提交,请确保您在gitlab上使用的电子邮件地址也是您的github帐户的地址之一。否则你会看到你的gitlab用户名。

+0

另一件事,Gitlab 6.5目录在名称末尾有'.git'(例如'dotfiles.git'),它们不是'git'存储库。所以,我无法执行添加GitHub镜像的命令。 – Yamaneko

+1

@VictorHugo你也是对的.git结尾的目录。然而,当你说他们不是git仓库时,你是错误的,他们是[裸仓库](http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/)并包含一个专门用于像我所说明的用途的挂钩目录。 – novalore

+1

它的工作。非常感谢@novalore。我想分享一些调试步骤,看看是否一切正常。在'/ home/git/.ssh/config'中包含新主机名后,可以通过运行'sudo -u git ssh reponame'来查看它是否工作正常。它会显示:'你好用户/ reponame!您已成功通过身份验证,但GitHub不提供shell访问权限。 连接到github.com已关闭.' – Yamaneko

1

对于WebHooks处理我正在使用sinatra web服务器。对于内GitLab ,自这一刻每个推事件(或其他),以http://localhost:4567/pew

require 'sinatra' 
post '/pew' do 
    puts JSON.parse request.body.read 
    # here can be placed signal code to run commit processing script 
end 

寄存器网络挂接提交gitlab将派遣提交信息到URL。

24

如果您没有托管自己的GitLab,GitLab.com直接引入了此功能,没有任何解决方法。

  1. 从项目中使用的齿轮图标,选择镜像版本库
  2. 向下滚动到推送到远程仓库
  3. 对号远程镜像库:自动更新远程镜像的分支机构,标签,并且每小时从这个仓库提交。
  4. 输入您要更新的存储库;对GitHub上,你可以包括你的URL的用户名和密码,就像这样:https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git
+0

目前,如果您使用GitLab.com,这种新方法似乎是最容易的。然而,@novalore的答案更一般,并且涵盖了所有的GitLab设置。因此,我会把它作为问题的答案,但这个也可能是有效的。 – Yamaneko

+0

在GitLab.com中,此选项仅适用于Bronze用户 –