3 回答
TA贡献2051条经验 获得超10个赞
go 命令通常在主模块及其依赖项的上下文中运行。它通过在当前工作目录及其父目录中查找文件来查找主模块。go.mod
如果您的预提交是在存储库的根目录中运行的,并且那里没有文件,则命令将在任何模块之外运行。因此,例如,不会做任何事情。go.modgo mod tidygo test ./...
您可能需要在每个模块中运行这些命令。您可以在 shell 脚本中找到包含文件的目录:go.mod
modfiles=($(find . -type f -name go.mod))
for f in "${modfiles[@]}"; do
pushd "$(dirname "$f")"
### presubmit commands
popd
done
TA贡献1842条经验 获得超12个赞
只是加起来就是康罗德@Jay建议的方法。
由于似乎情况与单存储库不太融洽,并且考虑到这变得更加复杂,因此我选择了以下内容pre-commitgo.git/pre-commit
GOMODULESFILENAME="gomodules"
declare -a gomodarray
precommit() {
go mod tidy
go fmt
go test ./... -coverprofile cover.out;
go tool cover -func cover.out
rm cover.out
}
while read -r line;
do
gomodarray+=("$(echo "$line")")
done<gomodules
for f in "${gomodarray[@]}"; do
echo "Running golang pre-commit actions for project: $f"
sleep 1
pushd "$f"
precommit
popd
done
其中 是存储库根部的文件,逐行列出存储库的所有 go 模块。gomodules
TA贡献1770条经验 获得超3个赞
(no files to check)Skipped
表示没有任何东西与特定钩子的 / / 集匹配types
files
exclude
看看你的设置:
** 顶级 **:
files: ^eck-user-mgmt/
在每个钩子上(有一个
混合的文件: \.go$
和类型: [go]
)
它们组合在一起,因此将在存储库中匹配的文件必须同时匹配并以^eck-user-mgmt/
.go
如果你运行它应该~粗略地复制预提交所做的事情来处理文件匹配git ls-files | grep '^eck-user-mgmt' | grep '\.go$'
另请注意,您运行了 -- 默认情况下,这只处理暂存的文件。添加新钩子时,您可能希望运行预提交运行 --all-file
pre-commit run
免责声明:我是预提交的作者
- 3 回答
- 0 关注
- 80 浏览
添加回答
举报