如何为Github仓库中的文件夹制定清理与归档策略
解决方案
一、自动化归档脚本
编写Shell脚本(适配Linux/macOS,Windows可改用PowerShell),自动筛选并归档超过3个月的SQL文件,按时间维度分类存储方便查阅。
脚本示例(基于Git提交时间,更准确反映文件实际生效时间)
#!/bin/bash # 配置路径 SOURCE_DIR="./ddl-scripts" ARCHIVE_ROOT="./ddl-scripts-archive" # 创建归档根目录 mkdir -p "$ARCHIVE_ROOT" # 查找并归档超过90天的.sql文件 find "$SOURCE_DIR" -maxdepth 1 -type f -name "*.sql" -mtime +90 | while read -r FILE; do # 获取文件的Git提交年月 FILE_DATE=$(git log -1 --format="%ad" --date=format:"%Y-%m" "$FILE") # 若无需依赖Git,改用系统修改时间:FILE_DATE=$(date -r "$FILE" +"%Y-%m") ARCHIVE_DIR="$ARCHIVE_ROOT/$FILE_DATE" mkdir -p "$ARCHIVE_DIR" mv "$FILE" "$ARCHIVE_DIR/" echo "已归档: $FILE -> $ARCHIVE_DIR" done
二、仓库归档结构设计
- 主工作目录
ddl-scripts仅保留近3个月的活跃SQL文件,维持文件数量可控 - 归档目录
ddl-scripts-archive按YYYY-MM分文件夹存储历史文件,例如2024-01、2024-02,便于快速定位历史版本 - 归档文件仍保留在Git仓库中,完整保留所有历史记录
三、CICD流程优化
- 修改CICD触发规则:仅监控
ddl-scripts文件夹的新增/变更,无需扫描归档目录 - 压缩步骤仅针对
ddl-scripts文件夹,大幅减少压缩耗时 - 若CICD支持构建缓存,将归档目录加入缓存忽略列表,进一步提升构建速度
四、自动化触发配置
通过CI/CD工具的定时任务实现无人值守归档,以下是GitHub Actions的配置示例:
name: 归档旧SQL脚本 on: schedule: - cron: '0 0 * * 0' # 每周日凌晨自动执行 workflow_dispatch: # 保留手动触发入口 jobs: archive-job: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 执行归档脚本 run: | chmod +x archive-old-sql.sh ./archive-old-sql.sh - name: 提交并推送归档结果 run: | git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" git add . git commit -m "自动归档旧SQL脚本" git push
GitLab CI、Jenkins等工具可参照类似逻辑配置定时任务,周期可根据需求调整为每周/每两周。
五、注意事项
- 首次执行脚本会批量归档所有符合条件的旧文件,后续定期执行仅处理新增的过期文件
- 可根据实际需求调整时间阈值(将
-mtime +90改为+60即归档2个月以上的文件) - 若需临时查阅历史文件,直接进入归档目录对应年月的文件夹即可
内容的提问来源于stack exchange,提问作者Nik
相关产品推荐
相关产品推荐

