问题标签 [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.
git - 防止推送到某些文件中包含选项卡的 git(例如 *.cpp、*.h、CMakeLists.txt)
我希望我的远程存储库拒绝任何包含包含选项卡的文件的推送,但前提是该文件属于某个类(基于文件名)。那可能吗?
我看了一点update hook
in githooks,我认为这是正确的。
简而言之,如果出现以下情况,则应拒绝推送:
- 有一个列出类型的文件 (
*.cpp
,*.h
,CMakeLists.txt
) - 包含一个或多个制表符。
git - 使用更新后挂钩在另一个 repo 上执行 'git pull' 时得到“致命:不是 git 存储库:'。'”
我是 git 新手,所以如果我在这里滥用术语,我会道歉(并请纠正我),但我会尽力而为。
我正在尝试在 Web 服务器上设置一个裸 git repo(集线器)和一个开发站点工作副本(prime)。在这篇文章之后,我尝试对其进行模式化。我希望每当推送到集线器存储库时更新开发工作副本。我的印象是,正确的钩子是post-update
,我这样创建的:
更新
当我将更改从本地存储库推送到裸集线器时,我从更新后脚本中获得以下输出:
但是,如果我以用户“站点”的身份通过 SSH 连接到服务器并手动执行此脚本,则效果很好关于此挂钩或脚本可能出现什么问题的任何想法?
git - 验证提交是否存在
如何验证当前分支中是否存在具有给定 sha 的提交?
解析输出的方法有很多,但我需要返回布尔值的最佳方法(用于 bash 脚本)。
例如
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 更新:
- 这是一些正在进行的工作的要点
- 另一个想法是使用“git push”包装器来防止客户端的琐碎合并
2010 年 12 月 15 日星期三 18:34:52 UTC 更新:
- 阿迪米特鲁克很近!只有一种情况仍未解决:非平凡的合并必须仍然有效。
- 有一个相当完整的测试套件可用,检查一下。
- 我在(?) git mailing list上寻求帮助。
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-hook和git-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”命令的控制台消息在我看来是一样的。
git - git post-receive hook 更新多个服务器
我正在使用git post-receive 挂钩从三个服务器(开发、测试和生产)上的三个分支(主分支、暂存分支和稳定分支)部署 Web 应用程序的版本。分支和服务器之间的配对目前在脚本中是硬编码的。但是我想取消这个限制,让这个钩子可以管理无限数量的分支。可以通过以下方式完成:
- 将所有每个分支的配置选项移动到一些单独的文件中,例如
.git/???/<branch_name>
- 主脚本将检查此类文件是否可用于每个分支,获取它,然后使用该文件中的配置参数部署在远程服务器上。
但是我不知道.git
我可以将这些文件放在目录中的确切位置。或者也许有更好的解决方案?
git - Git 全局钩子自定义
我打算编写一些 git 钩子作为一个项目,将用户的操作记录在数据库中。然后可以使用该数据库查询他的所有活动。我要记录的操作是
- 犯罪
- 拉
- 推
- 合并
- 分支
我想把它打包在可以通过包管理器安装的发行版中。Git 允许通过在其中放置任何这样的全局钩子$PREFIX/share/templates/hooks
它目前有一些被禁用的钩子(.sample
附加到它们的名称后)。创建新存储库时,会将这些挂钩复制.git
到存储库的文件夹中
现在,如果用户安装了这些钩子和钩子的软件包,post-commit
并且post-update
已经启用。在这种情况下,脚本文件将被覆盖!这听起来很糟糕
这意味着 git 每个操作只有一个挂钩文件。如果我需要为一个动作保留三个钩子,这意味着它是不可能的。这意味着从包管理器自动安装可能会引入冲突。
现在想想我们打包了钩子来覆盖默认启用的文件。如果用户想在这些文件中添加更多操作,然后决定卸载我的包,那么他的自定义命令也会消失吗?
我认为 git 在这方面非常聪明,但我错了:(
需要有一个名为post-commit
andpost-update
或任何操作的文件夹,并且 git 应该运行该文件夹内的所有脚本。我仍在寻找一种方法来处理当前的情况。
git - 在 git post-commit 钩子中,如何获取已更改文件的列表?
试图弄清楚 Git 提交后挂钩中的提交花费了多长时间。
我有一个提交后的 git 钩子,它通过 API 提交有关提交的信息。我想做的是弄清楚提交花了多长时间。大致。
我的假设是,可以通过找到所涉及文件的所有创建时间和修改时间的最小值并与最大创建和修改时间进行比较来计算出一个粗略的值。
我可以在 Python 脚本中轻松地做到这一点。如果有人告诉我这是文件“foo.txt”、“bar.txt”和“path/bla.txt”,我可以根据这些文件在脚本中快速进行一些算术运算。
那么,在 git post-commit 钩子中,如何获取已更改文件的列表?
git - 如何正确使用 post-receive hook?
我的目录结构是:
~/parent.git/.git/hooks/post-receive
接收后挂钩如下所示:
当我推入 parent.git 时,脚本不会运行。我无法弄清楚这个问题,因为互联网上的每一点都说这应该有效。
我chmod'd post-receive,所以我知道这不是问题。任何帮助深表感谢。
git - 创建 Git 标签时自动运行 Git 钩子
添加新的 Git 标签时是否可以执行 Git 钩子?因为我想自动将新的 Git 标记名称写入文本文件。你知道如何做到这一点吗?