亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

預提交無法在嵌套的 go 模塊中發現任何 golang 文件

預提交無法在嵌套的 go 模塊中發現任何 golang 文件

Go
婷婷同學_ 2022-09-26 15:48:37
我有一個大的回購,喜歡github.com/myusername/myrepo現在,在該存儲庫中(出于超出此問題范圍的原因),我初始化了以下模塊:gogithub.com/myusername/myrepo/eck-user-mgmt這是我的github.com/myusername/myrepo/eck-user-mgmt/.pre-commit-config.yaml---files: ^eck-user-mgmt/repos:  - repo: git://github.com/dnephin/pre-commit-golang    rev: v0.4.0    hooks:      - id: go-fmt      - id: go-imports      - id: go-unit-tests      - id: go-mod-tidy      - id: golangci-lint但是,沒有發現任何文件/模塊/任何內容go? g add .pre-commit-config.yaml && pre-commit rungo fmt...............................................(no files to check)Skippedgo imports...........................................(no files to check)Skippedgo-unit-tests........................................(no files to check)Skippedgo-mod-tidy..........................................(no files to check)Skippedgolangci-lint........................................(no files to check)Skipped這是從居住的地方運行的,即pre-commit-config.yaml~/work/myrepo/eck-user-mgmt為什么?p.s. 我知道這不是模塊管理方面的最佳實踐,我只想知道是否有辦法在特定設置的上下文中使用make工作gopre-commitgo
查看完整描述

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


查看完整回答
反對 回復 2022-09-26
?
紅顏莎娜

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


查看完整回答
反對 回復 2022-09-26
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

(no files to check)Skipped表示沒有任何東西與特定鉤子的 / / 集匹配typesfilesexclude

看看你的設置:

它們組合在一起,因此將在存儲庫中匹配的文件必須同時匹配并以^eck-user-mgmt/.go

如果你運行它應該~粗略地復制預提交所做的事情來處理文件匹配git ls-files | grep '^eck-user-mgmt' | grep '\.go$'

另請注意,您運行了 -- 默認情況下,這只處理暫存的文件。添加新鉤子時,您可能希望運行預提交運行 --all-filepre-commit run


免責聲明:我是預提交的作者


查看完整回答
反對 回復 2022-09-26
  • 3 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號