问题标签 [githooks]

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 投票
3 回答
5797 浏览

git - 防止推送到某些文件中包含选项卡的 git(例如 *.cpp、*.h、CMakeLists.txt)

我希望我的远程存储库拒绝任何包含包含选项卡的文件的推送,但前提是该文件属于某个类(基于文件名)。那可能吗?
我看了一点update hookin githooks,我认为这是正确的。

简而言之,如果出现以下情况,则应拒绝推送:

  1. 有一个列出类型的文件 ( *.cpp, *.h, CMakeLists.txt)
  2. 包含一个或多个制表符。
0 投票
5 回答
23143 浏览

git - 使用更新后挂钩在另一个 repo 上执行 'git pull' 时得到“致命:不是 git 存储库:'。'”

我是 git 新手,所以如果我在这里滥用术语,我会道歉(并请纠正我),但我会尽力而为。

我正在尝试在 Web 服务器上设置一个裸 git repo(集线器)和一个开发站点工作副本(prime)。在这篇文章之后,我尝试对其进行模式化。我希望每当推送到集线器存储库时更新开发工作副本。我的印象是,正确的钩子是post-update,我这样创建的:

更新

当我将更改从本地存储库推送到裸集线器时,我从更新后脚本中获得以下输出:

但是,如果我以用户“站点”的身份通过 SSH 连接到服务器并手动执行此脚本,则效果很好关于此挂钩或脚本可能出现什么问题的任何想法?

0 投票
6 回答
10569 浏览

git - 验证提交是否存在

如何验证当前分支中是否存在具有给定 sha 的提交?

解析输出的方法有很多,但我需要返回布尔值的最佳方法(用于 bash 脚本)。

例如

0 投票
2 回答
5520 浏览

git - 阻止将琐碎合并推送到 git 服务器

不久前,我要求我们的开发人员在 push 之前使用 rebase 而不是 merge。消除琐碎的合并使得更容易遵循提交图(即:gitk、git log)。

有时人们仍然不小心做了一些琐碎的合并,然后推送。有没有人有方便或有技巧来编写阻止琐碎合并的服务器端钩子?

通过“琐碎的合并”,我的意思是没有冲突的合并。这是一个示例这里是对 git 中的简单合并的更好解释

2010 年 11 月 10 日星期三 01:26:41 UTC 更新:很棒的评论,大家!谢谢你。

  • 考虑以下几点:我真正要求人们做的是:
    • 如果git pull --ff-only失败,做git pull --rebase而不是git pull
  • git.git 只有一两个提交者,对吧?从理论上讲,遵循提交图应该很容易,但对我来说它看起来很混乱。

2010 年 11 月 11 日星期四 23:49:35 UTC 更新

2010 年 12 月 15 日星期三 18:34:52 UTC 更新

0 投票
1 回答
4265 浏览

git - 从命令行可以,但钩子(git)

我想在有人推送到远程仓库后自动更新我的 redmine 项目存储库。目前 redmine 中的杜松子酒已经启动并且工作正常。但是在使用钩子自动更新后,我进入The entry or revision was not found in the repository.了 redmine。

要在 redime 中设置 git,我遵循redmine wiki,因此 repo 是通过git clone --bare

要更新 redmine 的 git 存储库,我使用它cd /srv/www/redmine.domain.com/git_repositories/linode.git && git fetch && git reset --soft refs/remotes/origin/master

  • git如果在用户下从命令行运行,则手动更新可以正常工作

手动执行时的屏幕截图是

  • post-receive运行表单钩子时同样无法正常工作(请参阅上面的错误)。在同一用户(git)下运行。钩子的第一行是#!/bin/sh

配置: ubuntu 上的 git (1.7.0.4) + gitolite (1.5.7)

我检查了 GIT_DIR 系统变量字节命令 SET remote: /srv/www/redmine.domain.com/git_repositories/linode.git[K remote: GIT_DIR='.'[K

我什至试图git path通过

但没有任何帮助。

钩子的结果

我从call-git-pull-from-a-git-post-update-hookgit-post-receive-hook-with-git-pull-failed-to-find-a-valid-git-directory尝试了一些提示但没有任何帮助

更新

如果我尝试

我得到这个 + redmine 存储库没有被触及并且可以从 redmine 访问

更新2

我发现如果我git fetch从钩子然后git reset --soft refs/remotes/origin/master从命令行它不起作用。我在 redmine 中收到上述错误。我git fetch从命令行执行,然后一切正常。来自钩子和命令行“git fetch”命令的控制台消息在我看来是一样的。

0 投票
1 回答
1339 浏览

git - git post-receive hook 更新多个服务器

我正在使用git post-receive 挂钩从三个服务器(开发、测试和生产)上的三个分支(主分支、暂存分支和稳定分支)部署 Web 应用程序的版本。分支和服务器之间的配对目前在脚本中是硬编码的。但是我想取消这个限制,让这个钩子可以管理无限数量的分支。可以通过以下方式完成:

  • 将所有每个分支的配置选项移动到一些单独的文件中,例如.git/???/<branch_name>
  • 主脚本将检查此类文件是否可用于每个分支,获取它,然后使用该文件中的配置参数部署在远程服务器上。

但是我不知道.git我可以将这些文件放在目录中的确切位置。或者也许有更好的解决方案?

0 投票
1 回答
1274 浏览

git - Git 全局钩子自定义

我打算编写一些 git 钩子作为一个项目,将用户的操作记录在数据库中。然后可以使用该数据库查询他的所有活动。我要记录的操作是

  • 犯罪
  • 合并
  • 分支

我想把它打包在可以通过包管理器安装的发行版中。Git 允许通过在其中放置任何这样的全局钩子$PREFIX/share/templates/hooks

它目前有一些被禁用的钩子(.sample附加到它们的名称后)。创建新存储库时,会将这些挂钩复制.git到存储库的文件夹中

现在,如果用户安装了这些钩子和钩子的软件包,post-commit并且post-update已经启用。在这种情况下,脚本文件将被覆盖!这听起来很糟糕

这意味着 git 每个操作只有一个挂钩文件。如果我需要为一个动作保留三个钩子,这意味着它是不可能的。这意味着从包管理器自动安装可能会引入冲突。

现在想想我们打包了钩子来覆盖默认启用的文件。如果用户想在这些文件中添加更多操作,然后决定卸载我的包,那么他的自定义命令也会消失吗?

我认为 git 在这方面非常聪明,但我错了:(

需要有一个名为post-commitandpost-update或任何操作的文件夹,并且 git 应该运行该文件夹内的所有脚本。我仍在寻找一种方法来处理当前的情况。

0 投票
2 回答
5315 浏览

git - 在 git post-commit 钩子中,如何获取已更改文件的列表?

试图弄清楚 Git 提交后挂钩中的提交花费了多长时间。

我有一个提交后的 git 钩子,它通过 API 提交有关提交的信息。我想做的是弄清楚提交花了多长时间。大致。

我的假设是,可以通过找到所涉及文件的所有创建时间和修改时间的最小值并与最大创建和修改时间进行比较来计算出一个粗略的值。

我可以在 Python 脚本中轻松地做到这一点。如果有人告诉我这是文件“foo.txt”、“bar.txt”和“path/bla.txt”,我可以根据这些文件在脚本中快速进行一些算术运算。

那么,在 git post-commit 钩子中,如何获取已更改文件的列表?

0 投票
2 回答
1446 浏览

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

我的目录结构是:

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

接收后挂钩如下所示:

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

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

0 投票
1 回答
2675 浏览

git - 创建 Git 标签时自动运行 Git 钩子

添加新的 Git 标签时是否可以执行 Git 钩子?因为我想自动将新的 Git 标记名称写入文本文件。你知道如何做到这一点吗?