标签: git-post-receive

如何摆脱 git 中 post-receive 返回的每一行中出现的“remote:”消息?

我在 git 中创建了一个 post-receive 挂钩。钩子将消息输出到屏幕,这些消息被发送回执行推送的 git 客户端,然后输出回来。

如何去掉每行输出之前的“remote:”文本?这是相当分散注意力的。(我知道这是可能的,因为我在实践中见过它,我只是不知道它是如何完成的。)

git git-post-receive

6
推荐指数
1
解决办法
1215
查看次数

多个命令在git post-receive中不起作用

我正在使用带有trac的git.推后我想做两件事:

  1. 使用diff向开发团队发送电子邮件
  2. 如果提交消息中有一些特殊短语(如"参见#1"),那么我希望将提交消息放在trac票证中.

第一件事是通过git-commit-notifier解决的.在我创建post-receive hook之后它完美地工作:

#!/bin/sh

/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

我的第二个要求可以在http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts中解释.它也适用于这种后接收挂钩:

#!/bin/sh

/var/trac/testgit/commit-updater

当它们分开时,这两件事都有效.但我需要将它们结合起来.所以我创建了post-receive钩子:

#!/bin/sh

/var/trac/testgit/commit-updater
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

这很有趣,但这不起作用.单独运行时,命令运行得非常好,但只有第一个在放入后接收挂钩时才能运行.

如果我有这样的钩子:

#!/bin/sh

/var/trac/testgit/commit-updater
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

我收到以下错误

/var/lib/gems/1.8/gems/git-commit-notifier-0.8.0/bin/git-commit-notifier:12: undefined method `strip' for nil:NilClass (NoMethodError)
        from /var/lib/gems/1.8/bin/git-commit-notifier:19:in `load'
        from /var/lib/gems/1.8/bin/git-commit-notifier:19

但是,如果我改变这两个命令的顺序,我没有收到任何错误,但只有第一个命令工作.

我将不胜感激任何帮助.我试图解决这个问题很长一段时间,我没有想法.

git shell hook trac git-post-receive

6
推荐指数
1
解决办法
1952
查看次数

如何在 Git post-receive hook 中获取已更改文件的列表?

我需要在服务器端挂钩中获取已更改文件的列表。例子:

Local commit 1:

M test.txt
M test2.txt

Local commit 2:

M test.txt
A test3.txt
Run Code Online (Sandbox Code Playgroud)

两个提交都被推送到服务器(裸仓库)。我需要遍历文件列表并通过 curl 在其他地方发布每个文件:

M test.txt
M test2.txt
A test3.txt
Run Code Online (Sandbox Code Playgroud)

我正在努力寻找实现这一目标的文档。我知道这些修订是针对标准输入的。我如何实际遍历推送的文件,并引用它们进行 curl 上传(这似乎很困难,因为它是一个裸仓库)?

#!/bin/bash

while read oldrev newrev refname; do
  echo $oldrev
  echo $newrev
  echo $refname
done < "${1:-/dev/stdin}"
Run Code Online (Sandbox Code Playgroud)

git git-post-receive

6
推荐指数
0
解决办法
2035
查看次数

Git for Websites/post-receive/Separation of Test and Production Sites

我正在使用Git来管理我的网站的源代码和部署,目前在同一个盒子上运行测试和实时网站.最初在这个资源http://toroid.org/ams/git-website-howto之后,我想出了以下post-receive钩子脚本来区分推送到我的实时站点并推送到我的测试站点:

while read ref
do
  #echo "Ref updated:"
  #echo $ref -- would print something like example at top of file
  result=`echo $ref | gawk -F' ' '{ print $3 }'`
  if [ $result != "" ]; then
    echo "Branch found: "
    echo $result
    case $result in
      refs/heads/master )
        git --work-tree=c:/temp/BLAH checkout -f master
        echo "Updated master"
        ;;
      refs/heads/testbranch )
        git --work-tree=c:/temp/BLAH2 checkout -f testbranch
        echo "Updated testbranch"
        ;;
      * )
        echo "No update known for $result"
        ;;
    esac …
Run Code Online (Sandbox Code Playgroud)

git website-deployment git-post-receive web

5
推荐指数
1
解决办法
2400
查看次数

想要 git post 接收钩子来进行新的提交和推送

在某些条件下,我希望我的 post-receive hook 负责更新 repo 本身中的版本文件。因此,假设我的存储库中有一个文件 version.txt,我希望 post 接收挂钩更新 version.txt 中的版本字符串。

这将意味着再次推动回购。这可能吗?

谢谢!

git push git-post-receive

5
推荐指数
1
解决办法
1140
查看次数

使用post-receive脚本在遥控器上进行Garse稀疏结账

我想弄清楚如何做以下(并弄清楚它是否可能).

我有一个面向各种东西的文件夹的本地git仓库,但我希望能够到我的网站使用Git部署到我的开发服务器,真的只有一个文件夹中的内容应该进入远程Web根目录(只是内容文件夹,而不是文件夹本身,这是艰难的一点).我有一个git push到dev服务器进入web可访问文件夹之外的一个裸仓库,然后我使用post-receive脚本将所有工作文件放入webroot.但是,这会复制所有文件夹,显然我只希望在操作完成后移动一个特定文件夹的内容.

做一些研究,看起来稀疏结账将是一个很好的选择.更新:我现在有工作,它只会复制一个特定的文件夹,但我仍然没有得到它忽略文件夹本身,只是拉内容.我认为这与我添加到.git/info/sparse-checkout的路径/通配符有关,但我不确定排除目录但不排除其内容的模式.

有没有办法做到这一点?我应该只使用post-receive脚本手动复制我想要的目录的内容,而不是尝试使用稀疏结账直接进行吗?

我很感激任何人愿意给予的帮助.谢谢!

git git-post-receive sparse-checkout

5
推荐指数
1
解决办法
583
查看次数

Git post-receive hook loop尽管所有提交

我试图在服务器端执行一个post-receive挂钩,它将为push中的每个提交运行一次Python脚本.

我有一个循环:

while read oldrev newrev refname
do
    python /local/Git/util.py $newrev $oldrev $refname
done
Run Code Online (Sandbox Code Playgroud)

但是这只运行脚本,仅用于push中给出的最后一次提交.

有没有办法为一次推送推送到服务器的所有提交运行脚本?

git githooks git-post-receive

5
推荐指数
1
解决办法
505
查看次数

缺少git文件钩子/ post-receive.sample

我在CentOs 6服务器上使用git 1.7.1,当我git --bare init在my_repo.git上运行时,我检查了my_repo.git/hooks,我可以看到所有挂钩,包括post-receive.sample.

现在我在Centos 7服务器上使用git 2.4.1,并且post-receive.sample文件是missng,所有其他挂钩都在那里,但不是我需要的.

我知道我可以从之前的repo复制文件,然后根据需要更改内容,但我想知道为什么post-receive.sample不像以前那样生成.

git git-post-receive

5
推荐指数
1
解决办法
1523
查看次数

为什么我的post-receive hook不能运行virtualenv源命令?

我有一个以用户'git'运行的post-receive钩子.我有一个可以被git读取的virtualenv/python/ve // bin/activate.运行:

source /python/ve/<name>/bin/activate
Run Code Online (Sandbox Code Playgroud)

适用于git组中的用户.

当它在推送后作为post-receive挂钩运行时,我收到错误"source:not found".

我不确定在哪里可以看到 - 任何提示都非常赞赏.

python linux git virtualenv git-post-receive

4
推荐指数
1
解决办法
1017
查看次数

使用GitPython查找分支上的第一次提交

我正在使用Python和Git-Python编写一个git post-receive钩子,该钩子收集有关推送中包含的提交的信息,然后用摘要更新我们的错误跟踪器和IM。在推送创建分支的情况下,我遇到了麻烦(即fromrev,后接收的参数全为零),并且在该分支上还跨越了几次提交。我正在从torev提交中倒退父母列表,但是我不知道如何确定哪个提交是分支中的第一个提交,即何时停止查找。

在命令行上我可以做

git rev-list this-branch ^not-that-branch ^master
Run Code Online (Sandbox Code Playgroud)

这将给我确切的提交清单this-branch,而没有其他人。我尝试使用记录的Commit.iter_parents方法复制此方法,该方法记录为采用与git-rev-list相同的参数,但据我所知,它不喜欢位置参数,而且我找不到一组关键字参数那个工作。

我读了Dulwich的doco,但尚不清楚它是否会做与Git-Python截然不同的事情。

我的(简化)代码如下所示。推送开始新分支时,当前仅查看第一次提交,然后停止:

import git
repo = git.Repo('.')
for line in input:
    (fromrev, torev, refname) = line.rstrip().split(' ')
    commit = repo.commit(torev)
    maxdepth = 25    # just so we don't go too far back in the tree
    if fromrev == ('0' * 40):
        maxdepth = 1
    depth = 0
    while depth < maxdepth:
        if commit.hexsha == fromrev:
            # Reached the start of the push
            break …
Run Code Online (Sandbox Code Playgroud)

python git git-post-receive gitpython dulwich

4
推荐指数
2
解决办法
3544
查看次数