我有一个centos6 linux服务器托管svn(版本1.6.11(r934486))repo,可通过Apache通过DAV访问.我使用windows tortoise-svn客户端1.7.12来访问repo.
我有一个非常简单的测试预提交钩子,总是会失败.
echo "this is a test"
exit 1
Run Code Online (Sandbox Code Playgroud)
尝试失败的尝试
Sending content: D:\code\foo\test.c
Error: Commit failed (details follow):
Error: Commit blocked by pre-commit hook (exit code 1) with no output.
Completed!:
Run Code Online (Sandbox Code Playgroud)
我期待在我的客户端上看到"这是一个测试",但是我得到了预先提交钩子而没有输出.hooks/pre-commit是可执行的,并且当在linux服务器上手动运行时回显预期的输出.
关于我缺少什么的任何指示?
我正在使用 Windows 版 Git(和 TortoiseGit)。
我的目标是防止提交修改/添加至少一个非 UTF-8 文件。
枚举修改/添加的文件:我找到了以下代码
{ git diff --name-only ; git diff --name-only --staged ; }
Run Code Online (Sandbox Code Playgroud)
这是最好的(正确且最简洁的)方法吗?
搜索非 UTF-8 文件:我找到了以下代码
{ git diff --name-only ; git diff --name-only --staged ; } | xargs -I {} bash -c "iconv -f utf-8 -t utf-16 {} &>/dev/null || echo {} - is non-UTF8!"
Run Code Online (Sandbox Code Playgroud)
如果我在存储库根文件夹中启动 Git Bash - 它会起作用(显示每个非 UTF-8 文件)。所以我将上面的代码重命名.git/hooks/pre-commit.sample为并复制粘贴。.git/hooks/pre-commit提交更改后,TortoiseGit 提交 gui 窗口中不会显示任何特殊内容。所以看起来预提交挂钩无法正常工作。
如果存在任何非 UTF-8 文件,则拒绝提交:显示所有非 UTP-8 文件后,应拒绝提交。但我不知道如何做到这一点(显示一些退出代码 - 但如何?)。
因此,我们将不胜感激任何帮助。
我希望google-java-formatter在我的几个项目中进行安装。
但是,在提交代码时,我希望CI管道首先检查格式是否已完成。
我知道我可以使用.gitlab-ci.yml根目录中的文件来完成此操作,但是我非常不确定如何实现检查所有文件格式是否正确的目标,任何人都可以帮助我解决如何执行此操作的google-java-formatter问题gitlab。
我正在尝试使用预提交挂钩运行脚本。这是我的脚本:
构建脚本.sh
#! /bin/bash
echo "Stage 1: Preparing CMake configuration"
Run Code Online (Sandbox Code Playgroud)
.pre-commit-config.yaml
fail_fast: false
- repo: local
hooks:
- id: Generate build
name: Generate build
entry: sh build_script.sh
language: system
always_run: true
pass_filenames: false
Run Code Online (Sandbox Code Playgroud)
我可以看到,当我运行 command 时git commit -m "message",挂钩调用脚本Generate build并将通过。但是,我在终端上看不到回声。我想看看这条消息,"Stage 1: Preparing CMake configuration"。这个设置有什么问题吗?
我正在努力将环境变量使用到预提交挂钩配置的参数部分
以下是一个示例 spinet 来展示我正在尝试做的事情
- repo: https://github.com/returntocorp/semgrep
rev: "v0.1.2"
hooks:
- id: semgrep
name: semgrep my_custom_rule
args:
[
"--config",
"https://PRIVATE-TOKEN:{$TOKEN}@gitlab.com/api/proj/packages/test-rule.yml",
"--error",
]
Run Code Online (Sandbox Code Playgroud)
我已经将 TOKEN 的值设置到环境变量中。但仍在处理中,URL 被视为 https://PRIVATE-TOKEN:{$TOKEN}@gitlab.com/api/proj/packages/test-rule.yml 而不是实际的令牌值。出于安全原因,我想避免将实际令牌放入配置中。
我为我的一个项目设置了一个预提交插件。
目前,.pre-commit-config.yaml配置文件位于项目的根目录下(如官方文档https://pre-commit.com/#usage所示)。
是否可以将其移至单独的文件夹并以某种方式调整以从那里读取?
当前状态(命令输出dir):
.pre-commit-config.yaml
.pylintrc
ci
commons
doc
...
Run Code Online (Sandbox Code Playgroud)
我想要什么(或类似的):
.pylintrc
ci
commons
doc
precommit\.pre-commit-config.yaml
...
Run Code Online (Sandbox Code Playgroud) 我已经从头开始设置了一个SVN存储库,并且我已经使用SVN复制命令成功标记了我的一些版本.
我使用了SSPI auth插件来实现apache,因此我们的开发人员只需使用他们的网络凭据来访问服务器,一切都运行良好.
我创建了一个AuthZ授权文件,将我们的开发人员添加到文件中的组,并授予他们对root的写入权限.我还授予匿名用户对root的只读访问权限.
然后我用以下命令锁定/ svn /目录:Require-group"CORP\CKAN0BlahBlah"
这有效地将安全组中的新开发人员限制为只读访问,直到他们通过aAuthZ配置文件被授予访问权限.
现在,我有几个问题:
什么是阻止用户将更改提交到任何"标签"目录的正确方法(荣誉系统除外)?
是否可以使用SSPI将组成员传递给AuthZ,而不是在配置文件中单独列出成员?
我知道运行git-diff和其他工具可以识别存储库中的更改,但是当我进行部分提交时,我只需要将提交的文件(而不是触及的整个文件集)传递给预提交钩.
例如,我修改了三个文件并只提交了两个,我希望预提交钩子知道这两个文件的名称.
git status --porcelain
M A.c
M B.c
M C.h
Run Code Online (Sandbox Code Playgroud)
然后我执行:
git commit -m "two files only" A.c B.c
Run Code Online (Sandbox Code Playgroud)
预提交挂钩如何才能获取两个文件的列表?
我mvn java-formatter:format在预提交挂钩中安装了任务.此任务将格式化java源代码.
pushd src/ > /dev/null
mvn java-formatter:format
RETVAL=$?
if (($RETVAL == 1)); then
exit 1
fi
popd > /dev/null
Run Code Online (Sandbox Code Playgroud)
我需要附加新格式化的源文件来提交.我怎样才能做到这一点?
我安装了一个git precommit钩子,有时我想用--no-verifyflag 提交。我知道如何在命令行中执行此操作,但我想在TortoiseGit中执行此操作(因为Windows中的命令行非常差)。我怎样才能做到这一点?我通读了https://tortoisegit.org/docs/tortoisegit/tgit-dug-commit.html,但找不到任何有用的信息。
pre-commit-hook ×10
git ×5
pre-commit ×3
bash ×2
githooks ×2
svn ×2
windows ×2
commit ×1
echo ×1
git-bash ×1
gitlab-ci ×1
linter ×1
pipeline ×1
semgrep ×1
tortoisegit ×1