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條經驗 獲得超13個贊
只是加起來就是康羅德@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 關注
- 115 瀏覽
添加回答
舉報