周五下午四点,隔壁工位的老张又在复制粘贴。他打开git log,一条条看提交记录。再打开Excel,翻数据。最后打开邮箱,写周报,贴给领导。这套动作重复了三年。我看了一眼,把代码推了过去。
先说最烦人的git提交汇总。你只要在项目目录里跑一行命令git log --since='2024-01-01' --until='2024-01-07' --format='%h %s',就能拿到本周所有提交。但这样还是得手动复制。更省事的办法,写个python脚本自动拉取最近七天的提交。
```python
import subprocess
from datetime import datetime, timedelta
def get_weekly_commits():
today = datetime.now()
last_week = today - timedelta(days=7)
cmd = f'git log --since='{last_week.strftime('%Y-%m-%d')}' --until='{today.strftime('%Y-%m-%d')}' --format='%h %s %an''
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
return result.stdout
```
这段代码会返回最近一周的commit信息,包含短hash、提交说明和作者。你得把这个结果存到变量里,后面要用。
大部分人手里的周报,除了代码提交,还夹杂一些运营数据、bug数量、上线版本号。这些数据通常躺在Excel文件里。用openpyxl库读就行。假设你的Excel里B列是任务名称,C列是完成状态,D列是备注。
```python
from openpyxl import load_workbook
def read_excel_data(file_path):
wb = load_workbook(file_path)
ws = wb.active
tasks = []
for row in ws.iter_rows(min_row=2, values_only=True):
task_name = row[1]
status = row[2]
note = row[3]
if task_name:
tasks.append(f'{task_name} - {status} - {note}')
return tasks
```
注意这里values_only=True,只拿单元格的值不要格式。不然你会拿到一堆None。
现在把git提交和Excel数据拼起来,生成一段纯文本周报。写一个函数,把收集到的commit列表和任务列表格式化输出。不要做花哨的排版,领导只看重点。
```python
def generate_report(git_commits, excel_tasks):
report = []
report.append(f'报告周期:{datetime.now().strftime('%Y-%m-%d')}')
report.append('')
report.append('一、代码提交情况')
for commit in git_commits.split('\n'):
if commit.strip():
report.append(f' - {commit}')
report.append('')
report.append('二、本周任务完成情况')
for task in excel_tasks:
report.append(f' - {task}')
return '\n'.join(report)
```
这一步生成的report字符串,就是周报正文。你可以直接打印出来粘贴到邮件里,但那还是手动操作。都写到这一步了,不如让python代劳发邮件。
用python的smtplib和email库。需要你开启邮箱的SMTP服务,生成一个授权码。不要用密码,不安全。
```python
import smtplib
from email.mime.text import MIMEText
def send_report(report_text, to_email):
msg = MIMEText(report_text, 'plain', 'utf-8')
msg['Subject'] = '周报-自动生成'
msg['From'] = '你的邮箱'
msg['To'] = to_email
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
server.login('你的邮箱', '你的授权码')
server.send_message(msg)
server.quit()
```
这个函数接受周报文本和收件人邮箱,完成发送。把前面三步串起来,整个脚本不超过三十行。
你把所有代码放到一个py文件里,在周五下午四点跑一次。老张还在复制粘贴,你已经关电脑了。几点要注意。git log命令必须在Git仓库目录下执行,否则会报错。Excel文件路径要用绝对路径,或者放在脚本同目录下。邮件授权码不要硬编码在代码里,建议用环境变量或者配置文件。还有,第一次运行前先测试发送给自己,确认邮件能正常收到。
我看过有些人的周报脚本写了上百行,又是模板又是图表。其实没必要。周报本质上是一份记录,不是艺术品。领导需要知道三件事:这周干了什么,进度如何,有没有风险。你把git提交和Excel数据对上一份,每件事写明白,就够了。
这个脚本你花一小时写出来,以后每周省下两小时。两个月就回本了。如果你不喜欢写脚本,网上也有现成的轮子。但自己写的能按自己需求改。比如有些人要统计代码行数改动,那就加一行git diff --stat的结果。有些人要把周报转成HTML格式发给团队,那就用MIMEText的html类型。主动权在自己手里,想怎么改都行。
老张上周问我,你那个自动发周报的能不能教教我。我说行,但得请我喝杯奶茶。后来他学会了,现在每周五下午四点,我俩一起关电脑。