拓冰建站拓冰建站
首页 / 资讯中心 / 正文

carbon-lang 中如何配置 prek Git 钩子让提交自动通过检查和格式化?

carbon-lang 中如何配置 prek Git 钩子让提交自动通过检查和格式化【免费下载链接】carbon-langCarbon Languages main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)项目地址: https://gitcode.com/GitHub_Trending/ca/carbon-lang给 carbon-lang 提代码时每个提交都要过一套统一的检查与格式化工具Markdown 用rumdl格式化Python 过ruff-check、ruff-format和tyC 文件由clang-format格式化Bazel 构建文件由buildifier处理另外还有版权头、链接、拼写、构建图等检查。这些规则集中在仓库根目录的.pre-commit-config.yaml中。项目用prek一个pre-commit的 drop-in 替代品把这套规则挂到 Git 钩子上让git commit自动执行检查和自动修复。本文覆盖 Debian/Ubuntu含 WSL与 macOS 环境的配置与提交流程。安装 prek在 Debian 或 Ubuntu 上用cargo安装同时装上运行项目 Python 脚本所需的uvcargo install --locked uv prek在 macOS 上用 Homebrew 安装通常连同bazelisk、gh、llvm一起装brew install \ bazelisk \ gh \ llvm \ uv \ prek装完 Homebrew 的llvm后需要把llvm加入PATHprek的钩子运行才依赖正确的环境。Windows 上文档推荐先用wsl --install安装 Ubuntu再按 Debian/Ubuntu 的步骤操作。在仓库中启用 Git 钩子进入本地 carbon-lang 仓库目录运行prek install这一步把钩子写进该仓库的 git 配置。之后每次git commit都会自动执行prek run即按.pre-commit-config.yaml跑一遍检查器与格式化器。配置生效后提交时的工作流文档给出的典型提交流程先git commit尝试提交。这会自动执行prek run如果有钩子失败提交会被拒绝且钩子可能留下已修改的文件等待清理。git add .把钩子自动做的修改加入暂存区。再次git commit。也就是说第一次git commit因钩子报错而失败是正常现象钩子往往已经把尾随空格、格式化等问题自动改掉了补一次git add后重新提交即可。在提交前也可以主动检查判断当前改动是否已经能过# 检查当前待提交的改动不执行 git commit prek run # 对仓库内所有文件运行一遍 prek run -a钩子实际检查的内容按.pre-commit-config.yaml的配置提交时自动执行的项目包括文件类型 / 目标执行的钩子通用文件卫生check-added-large-files、check-merge-conflict、check-yaml、trailing-whitespace、end-of-file-fixer、mixed-line-ending等 builtin 钩子Markdownrumdl--fix先跑一遍、check-google-doc-style与markdown-toc之后再跑一遍、check-google-doc-style、markdown-tocPythonruff-check--fix、ruff-format、ty类型检查C.c/.cpp/.h/.defclang-format -iBazelBUILD、MODULE.bazel、WORKSPACE、.bzlbuildifier --lintfix --warningsall、check-bazel-mod-deps、check-build-graph版权头check-copyright按文件类型校验 Apache-2.0 WITH LLVM-exception 头链接与拼写check-links、codespell特定目录check-sha-filenamesfuzzer 语料文件名、check-toolchain-diagnosticstoolchain 诊断配置中同时定义了排除规则各钩子级的exclude如testdata/、fuzzer_corpus/、*.golden、*.svg以及全局exclude如MODULE.bazel.lock、third_party示例代码、bazel/下的补丁文件。如果某个文件没有被检查先对照这些排除规则。可选把检查从 commit 挪到 push如果你希望提交保留文件原始内容、只在推送时检查可以切换钩子类型prek uninstall prek install --hook-type pre-push这会先卸载pre-commit钩子再安装pre-push钩子之后git push时才会触发检查。已知问题排查macOS 上prek报 SSL 证书错误如果prek在发起 https 连接时失败并输出类似urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate原因是未给prek使用的 Python 安装根证书。解决方法是运行/Applications/Python 3.x/Install Certificates.command其中x是prek使用的 Python 版本号不确定版本时对所有已安装的 Python 版本都执行一遍。使用rs-git-fsmonitor/ Watchman 时prek删除了文件文档明确警告rs-git-fsmonitor和/或 Watchman 的 bug 可能导致prek删除文件。若看到文件被删用下面的命令禁用rs-git-fsmonitorgit config --unset core.fsmonitor该命令只移除当前仓库 git 配置中的 fsmonitor 设置不改动任何文件内容。jjJujutsu用户如果你用 jj 管理仓库仓库提供了 scripts/jj_prek.sh它适用于由 git 仓库支撑的 jj 仓库包括非 colocated 的 jj workspace。脚本会把当前提交映射为一个 git commit然后执行prek run --from-ref trunk --to-ref $HEAD这样prek的检查范围是相对trunk分支的改动。contribution_tools 文档 中还给出了配合 GitHub 远端的 jj 配置示例。更新工具版本通过cargo install --locked安装的工具包括prek可以统一更新./scripts/cargo_update.py完整的安装命令含各平台编译器工具链和故障排查见 docs/project/contribution_tools.mdCONTRIBUTING.md 的 Contribution tools 一节也指向了同一份文档。【免费下载链接】carbon-langCarbon Languages main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)项目地址: https://gitcode.com/GitHub_Trending/ca/carbon-lang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门