如何在遥控器上挂一个git pull?

时间:2010-05-08 15:53:58

标签: git pull githooks

有没有办法在遥控器上发生git pull时挂钩(类似于预接收或后接收)。基本上我希望能够让遥控器在拉动时提供任何东西。

在我的情况下,遥控器上的任何内容都是权威来源,可以在没有git提交的情况下进行修改。我想确保当我拉动时,我总能得到最新的任何现场。

6 个答案:

答案 0 :(得分:3)

首先,回答你的实际问题:当有人抓取时,远程端没有调用钩子。 (当有人拉扯时,所有遥控器都知道他们是从中取出的 - 它不知道他们是跑了git pullgit fetchgit remote update ......)

至于你的实际情况:我同意Magnus的说法,最好只是在编辑后进行提交,或者失败,有某种周期性任务(cronjob?)检查修改和提交,如果它发现任何。如果你不喜欢这些选择中的任何一个,那么你就可以简化一些事情,这样你就可以快速轻松地在拉动之前触发远程存储库中的提交。

另外,我建议关于使用工作树作为规范存储库的存储库。如果你需要推动它,它会遇到麻烦。相反,您可以拥有一个裸的规范存储库,您的实时存储库会在提交后推送到该存储库,并在该裸存储库中安装post-receive挂钩以在必要时更新实时存储库。

答案 1 :(得分:1)

不幸的是,git本身并没有为此提供钩子,因为它是一个完美的用例,想要在允许拉/取之前检查一些东西。

我不知道你的'遥控器'是否在本地机器上,但如果不是,请看一下gitolite,它的钩子就是这样的:

来自v2 gitolite docs

  

“gl-pre-git”hook

     

虽然git有很多很好的钩子你可以使用,但它们都可以运行   只是推动。在获取或克隆上没有任何东西可以运行   在git-receive-pack或之前无法运行某些东西         

这就是gl-pre-git hook的用途。如果一个可执行钩子调用   gl-pre-git存在,它将使用当前目录调用   设置为repo.git,并使用单个参数,它将是R或   W取决于客户尝试做什么。

对于v3 gitolite,这里是the docs about triggers。文档有点神秘,但这是它的工作原理:

  1. 在〜/ .gitolite.rc中添加(在全局范围内):

    PRE_GIT => [ '<pre_git_trigger_script_name>' ]

  2. 在同一个文件中查看允许设置LOCAL_CODE的行并将其设置为您喜欢的位置

  3. 在为LOCAL_CODE设置的目录中,创建一个名为“triggers”的子目录,并创建一个名为<pre_git_trigger_script_name>的脚本,其中包含您想要执行的操作...(请确保执行以下操作: chmod +x <pre_git_trigger_script_name>

  4. 运行gitolite setup

  5. test&amp;&amp;祝你有个美好的一天

  6. 更新:实际上使用gitolite,我认为你可以让pre-git触发器做一些事情,比如推送到一个不存在的分支,然后在非裸存储库中挂钩预先接收以拒绝推送,但要在此过程中执行git add --all . && git commit -m"autocommit" && push gitolite。当您不希望允许gitolite托管用户权限直接在非裸存储库中运行命令时,这很方便。

答案 2 :(得分:0)

我没有使用git hook的直接经验,this page可能会有所帮助,但看起来你似乎无法做到这一点。

更简单(更好的IMO)解决方案是使用生产环境以外的仓库作为权威来源。你能做这个吗?生产环境很少被用作权威来源,因为最新且最稳定的是两个非常不同的东西......

仅供参考,我只是在生产环境中执行git pull或git状态。对我的本地仓库进行任何更改,测试,提交,推送到github,然后下载到生产环境。

<强>更新
我应该指出,git的一大优势和特性是它是一个分布式源代码控制系统。因此,实际上没有任何权威来源。

答案 3 :(得分:0)

我认为你不能用钩子来做这件事,因为我理解读钩子的文件没有符合你要求的钩子。

如果我需要类似你想要的东西,我会在'remote'上创建一个每小时运行一次的脚本,并检查是否有任何文件发生了变化( git status )并全部提交( git commit -a -m“自动提交”)。

答案 4 :(得分:0)

这不是我以前做过的事情,但你可以从php里面运行bash脚本:

http://www.devx.com/opensource/Article/40785
http://us2.php.net/function.exec

这应该允许您通过PHP脚本提交和推送一组更改。查看界面或将其集成到当前的编辑过程中,您应该好好去。

答案 5 :(得分:0)

编辑此文件的人/是什么?如果某人在某个网站上进行了某些更改时发生了某些变化,则必须由某些内容触发,这意味着您可以将其自动化。当这件事发生并且文件被保存时,你应该触发提交。提交必须在某个时间完成,也可能在那个时候完成。