You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Git pre-commit钩子实现提交前自动复制文件?

问题解答

完全可以把这套复制逻辑放到pre-commit hook里实现自动化,能彻底避免手动操作漏执行导致的站点资源加载失败问题。

具体实现步骤

  • 进入本地仓库的hook目录,找到/新建pre-commit文件,路径为.git/hooks/pre-commit,注意这个文件没有任何后缀名。
  • 给文件添加可执行权限,否则hook不会自动触发,执行命令:
    chmod +x .git/hooks/pre-commit
    
  • 将以下脚本内容写入pre-commit文件即可:
    #!/bin/sh
    # 检查协作资源目录是否存在、是否有文件,避免空目录时报错中断提交
    if [ -d "_posts/assets" ] && [ -n "$(ls -A _posts/assets 2>/dev/null)" ]; then
      # 递归复制资源,仅同步源目录比目标目录更新的文件,减少无意义覆盖
      cp -R -u _posts/assets/* assets/
      # 自动将同步后的资源文件加入暂存区,避免漏提交
      git add assets/
    fi
    
    exit 0
    

注意事项&优化建议

  • 脚本里给cp加了-u参数,只会复制源目录中比目标目录更新的文件,不会每次提交都无脑覆盖assets目录下的同名文件,能减少很多无意义的文件变更。
  • 不建议在pre-commit里硬编码固定的commit信息,每次提交的内容不同,写死"New files for articles"会让仓库提交历史非常混乱,不好追溯修改记录,commit信息保留手动输入即可。
  • 如果是多人协作维护这个博客,要注意本地pre-commit hook不会随Git仓库同步,每个协作者都要单独在本地配置一次,很容易出现有人忘配就提交、导致线上资源缺失的问题。这种场景更推荐把同步逻辑放到Gitlab CI的构建步骤里,在CI执行Jekyll构建命令之前跑资源同步,不需要每个人本地做配置,稳定性更高。

内容的提问来源于stack exchange,提问作者HufflepuffBR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:33:23