Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ logs
CLAUDE.md
AGENTS.md
.cursor/
.claude/
.claude/
report.*
136 changes: 119 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ code996 是一个分析工具,它可以统计 Git 项目的 commit 时间分

当你入职新公司,跑一下 `npx code996`,就可以看到数据背后的真相,从而判断这家公司的真实加班文化。

与其痛苦三个月,不如早点看清真相!别等到试用期结束才后悔!

## 预览

### 查看核心结果
Expand All @@ -30,16 +32,36 @@ code996 是一个分析工具,它可以统计 Git 项目的 commit 时间分

<img src="https://raw.githubusercontent.com/hellodigua/code996/main/public/images/demo3.png" alt="加班情况分析图" style="width:600px; max-width:100%; height:auto;"/>

### 综合建议
### 月度趋势分析

<img src="https://raw.githubusercontent.com/hellodigua/code996/dev/public/images/demo4.png" alt="月度趋势分析图" style="width:600px; max-width:100%; height:auto;"/>

### 导出报告(新功能) ✨

支持将分析结果导出为多种精美格式:

<img src="https://raw.githubusercontent.com/hellodigua/code996/main/public/images/demo4.png" alt="综合建议图" style="width:600px; max-width:100%; height:auto;"/>
| 格式 | 特点 | 适用场景 |
|------|------|----------|
| 📄 TXT | Unicode 艺术边框 | 终端查看、日志记录 |
| 📝 Markdown | 表格和徽章 | GitHub/文档分享 |
| 🎨 HTML | 渐变背景、交互卡片 | 浏览器查看、邮件 |
| 🖼️ SVG | 矢量图、可缩放 | 高质量图片 |
| 📸 PNG | 1200x800 位图 | 演示文稿、社交媒体 |

```bash
# 导出精美的 HTML 报告
code996 -f html

# 导出并自动在浏览器中打开
code996 -f html --open
```

## 🚀 快速开始

无需安装,快速使用:

```bash
# 在当前仓库运行分析(默认查询以上次提交为终点开始365天的commit)
# 在当前仓库或仓库上级目录运行(默认查询以上次提交为终点开始365天的commit)
npx code996
```

Expand All @@ -53,38 +75,114 @@ npm i -g code996
code996
```

## 🤖 智能分析模式

code996 会根据上下文自动选择最合适的分析模式:

- **在Git仓库中运行** → 单仓库深度分析
- **目录下有多个仓库** → 自动进入多仓库分析模式

```bash
# 智能检测,自动选择分析模式
code996 # 智能检测当前环境
code996 /path/to/repo # 分析指定仓库
code996 /proj1 /proj2 # 自动进入多仓库模式
code996 /workspace # 自动扫描子目录
```

## 📖 详细使用说明

### 命令与选项
### 基础命令

- `trend`:查看月度996指数和工作时间的变化趋势
- `help`:显示帮助信息

#### 时间范围选项

- `-y, --year <year>`:指定年份或年份范围(推荐)
- 单年格式:`2025` → 分析 2025-01-01 至 2025-12-31
- 范围格式:`2023-2025` → 分析 2023-01-01 至 2025-12-31
- `-s, --since <date>`:自定义开始日期 (YYYY-MM-DD)
- `-u, --until <date>`:自定义结束日期 (YYYY-MM-DD)
- `--all-time`:覆盖整个仓库历史数据

#### 筛选与展示选项

- `-H, --hours <range>`:手动指定标准工作时间(例如:9-18 或 9.5-18.5)**重要:建议使用该参数,以获取更正确的评价结果**
- `--half-hour`:以半小时粒度展示时间分布(默认按小时展示)**统计更精确**
- `--timezone <offset>`:指定时区进行分析(例如:+0800、-0700)**适用于跨时区团队项目**
- `--self`:仅统计当前 Git 用户的提交记录
- `--ignore-author <regex>`:排除匹配特定正则表达式的作者(例如:排除 bot 或 jenkins)
- `--ignore-msg <regex>`:排除 Commit Message 中包含特定关键词的提交(例如:排除 merge 或 lint)

#### 导出与分享选项 ✨ 新功能

- `-f, --format <format>`:导出报告为指定格式
- `txt`:纯文本格式(默认)
- `md`:Markdown 格式,适合文档平台
- `html`:HTML 网页格式,美观的可视化报告
- `svg`:SVG 矢量图,可缩放
- `png`:PNG 图片,适合演示文稿
- `-o, --open`:自动在浏览器中打开可视化分析链接

### 使用示例

```bash
# 按年份分析
# ===== 单仓库分析(智能模式) =====
code996 # 分析当前仓库(最近一年)
code996 /path/to/repo # 分析指定仓库
code996 -y 2025 # 分析2025年
code996 -y 2023-2025 # 分析2023-2025年
code996 --all-time # 查询整个仓库历史
code996 --self # 只分析当前用户的提交
code996 --self -y 2025 # 分析自己在2025年的提交

# 精确时间范围
code996 --since 2024-01-01 --until 2024-06-30
# ===== 多仓库分析(智能自动检测) =====
code996 # 如果子目录有多个仓库,自动进入多仓库模式
code996 /path/proj1 /path/proj2 # 传入多个路径,自动分析多个仓库
code996 /workspace # 扫描指定目录的所有子仓库
code996 /workspace -y 2025 # 分析2025年的数据和趋势
code996 --self # 只统计当前用户在所有仓库中的提交

# 精细分析(半小时粒度)
code996 --half-hour # 以半小时粒度展示时间分布
code996 -y 2025 --half-hour # 结合年份分析,精细展示
code996 /proj1 /proj2 --half-hour # 多仓库分析,半小时粒度展示

# 跨时区项目分析
code996 --timezone="+0800" # 只分析东八区(中国)的提交
code996 --timezone="-0700" # 只分析西七区(美国西海岸)的提交
code996 -y 2025 --timezone="+0800" # 分析2025年特定时区的提交

# 过滤噪音数据(排除 CI/CD 机器人、合并提交等)
code996 --ignore-author "bot" # 排除所有包含 "bot" 的作者
code996 --ignore-author "bot|jenkins|github-actions" # 排除多个作者(使用 | 分隔)
code996 --ignore-msg "^Merge" # 排除所有以 "Merge" 开头的提交消息
code996 --ignore-msg "merge|lint|format" # 排除多个关键词
code996 -y 2025 --ignore-author "renovate|dependabot" --ignore-msg "^Merge" # 综合过滤

# ===== 导出报告(新功能) =====
code996 -f html # 导出为精美的 HTML 报告
code996 -f md # 导出为 Markdown 格式
code996 -f png # 导出为 PNG 图片
code996 -y 2024 -f html -o # 分析2024年,导出 HTML 并在浏览器打开
code996 trend -f html # 趋势分析导出为 HTML
code996 --self -f md -o # 分析自己的数据,导出 Markdown 并打开浏览器
```

# 查询整个仓库历史
code996 --all-time
**常见排除场景**:

# 仅分析当前用户的提交记录
code996 --self
code996 --self -y 2025 # 分析自己在2025年的提交
code996 trend --self # 查看自己的趋势分析
```bash
# 排除所有 CI/CD 机器人
--ignore-author "bot|jenkins|github-actions|gitlab-ci|circleci|travis"

# 排除依赖更新机器人
--ignore-author "renovate|dependabot|greenkeeper"

# 排除合并和格式化提交
--ignore-msg "^Merge|^merge|lint|format|prettier"

# 排除自动生成的提交
--ignore-msg "^chore|^build|^ci|auto"
```

## 它怎样工作
Expand All @@ -100,11 +198,15 @@ Git 仓库 → git log 采集 → 日级首提 + 小时分布 → 分位数推

### 关键算法

1. **时间分布分析**:按小时、按星期统计提交数量,绘制 24 小时热力条形图
1. **时间分布分析**:
- 数据采集:按分钟级别采集提交时间,自动聚合为48个半小时点
- 算法处理:自动聚合为24小时用于工作时间识别和996指数计算
- 展示模式:默认按小时展示(24点),可选半小时模式(48点)
2. **工作时间识别**:使用最近样本的 10%-20% 分位估算上班时间区间,并结合晚间提交拐点推算下班时间
3. **996 指数计算**:依据加班比例构建指数,并输出中文描述
4. **数据验证**:检验统计数据是否与总提交数一致,避免缺失导致的偏差
5. **算法优势**:新版本采用分位数与拐点估算,能更智能地排除深夜零星提交的干扰,精准定位真实的工作时间窗口
4. **跨时区协作检测**:通过时区离散度和"睡眠时段"提交比例识别跨时区项目(阈值:非主导时区 >1%),并提供时区过滤建议
5. **数据验证**:检验统计数据是否与总提交数一致,避免缺失导致的偏差
6. **算法优势**:新版本采用分位数与拐点估算,能更智能地排除深夜零星提交的干扰,精准定位真实的工作时间窗口

## 使用提示

Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@
"typescript": "^5.5.2"
},
"dependencies": {
"@resvg/resvg-js": "^2.6.2",
"chalk": "^4.1.2",
"cli-table3": "^0.6.3",
"commander": "^11.1.0",
"open-web-browser": "^0.1.1",
"ora": "^5.4.1"
}
}
Loading