问题标签 [git-post-receive]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1846 浏览

git - Git post-receive - 如何检查推送的分支是否与主分支合并

在我们的团队中,我们通常将所有任务推送到单独的分支中,然后发布经理审查这些分支并将它们合并到“主”分支中

有时团队成员忘记将他们的分支与主分支合并(在推送之前) - 所以我想做的是 - 在用户推送后输出一条消息“请与主分支合并” - 我假设我需要在后期检查一些东西 -在遥控器上接收挂钩..有一些例子吗?..或者我基本上应该做什么?

更新:主要原因 - 尽量减少潜在冲突的数量(因为提交者(而不是发布经理)将解决它们)

0 投票
3 回答
2420 浏览

git - 用于网站的 Git / 接收后 / 测试和生产站点的分离

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

但是,我怀疑这实际上是否安全 :) 我绝不是 Git 专家,但我猜 Git 可能会跟踪当前签出的分支头,这种方法可能会混淆它没有尽头。

所以有几个问题:

  1. 这安全吗?

  2. 更好的方法是让我的基础存储库成为测试站点存储库(具有相应的工作目录),然后让该存储库将更改推送到新的实时站点存储库,该存储库具有与实时站点库对应的工作目录?这也将允许我将生产移动到不同的服务器并保持部署链完整。

  3. 有什么我想念的吗?使用 Git 管理网站时,是否有一种不同的、干净的方式来区分测试和生产部署?

作为根据 Vi 的回答的附加说明,是否有一种很好的方法可以处理删除而不会对文件系统造成太多影响?

谢谢你,-沃尔特

PS - 我为多个回购提出的脚本(除非我听得更好,否则我正在使用)如下:

然后 ../Live/$sitename 中的存储库(这些是“裸”存储库,在 init 之后添加了工作树)具有基本的后接收:

0 投票
3 回答
11303 浏览

git - Git post-receive钩子不起作用

我们将 git 与中央仓库一起使用(使用 Gitosis)。我创建了一个 post-receive 挂钩,用于在将更改推送到中央存储库时向开发邮件列表生成一封电子邮件,并从 git 存储库中的文档文件夹生成文档。

因此,在 ~git/ 中,我有一个目录,我们将其称为“a”,其中包含 git 存储库的克隆。接收后挂钩如下所示:

电子邮件脚本正在运行,但文档生成却没有。pull_log.log 的内容是:

这让我认为它没有更改为上述脚本第 5 行中的正确目录。我错了吗?我怎样才能让它工作?

编辑:我已经按照回复中的建议更新了接收后挂钩。脚本现在是:

我从 git push 得到以下输出:

还有什么帮助吗?

哦,如果我自己运行脚本,它就可以工作(我通过说 hooks/post-receive 来运行它)

发现了问题,这要归功于serverfault - 基本上,环境变量GIT_DIRGIT_WORK_TREE钩子运行时设置,这些对 git pull 产生不利影响。取消设置变量可以解决问题。

0 投票
1 回答
805 浏览

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

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

如何摆脱每行输出之前的“远程:”文本?它比较分散注意力。(我知道这是可能的,因为我在实践中看到过,我只是不知道它是如何完成的。)

0 投票
2 回答
2525 浏览

git - Git:接收电子邮件后挂钩以显示 html 格式的颜色差异?

我使用 Git 的 post-receive 电子邮件钩子发送了一个不同的电子邮件(感谢这个 SO post),但它发送的电子邮件只是纯文本。我想要一个更大的更丰富多彩和格式良好的东西。

是否有一个脚本或我可以使用 post-receive 钩子运行的东西,它将发送格式良好的差异电子邮件而不是纯文本电子邮件?

0 投票
4 回答
2028 浏览

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

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

  1. 使用差异向开发团队发送电子邮件
  2. 如果提交消息中有一些特殊的短语(例如“see #1”),那么我希望将提交消息放在 trac 票中。

第一件事是由 git-commit-notifier 解决的。在我创建了接收后挂钩后,它可以完美运行:

我的第二个要求可以按照http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts中的描述来解决。它也可以完美地与这样的 post-receive 挂钩:

当它们分开时,这两件事都有效。但我需要将它们结合起来。所以我创建了接收后挂钩:

这很有趣,但这不起作用。这些命令在单独运行时运行得很好,但只有第一个在它们被放入 post-receive 钩子时才有效。

如果我有这样的钩子:

我确实收到以下错误

但是,如果我更改这 2 个命令的顺序,我不会收到任何错误,但只有第一个命令有效。

我将不胜感激。我试图解决这个问题很长时间,但我没有任何想法。

0 投票
6 回答
62540 浏览

git - 用于网站登台的 Git 接收后挂钩

我正在尝试设置 Git 来暂存我的网站,以便我可以git pull让当前版本在本地运行,然后git push将更改推送到远程服务器。我已经对其进行了设置,使其按照我想要的方式工作,但是在我推送之后,我必须手动运行git checkout -fgit reset --hard HEAD在远程服务器上运行。

我已经尝试将这些作为服务器上的接收后挂钩放入 shell 脚本中,但它似乎没有任何效果。我知道脚本正在运行,因为我在推送后看到“将更改推送到服务器”。这是接收后挂钩:

0 投票
2 回答
1446 浏览

git - 如何正确使用 post-receive hook?

我的目录结构是:

~/parent.git/.git/hooks/post-receive

接收后挂钩如下所示:

当我推入 parent.git 时,脚本不会运行。我无法弄清楚这个问题,因为互联网上的每一点都说这应该有效。

我chmod'd post-receive,所以我知道这不是问题。任何帮助深表感谢。

0 投票
2 回答
1245 浏览

git - gitosis 的接收后挂钩

我正在跑步Gitosis并希望将我提交的工作暂存在我的 html 目录中。

我试图使用这种方法将 GIT_WORKING_TREE 设置为我的 html 目录,但我得到了错误remote: fatal: This operation must be run in a work tree。我认为这是因为 Gitosis 似乎需要裸存储库。

任何建议都会有很大帮助。

0 投票
5 回答
14364 浏览

git - Git post-receive钩子不起作用

我的设置是一个 Windows XAMPP 服务器,启用了 cURL,并安装了 Git 和 Hudson。Hudson 每分钟轮询一次 Git 以查找更改,如果找到更改,它会创建一个构建。我使用这个构建作为我的测试服务器。这工作正常。

我想在我的中央远程存储库上设置一个接收后挂钩,该存储库运行 Hudson 的强制构建功能。

我在我的中央 Git 存储库的 hooks 目录中创建了一个名为“post-receive”的 post-receive 文件,该文件是从开发人员的本地分支推送到的。他们每个人都推送到中央存储库上自己的分支。我想在每次推送后立即运行接收后构建,而不是让 Hudson 每分钟轮询 Git。

当我打开远程服务器的 shell 并在 hooks 文件夹中运行“post-receive”时,它就会运行。当人们从本地存储库副本推送到中央存储库副本时,它不会被调用。

也许我没有正确解释这一点,但这就是我理解 Git 的方式。

接收后代码为两行:

同样,当我打开一个 shell 并运行它时,它可以工作,但是当有人推到它时,什么也没有发生,直到一分钟或更短的时间过去,Hudson 意识到 Git 被改变了,然后它构建了。

如果需要,我很乐意澄清。任何帮助是极大的赞赏。

编辑:玩弄它之后,我觉得也许 post-receive 没有执行,因为 refs 没有被更新?git文档说

在所有 refs 都更新后,它会在远程存储库上执行一次。

这是否意味着如果没有更新,它将不会执行?如果是这样,我很确定无论如何事情都会更新,所以它不应该适用。

这是我的过程:在本地进行编辑。提交编辑。从我的 HEAD 推送到名为“mybranch”的远程分支(不是已签出的主分支)这是我希望我的钩子执行的点。