🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

commit-history-exporter

by @wallaceliang

检索并导出 SVN 和 Git 仓库中指定人员的提交记录及修改点信息。支持按作者、时间范围、项目路径过滤,可导出为 Markdown、CSV、JSON、Detailed 等格式。Detailed 格式包含完整提交日志。当用户说"导出某人的提交记录"、"查看提交历史"、"生成提交日志"、"导出代码提交记录"、"查看...

Versionv1.0.0
Downloads487
Stars1
Comments1
TERMINAL
clawhub install commit-history-exporter

📖 About This Skill


name: commit-history-exporter version: 1.0.0 description: 检索并导出 SVN 和 Git 仓库中指定人员的提交记录及修改点信息。支持按作者、时间范围、项目路径过滤,可导出为 Markdown、CSV、JSON、Detailed 等格式。Detailed 格式包含完整提交日志。当用户说"导出某人的提交记录"、"查看提交历史"、"生成提交日志"、"导出代码提交记录"、"查看 SVN 提交"、"导出 Git 历史"、"查看提交备注"等类似请求时触发此 Skill。

Commit History Exporter

检索并导出 SVN/Git 仓库中指定人员的提交记录和修改详情,支持获取提交日志(commit message)。

工作流程

1. 确认需求

根据用户请求,识别以下参数:

  • 版本控制系统: Git 还是 SVN
  • 作者: 指定人员(可选,默认所有)
  • 时间范围: 起始和结束日期/修订号(可选)
  • 项目路径: 仓库路径(可选,默认当前目录)
  • 输出格式: Markdown、CSV、JSON、Detailed(默认 Markdown)
  • 认证信息: SVN 用户名/密码(获取提交日志需要)
  • 2. 检查仓库类型

    执行前检查目标目录:

  • Git: 存在 .git 目录
  • SVN: 存在 .svn 目录
  • 3. 执行导出

    根据版本控制系统和认证状态选择导出方式:

    #### Git 仓库(无需认证) 使用 scripts/export_git_commits.sh

    #### SVN 仓库(可能需要认证)

    有认证: 使用服务器获取完整提交日志 无认证: 使用本地工作副本数据库获取基本信息

    使用 scripts/export_svn_commits.sh

    输出格式说明

    Markdown 格式

    适合人工阅读和文档记录,包含:

  • 提交基本信息(哈希/修订号、作者、日期)
  • 修改文件列表(新增、修改、删除)
  • 统计信息
  • Detailed 格式(推荐)

    完整报告,包含:

  • 提交基本信息
  • 提交日志(commit message)
  • 修改文件列表
  • 统计分析
  • 注意: SVN 仓库获取提交日志需要认证。

    CSV 格式

    适合数据分析和导入其他系统:

  • 表格格式,每行一个提交
  • 包含:commit_id, author, email, date, message, files_changed
  • JSON 格式

    适合程序处理和 API 调用:

  • 结构化数据
  • 包含元数据和提交数组
  • 每个提交包含详细的修改文件信息
  • 使用示例

    Git 仓库导出

    # 导出指定作者的所有提交记录(Markdown 格式)
    ./scripts/export_git_commits.sh "张三"

    导出指定作者和时间范围的提交记录

    ./scripts/export_git_commits.sh "张三" "2024-01-01" "2024-12-31"

    导出完整报告(包含提交日志)- Detailed 格式

    ./scripts/export_git_commits.sh "张三" "" "" "detailed"

    指定项目路径

    ./scripts/export_git_commits.sh "张三" "" "" "detailed" "/path/to/project"

    SVN 仓库导出

    # 导出指定作者的提交记录(无认证,基本信息)
    ./scripts/export_svn_commits.sh "liangyixiong"

    导出完整报告(包含提交日志)- 需要认证

    ./scripts/export_svn_commits.sh "liangyixiong" "" "" "detailed" "/path/to/svn" "用户名" "密码"

    导出指定修订号范围

    ./scripts/export_svn_commits.sh "" "100" "500" "detailed" "/path/to/svn"

    Windows 路径示例(WSL 环境)

    ./scripts/export_svn_commits.sh "liangyixiong" "" "" "detailed" "/mnt/d/SVN/L1_Card/Module_PCD"

    SVN 认证说明

    为什么需要认证?

    SVN 是集中式版本控制系统,提交日志存储在服务器端。要从服务器获取完整的提交日志,需要认证。

    无认证时的处理

    当无法连接 SVN 服务器时,脚本会: 1. 使用本地工作副本数据库 (wc.db) 获取基本信息 2. 输出报告中标注需要认证获取的内容 3. 提供认证指南

    如何提供认证?

    方法 1: 在命令中提供

    ./scripts/export_svn_commits.sh "作者" "" "" "detailed" "/path/to/svn" "用户名" "密码"
    

    方法 2: 安装 SVN 命令行工具后配置认证缓存

  • SlikSVN: https://sliksvn.com/download/
  • VisualSVN: https://www.visualsvn.com/downloads/
  • 方法 3: 使用 Windows TortoiseSVN

  • TortoiseSVN 已保存的认证可用于 WSL 环境(需配置)
  • 认证缓存位置

  • Linux: ~/.subversion/auth/
  • Windows: C:\Users\<用户名>\AppData\Roaming\Subversion\auth\
  • 使用 Python 直接查询 SVN 数据库

    当无法获取 SVN 认证时,可使用 Python 直接从本地数据库获取基本信息:

    import sqlite3
    from datetime import datetime

    db_path = '/path/to/project/.svn/wc.db' conn = sqlite3.connect(db_path) cursor = conn.cursor()

    查询指定作者的修改记录

    cursor.execute(""" SELECT changed_revision, changed_date, changed_author, local_relpath, kind FROM NODES WHERE wc_id = 1 AND op_depth = 0 AND changed_author LIKE '%作者名%' ORDER BY changed_revision DESC """)

    for rev, date_ts, author, path, kind in cursor.fetchall(): date = datetime.utcfromtimestamp(date_ts / 1000000) print(f"r{rev} | {date} | {author} | {path}")

    详见 references/svn_database_query.md

    常见场景

    场景 1: 导出某员工一年的提交记录(含日志)

    用户: "导出张三 2024 年的所有 Git 提交记录,包含提交备注"

    执行:

    ./scripts/export_git_commits.sh "张三" "2024-01-01" "2024-12-31" "detailed"
    

    场景 2: 查看最近一个月的团队提交情况

    用户: "查看最近一个月所有人的提交记录"

    执行:

    ./scripts/export_git_commits.sh "" "1 month ago" "" "detailed"
    

    场景 3: 导出 SVN 项目提交历史(含日志)

    用户: "导出 liangyixiong 在 Module_PCD 项目的 SVN 提交记录,包含提交日志"

    执行:

    ./scripts/export_svn_commits.sh "liangyixiong" "" "" "detailed" "/mnt/d/SVN/L1_Card/Module_PCD"
    

    如果需要认证:

    ./scripts/export_svn_commits.sh "liangyixiong" "" "" "detailed" "/mnt/d/SVN/L1_Card/Module_PCD" "用户名" "密码"
    

    场景 4: 统计团队成员代码贡献

    用户: "统计李四的代码提交数量"

    方法 1(直接使用命令):

    git log --author="李四" --oneline | wc -l
    

    方法 2(导出后统计):

    ./scripts/export_git_commits.sh "李四" "" "" "csv"
    

    命令参考

    Git 命令详解

    查看 references/git_commands.md 了解:

  • 基本查看命令
  • 按作者、时间、路径过滤
  • 自定义输出格式
  • 代码统计技巧
  • 高级查询方法
  • SVN 命令详解

    查看 references/svn_commands.md 了解:

  • SVN 基本命令
  • XML 输出处理
  • 作者和时间过滤技巧
  • SVN 与 Git 对照表
  • 注意事项
  • SVN 数据库查询

    查看 references/svn_database_query.md 了解:

  • wc.db 数据库结构
  • 直接查询本地数据库
  • 无认证获取基本信息
  • Python 查询脚本示例
  • 注意事项

    1. Git: 支持本地查询,不需要网络连接 2. SVN: 获取完整提交日志需要服务器认证 3. SVN 无认证: 可使用本地数据库获取基本信息 4. 大仓库: 查询大量历史记录时,建议限制时间或修订号范围 5. 权限: 确保有读取仓库的权限 6. 路径: 如果未指定项目路径,默认使用当前工作目录