我有一个预提交钩子工作,它检查消息是否为空并且至少需要x个字符.我们正在使用JIRA来跟踪问题,并在提交消息日志中"标记"我们的问题.但是,并非每个提交都与JIRA问题有关.
所以,我认为它可以检查消息是否包含我们的JIRA关键字,如果没有,则询问用户是否仍然要提交,如果他们键入'y'然后提交,如果他们键入'n'然后不提交.
是否有可能以这种方式获得用户输入/键盘反馈?
注意:我使用的是Windows和TortoiseSVN
我正在尝试添加到我们现有的预提交 SVN 挂钩,以便它检查并阻止特定目录中文件的文件大小增加。
我编写了一个 python 脚本来比较两个文件大小,它以两个文件作为参数并使用 sys.exit(0) 或 (1) 返回结果,这部分似乎工作正常。
我的问题是在从批处理文件调用python脚本时,如何引用每个文件的新提交和以前的版本?现有的代码对我来说是新的,还有一堆 %REPOS%、%TXN%s 等等,我不知道如何去使用它们。有没有一种简单、标准的方法来做到这一点?
它还包含使用 svnlook changed 循环遍历已更改文件的代码,因此该部分不应该成为问题。
非常感谢
我需要检查"添加/更改/修复/删除"字符串是否在提交日志消息中.我正在编写一个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)
将给我用户输入的提交消息.现在我必须检查消息中是否存在任何字符串"已添加,已更改,已修复,已删除".那是, …
我知道要让 git 在提交之前检查提交消息,您可以实施hooks/commit-msg. 但现在想象一下您想让hooks/pre-commit脚本根据提交消息表现不同的情况?
例如(在非常宽松的环境中)您可能想检查[nocheck]提交消息中是否有一个始终让提交检查通过的标签。
或者 - 在更严格的环境中 - 您可能希望对每个文件进行注释(因此单独列出)。
或者您可能想根据相关文件检查票证 ID。
ETC...
除了在 commit-msg 中进行实际检查(这似乎违反直觉)之外,还有其他方法可以实现此目的吗?
我想要一个预提交 git 钩子来检查(如果可能的话,自动删除)尾随空格。
\n在让 git 在提交之前自动删除尾随空格中,我找到了一个 github 页面的链接,其中实现了这样的钩子。这工作正常,但正如该页面上的@VonC\n提到的
\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由于我在项目中使用 .md 文件并故意使用尾随空格,因此这对我来说是一个问题。
\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) 使用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)
这很好,但有两个缺点:
如果我有一个包含数千个JavaScript文件的大型项目,我必须等待Prettier处理所有这些文件,即使只有少数文件已经更改; 这可能需要很长时间,并且在完成每次提交时都会很快就会紧张
有时我想只提交几个文件进行提交,将其他更改留在提交之外; 因为我git add .在运行Prettier后做了一切,我的所有更改总是会在提交中结束
如何在每次提交之前运行Prettier 只对已经上传的文件,忽略未分级或未更改的文件?
我有一个简单的 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) 以我的经验,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) 我有一个从源文件生成文档文件的钩子,用pre-commit.com 框架构建。在该钩子中调用的函数没有文件参数,因此它只是为目录中的所有源文件创建文档。钩子是一个system挂钩,即只是一个 bash 脚本,我在其中调用该函数来创建文档。然而,在 pre-commit.com 框架中,文件被传递给钩子,逻辑是在每个文件上执行一个钩子,这在大多数情况下是有意义的(例如分别对每个文件进行 lint)。所以我的问题是:如果有任何源文件更改,我如何确保文档挂钩运行一次,而不是在单个文件上多次(并行或顺序)运行?具体来说,我的钩子正在生成 R 文档,roxygen2::roxygenize()可以在这里找到。
我被困在如何简单地在预提交挂钩中运行我的 django 测试。我最终会将它们置于推送阶段,但我只是想让它们先运行。它试图循环我的测试,但测试对象是 NoneType 对象。在这个钩子之外工作得很好。我确信这对某人来说是显而易见的。谢谢。
\n这是我的测试钩子。
\nrepo: 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]\nRun Code Online (Sandbox Code Playgroud)\n编辑:我后来意识到对提交或推送运行后端测试不是一个好主意。应该只运行钩子来清理 git 钩子上的代码。
\n像这样定期运行后端测试\xe2\x80\x99并不是一个好主意,因为随着你的应用程序变得越来越大,要运行的测试数量也会越来越大,并且你会减慢你的开发速度。如果您的测试与我的类似,您将在测试数据库中创建许多对象,这些对象也需要销毁。\n相反,您应该在钩子之外定期运行测试,最后让它们在部署管道中运行。
\npre-commit-hook ×10
git ×5
python ×3
svn ×2
bash ×1
commit ×1
django ×1
git-commit ×1
grep ×1
hook ×1
javascript ×1
prettier ×1
shell ×1
svn-hooks ×1
unix ×1