标签: pre-commit-hook

subversion预提交钩子,需要用户在控制台中键入'y/n'?

我有一个预提交钩子工作,它检查消息是否为空并且至少需要x个字符.我们正在使用JIRA来跟踪问题,并在提交消息日志中"标记"我们的问题.但是,并非每个提交都与JIRA问题有关.

所以,我认为它可以检查消息是否包含我们的JIRA关键字,如果没有,则询问用户是否仍然要提交,如果他们键入'y'然后提交,如果他们键入'n'然后不提交.

是否有可能以这种方式获得用户输入/键盘反馈?

注意:我使用的是Windows和TortoiseSVN

svn hook pre-commit-hook svn-hooks

2
推荐指数
1
解决办法
556
查看次数

在预提交钩子中 - 如何访问/比较当前和以前版本的文件

我正在尝试添加到我们现有的预提交 SVN 挂钩,以便它检查并阻止特定目录中文件的文件大小增加。

我编写了一个 python 脚本来比较两个文件大小,它以两个文件作为参数并使用 sys.exit(0) 或 (1) 返回结果,这部分似乎工作正常。

我的问题是在从批处理文件调用python脚本时,如何引用每个文件的新提交和以前的版本?现有的代码对我来说是新的,还有一堆 %REPOS%、%TXN%s 等等,我不知道如何去使用它们。有没有一种简单、标准的方法来做到这一点?

它还包含使用 svnlook changed 循环遍历已更改文件的代码,因此该部分不应该成为问题。

非常感谢

python svn pre-commit-hook

2
推荐指数
1
解决办法
2654
查看次数

grep一行中有多个字符串

我需要检查"添加/更改/修复/删除"字符串是否在提交日志消息中.我正在编写一个svn precommit钩子,并且预期的提交注释应该在消息中包含这4个字符串中的一个.

我使用的代码如下

REPOS=$1
TXN=$2

SVN="/usr/bin/svn";
SVNLOOK="/usr/bin/svnlook";

$SVNLOOK log "$REPOS" -t "$TXN" | \
grep "[a-zA-Z0-9]" > /dev/null

GREP_STATUS=$?
if [ $GREP_STATUS -ne 0 ]
then
  "${ECHO}" "No Log comments present" >> "${LOG}"
   echo "Your commit has been blocked because you didn't give any log message" 1>&2
   echo "Please write a log message describing the purpose of your changes and" 1>&2
   echo "then try committing again. -- Thank you" 1>&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,

$SVNLOOK log "$REPOS" -t "$TXN"
Run Code Online (Sandbox Code Playgroud)

将给我用户输入的提交消息.现在我必须检查消息中是否存在任何字符串"已添加,已更改,已修复,已删除".那是, …

unix shell grep pre-commit-hook

2
推荐指数
2
解决办法
3万
查看次数

如何使 Git 预提交行为取决于提交消息?

我知道要让 git 在提交之前检查提交消息,您可以实施hooks/commit-msg. 但现在想象一下您想让hooks/pre-commit脚本根据提交消息表现不同的情况?

例如(在非常宽松的环境中)您可能想检查[nocheck]提交消息中是否有一个始终让提交检查通过的标签。

或者 - 在更严格的环境中 - 您可能希望对每个文件进行注释(因此单独列出)。

或者您可能想根据相关文件检查票证 ID。

ETC...

除了在 commit-msg 中进行实际检查(这似乎违反直觉)之外,还有其他方法可以实现此目的吗?

git commit-message commit pre-commit-hook

2
推荐指数
1
解决办法
504
查看次数

从预提交挂钩中排除某些文件类型

我想要一个预提交 git 钩子来检查(如果可能的话,自动删除)尾随空格。

\n

让 git 在提交之前自动删除尾随空格中,我找到了一个 github 页面的链接,其中实现了这样的钩子。这工作正常,但正如该页面上的@VonC\n提到的

\n
\n

由于该挂钩获取每个文件的文件名,因此我建议\n小心某些类型的文件:您不想删除\n.md(markdown)文件中的尾随空格!\xe2\x80\x93 VonC

\n
\n

再往下

\n
\n

我宁愿让钩子能够检测 .md 文件而不删除空格,而不是要求最终用户在 git 提交上添加 --no-verify 选项。\xe2\x80\x93 VonC

\n
\n

据我所知,没有提到解决方案。

\n

由于我在项目中使用 .md 文件并故意使用尾随空格,因此这对我来说是一个问题。
\n解决方案可能很简单,但我对编写脚本所用的语言没有经验(目前也没有兴趣学习它)。

\n

这是脚本(github 的副本):

\n
#!/bin/bash\n#\n\n# A git hook script to find and fix trailing whitespace\n# in your commits. Bypass it with the --no-verify option\n# to git-commit\n#\n# usage: make a soft link to this file, e.g., ln -s ~/config/pre-commit.git.sh ~/some_project/.git/hooks/pre-commit\n\n# detect platform\nplatform="win"\nuname_result=`uname`\nif [ …
Run Code Online (Sandbox Code Playgroud)

git bash pre-commit-hook

2
推荐指数
1
解决办法
5438
查看次数

如何在我想要提交的文件上运行更漂亮?

使用Husky,我已经设置了package.json一个precommit钩子,以便在每次提交之前使用Prettier格式化我的JavaScript代码:

{
  "name": "prettier-demo",
  "scripts": {
    "precommit": "prettier --write **/*.js && git add ."
  },
  "devDependencies": {
    "husky": "^0.14.3",
    "prettier": "^1.8.2"
  }
}
Run Code Online (Sandbox Code Playgroud)

这很好,但有两个缺点:

  1. 如果我有一个包含数千个JavaScript文件的大型项目,我必须等待Prettier处理所有这些文件,即使只有少数文件已经更改; 这可能需要很长时间,并且在完成每次提交时都会很快就会紧张

  2. 有时我想只提交几个文件进行提交,将其他更改留在提交之外; 因为我git add .在运行Prettier后做了一切,我的所有更改总是会在提交中结束

如何在每次提交之前运行Prettier 只对已经上传的文件,忽略未分级或未更改的文件?

javascript git code-formatting pre-commit-hook prettier

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

如何正确配置我的预提交和预推送钩子?

我有一个简单的 python 项目,目前只有一个文件。它存在于我的项目的 static/cgi-bin 文件夹中。目前,在我的目录的底部,我有一个 .pre-commit-config.yaml 文件,我还没有触及 .git/hooks 文件夹中的文件。我想创建 pre-commit 和 pre-push 钩子,但我似乎无法让它工作。

当我尝试提交时,会发生以下情况:

isort................................................(no files to check)Skipped
flake8...............................................(no files to check)Skipped
black................................................(no files to check)Skipped
Run Code Online (Sandbox Code Playgroud)

当我尝试推送时,出现以下错误:

pytest...................................................................Failed
hookid: pytest

============================= test session starts ==============================
platform darwin -- Python 2.7.15, pytest-4.0.2, py-1.7.0, pluggy-0.8.0
rootdir: /Users/.../deployment, inifile:
collected 0 items
========================= no tests ran in 0.01 seconds =========================
error: failed to push some refs to '...git'
Run Code Online (Sandbox Code Playgroud)

请注意,部署是我正在工作的文件夹。

我在 yaml 文件中的代码是:

repos:
-   repo: local
    hooks:
    - id: isort
      name: isort
      entry: …
Run Code Online (Sandbox Code Playgroud)

python pre-commit-hook pre-commit.com

2
推荐指数
1
解决办法
5216
查看次数

“ git commit”的异常行为。预提交挂钩修改暂存文件时

以我的经验,git commit -a它的行为等同于git commit .但是,最近,我创建了一个pre-commit钩子,该钩子自动格式化我的源代码,现在git commit .有一些意想不到的副作用:提交的文件最终在工作目录和目录中被修改。提交命令完成后的索引。不会发生这种情况git commit -a。我试图了解运行时在幕后git commit .发生的情况,这导致这种情况发生,并查看是否有办法在我的预提交钩子脚本中正确处理它。

预提交挂钩:

git_toplevel=$(git rev-parse --show-toplevel)

git --no-pager diff -z --cached --name-only --diff-filter=ACMRT | $git_toplevel/meta/reformat.bash -s files
git --no-pager diff -z --name-only --diff-filter=ACMRT | xargs -0 --no-run-if-empty git add
Run Code Online (Sandbox Code Playgroud)

当前使用的是git版本1.8.3.1,但在最新版本中却看到了相同的行为。

这是在行的开头添加一个简单空格的命令序列:

[]$ git status
# On branch eroller/format-clean-filter
# Your branch is ahead of 'origin/eroller/format-clean-filter' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes not …
Run Code Online (Sandbox Code Playgroud)

git code-formatting pre-commit-hook git-commit

2
推荐指数
1
解决办法
61
查看次数

如果检测到匹配的文件,则运行一次 pre-commit.com 挂钩(不是针对每个文件)

我有一个从源文件生成文档文件的钩子,用pre-commit.com 框架构建。在该钩子中调用的函数没有文件参数,因此它只是为目录中的所有源文件创建文档。钩子是一个system挂钩,即只是一个 bash 脚本,我在其中调用该函数来创建文档。然而,在 pre-commit.com 框架中,文件被传递给钩子,逻辑是在每个文件上执行一个钩子,这在大多数情况下是有意义的(例如分别对每个文件进行 lint)。所以我的问题是:如果有任何源文件更改,我如何确保文档挂钩运行一次,而不是在单个文件上多次(并行或顺序)运行?具体来说,我的钩子正在生成 R 文档,roxygen2::roxygenize()可以在这里找到。

git pre-commit-hook pre-commit.com

2
推荐指数
1
解决办法
1207
查看次数

如何在预提交挂钩中运行 django 测试

我被困在如何简单地在预提交挂钩中运行我的 django 测试。我最终会将它们置于推送阶段,但我只是想让它们先运行。它试图循环我的测试,但测试对象是 NoneType 对象。在这个钩子之外工作得很好。我确信这对某人来说是显而易见的。谢谢。

\n

这是我的测试钩子。

\n
repo: local\n    hooks:\n    -   id: tests\n        name: run tests\n        always_run: true\n        entry: python manage.py test\n        language: system\n        types: [python]\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:我后来意识到对提交或推送运行后端测试不是一个好主意。应该只运行钩子来清理 git 钩子上的代码。

\n

像这样定期运行后端测试\xe2\x80\x99并不是一个好主意,因为随着你的应用程序变得越来越大,要运行的测试数量也会越来越大,并且你会减慢你的开发速度。如果您的测试与我的类似,您将在测试数据库中创建许多对象,这些对象也需要销毁。\n相反,您应该在钩子之外定期运行测试,最后让它们在部署管道中运行。

\n

python django pre-commit-hook

2
推荐指数
1
解决办法
2303
查看次数