问题标签 [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 投票
1 回答
121 浏览

git - Git 网站部署 - 两种方法

我一直在研究 git 网站部署,我遇到了 2 种不同的方法。它们似乎都有效,但我想知道我缺少什么优点/缺点。您使用这两种方法中的哪一种,为什么?

  1. 在公共 www 目录中具有分离的工作树的回购。您推送到 repo 并且 post-update 挂钩执行 checkout -f (类似于this
  2. 公共 www 目录中的裸回购和非裸回购。更新后挂钩执行 git reset 和 git pull。(类似于这个

方法 1 似乎更简单,因为您只需要担心 1 个存储库,但我想知道是否有我遗漏的东西。

0 投票
1 回答
848 浏览

git - 使用 git 管理生产网站?

我在生产服务器上有一个包含大约 15,000 个文件的网站。一位远程开发人员现在正在网站上完成大部分工作,但我偶尔也需要进行一些编辑。很明显,我们需要一些版本控制,所以我正在尝试设置 git。

我真的很想保持设置简单明了。我们不需要任何类型的集成商来查看我们的更改 - 我们都完全信任将更改推送到生产站点。我也认为没有必要在使它们生效之前将更改推送到登台服务器,因为我们无法在本地机器上测试任何我们无法测试的东西。我基本上只是想要一些可以防止我们破坏彼此文件的东西。这是我想到的场景:

问题:

  1. 这个工作流程对于两个开发人员(其中一个只偶尔进行编辑)的团队有意义还是有更好的?

  2. 在开发人员和生产服务器之间添加临时服务器有什么好处吗?

  3. 我假设生产服务器应该是一个裸仓库,带有一个指向 webroot 文件夹的 post-receive 钩子,我们会将副本克隆到每个开发人员的机器上,然后 git commit / git push 将任何更改启动回生产?

  4. 有什么简单的方法可以在生产服务器上创建一个裸仓库,然后将站点现有的 15,000 个文件添加到其中?还是我必须将它们下载到本地工作站上的克隆存储库,然后执行 git add / commit / push 以将它们加载到生产服务器存储库中?(他们可能需要将近 13 个小时才能上传。)

谢谢!

0 投票
2 回答
291 浏览

git - 如何在远程机器(而不是本地)上使用 Git 接收后挂钩?

我们正在使用 Windows 开发服务器来托管我的 Git 裸仓库。我们使用对服务器的直接文件访问(无 SSH、GIT 或 HTTP)。这很好,团队很高兴。

我们现在尝试让开发服务器在每次有人在裸仓库中推送代码时执行部署操作。我们在服务器上创建了一个本地仓库,并将裸仓库添加为远程仓库。

我们发现在 post-receive 挂钩中使用本地路径根本不起作用。post-receive 钩子似乎在客户端系统上搜索文件夹,而不是在服务器本身上。当我们在服务器上使用 //server/c$/[path] (以及服务器本地 repo 的远程设置)时,一切似乎都可以正常工作 - 但速度很慢。它现在开始让我们发疯,所以我们现在停止使用它:(。

简而言之,我们的问题是:

  1. post-receive 是否具有客户端本地范围?
  2. 如果 1 为真:是否可以让 post-receive 在服务器范围内运行?
  3. 是否有人成功使用了上述机制?

非常感谢你的帮助!

0 投票
1 回答
549 浏览

php - Github 服务挂钩:通过 PHP 进行后接收

我在通过服务挂钩部署时遇到了一些问题,我认为这是权限问题,但我会先说明所有事实。

服务器:Arch Linux 上带有 PHP-FPM 的 Nginx

Nginx 以 http 用户身份运行,并且拥有要由脚本更新的目录的所有权。我还为 HTTP 创建了一个 SSH 密钥并将其安装在 GitHub 上。其他命令似乎可以通过 shell_exec 正常工作,但我无法完成重置或拉动完成,也没有任何输出返回。任何帮助,将不胜感激。谢谢!

挂钩脚本(PHP):

0 投票
2 回答
858 浏览

rvm - 未使用正确的 Ruby 的接收后挂钩

请耐心等待,因为我是一个极端的新手,不太清楚我在说什么。

我正在尝试设置一个 Git 接收后挂钩来部署我的 Jekyll 站点,如此所述。它的内容是

我正在呼应PATH故障排除的目的。如果我通过 ssh 登录并使用 手动执行脚本~/git/jekyll.git/hooks/post-receive,一切正常,控制台显示

但是,当我git push deploy master使用笔记本电脑时,我收到此错误:

在我看来,当由于post-receive执行钩子时git push,正在使用错误的红宝石(1.8.7,大概是系统的?)。请注意,PATH每个实例中的变量都不同。

如果这就是问题所在,那就是我能想到的。我该如何解决?

0 投票
2 回答
5093 浏览

git - 让 Github 在收到更新时推送到远程服务器

让 Github 自动将任何更新推送到远程服务器的设置是什么?

这对于在 Github 上维护代码库以及让网站运行该代码库非常有用。

  1. 我在自己的电脑上有我的仓库,这是我工作的地方。

  2. 我在本地存储库中提交更改,并将它们推送到我的 Github 存储库。

  3. 我希望我的 Github 存储库将这些更改推送到我的远程服务器。

我整天都在研究,使用“钩子”听起来很合理。也许在 Github 上使用“接收后”挂钩,然后将推送命令运行到我的远程服务器。

有什么建议么?

0 投票
2 回答
1603 浏览

git - git trac 接收后挂钩

我最近将 trac 从 0.10 升级到 1.0,并成功地将 trac 实例链接到 svn 和 git 存储库。

但是,在设置 git 存储库 post-receive 挂钩期间,我遇到了一些主要问题。

我在这里尝试了插件脚本:

http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts

但这不起作用,因为 git post receive 似乎没有在标准输入中提供 $OLD_REV 和 $NEW_REV 。

wiki还提到,一个只需要调用以下

所以我在git的post-receive脚本中放了以下内容,

它在大多数情况下都有效。但是,如果用户尝试一次推送多个提交,则git rev-parse HEAD只会检索最后一次提交 ID(而不是属于最后一次推送的提交 ID 列表),因此 Trac 会丢失一些提交(来自node_changetrac 表D b)。

我想知道是否有一些方法可以获取最新 git push 的所有提交 ID?或者我实际上在这里忽略了一些东西,还有一些更简单的方法可以做到这一点?

谢谢。

0 投票
2 回答
438 浏览

git - 分支 git 用于辅助项目

我是一个 git 新手,所以请原谅我缺乏知识,但我什至不确定要在谷歌搜索什么问题。

我有一个大型项目,只是我正在本地开发并使用 git 推送到远程网络服务器。服务器有一个 post-receive 钩子,它复制文件以使用此命令提供服务:

这几个月来一直运行良好。

现在,我想构建一个衍生产品并在我的 webserver 上运行新分支。我还希望能够在衍生分支和主分支之间来回切换并覆盖服务器的代码,这样我就可以只用一台服务器同时开发两个独立的网站。首先,我创建一个新的 git 分支:

我添加了一行并做了一个提交:

现在,我正在尝试推送到远程分支。这不起作用

此命令按预期推送,但不会通过 Web 服务器复制文件

将其设置为推送给主人似乎没有帮助:

[由@Klas Mellbourn 编辑] 这是 git 1.7 的语法。. 如果你有 git 1.8. ,语法为:

我知道我在这里遗漏了一些重要的关键概念。我的猜测是,正如预期的那样,有两个远程存储库,但我需要设置其他东西从衍生存储库复制到网络服务器。

我想我可能需要编辑远程存储库中的 HEAD 文件?这目前包含:

0 投票
0 回答
221 浏览

git - Git Post-receive 部署很慢

我们正在用我们的网站测试 git 版本控制。当前设置在网络共享驱动器 /g/ 上有两个裸存储库(一个用于 Intranet,一个用于 Internet)。当推送到这个存储库时,我希望网站自动签出到 /x/ 的网络服务器。根据这里几个博客和问题的建议,我设置了一个post-receive hook,如下:

这对于部署每个存储库的主分支非常有效。每次部署可能需要 5-10 秒。但是,我们还希望有一个自动签出到 /y/ 的开发服务器的 dev 分支。我修改后的钩子看起来像这样:

这是非常有问题的,因为现在推送大约需要 15 分钟。问题似乎是每个分支的整个工作目录都被重写了,而不是仅仅更新任何已更改的文件。即使添加了一个条件来检查哪个分支被推送并且只签出那个分支,如果我推送了之前推送的分支以外的分支,推送仍然需要大约 10 分钟。显然这是不可接受的。

我目前的尝试在每台服务器上都有 2 个存储库(一个 Intranet 和一个 Internet)。我现在运行的钩子如下所示:

这个钩子仍然比我认为它应该运行的时间更长(几乎 2 分钟,而我自己运行一个 repos 大约需要 4 秒)。我的任何一个实现都有问题吗?还是有另一种方法可以解决这个问题?

编辑:我想知道在 git bash shell 中使用已安装的驱动器是否可能是问题所在?

0 投票
2 回答
1079 浏览

git - 如何在 post-receive 钩子中修改 git commit 消息

我需要在 post-receive 钩子中修改提交消息(添加错误跟踪 id)。有没有一种优雅的方式来做到这一点,还是我必须编写“git rebase -i”的东西?