You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何生成日期与Git提交记录列表?如何生成GitHub贡献统计CSV?

我来帮你逐个解决这两个问题:

1. 生成日期与Git提交记录的列表

分两种场景给出实现方式,按需选择:

场景1:列出每个提交的日期与详情

使用git log的格式化输出功能,直接生成包含日期、提交哈希和提交信息的列表:

git log --pretty=format:"%ad | %h | %s" --date=short
  • %ad:显示作者提交日期
  • --date=short:将日期统一格式化为YYYY-MM-DD,避免冗余的时间信息
  • %h:提交的短哈希值(方便快速定位提交)
  • %s:提交的标题信息

如果需要将结果保存为文件,直接重定向即可:

git log --pretty=format:"%ad | %h | %s" --date=short > git_commits_list.txt

场景2:按日期统计每日提交次数

如果需要统计每天的提交总数,用以下命令组合:

git log --pretty=format:"%ad" --date=short | sort | uniq -c

输出格式为次数 日期,比如5 2024-05-20表示5月20日有5次提交。

如果要直接生成CSV格式(日期在前,次数在后),用awk调整格式:

git log --pretty=format:"%ad" --date=short | sort | uniq -c | awk '{print $2","$1}' > git_commits_by_date.csv
2. 从时间戳CSV生成日期-贡献次数的CSV

假设你的原CSV每行格式为时间戳,无符号值(比如1716182400,3),这里提供两种简便实现方式:

方法一:Python标准库实现(无需额外依赖)

写一段轻量脚本,处理逻辑清晰,适合小数据量:

import csv
from datetime import datetime

# 替换为你的输入输出文件路径
input_file = "your_source.csv"
output_file = "contributions_result.csv"

date_stats = {}

with open(input_file, 'r') as in_csv:
    reader = csv.reader(in_csv)
    # 如果原CSV有表头,取消下面一行的注释跳过表头
    # next(reader)
    
    for row in reader:
        timestamp = int(row[0])
        # 转换时间戳为YYYY-MM-DD格式(用utcfromtimestamp或fromtimestamp切换时区)
        date = datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%d")
        
        # 统计每日贡献次数(每一行算一次贡献)
        if date in date_stats:
            date_stats[date] += 1
        else:
            date_stats[date] = 1
            
        # 如果需要统计无符号值的总和,替换上面的统计代码为:
        # value = int(row[1])
        # date_stats[date] = date_stats.get(date, 0) + value

# 将结果写入CSV
with open(output_file, 'w', newline='') as out_csv:
    writer = csv.writer(out_csv)
    writer.writerow(["date", "contributions"])  # 写入表头
    # 按日期排序后写入
    for sorted_date in sorted(date_stats.keys()):
        writer.writerow([sorted_date, date_stats[sorted_date]])

方法二:Pandas实现(简洁高效,适合大数据量)

如果已经安装了Pandas,代码会更简洁:

import pandas as pd

input_file = "your_source.csv"
output_file = "contributions_result.csv"

# 读取CSV,names参数替换为你的原CSV列名(如果有表头可省略)
df = pd.read_csv(input_file, names=["timestamp", "value"])
# 将时间戳转换为日期格式
df["date"] = pd.to_datetime(df["timestamp"], unit='s').dt.strftime("%Y-%m-%d")

# 统计每日贡献次数
result = df.groupby("date").size().reset_index(name="contributions")
# 如果需要统计无符号值总和,替换为:
# result = df.groupby("date")["value"].sum().reset_index(name="contributions")

# 保存为CSV
result.to_csv(output_file, index=False)

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

火山引擎 最新活动