伪造git提交记录生成点阵字符

作为版本管理工具中的扛把子,由 linux 之父亲自操刀编写的 git 就不需要过多介绍了,想必已经是无人不知了

但有些人可能不知道的是,git 提交的记录其实是可以伪造的,核心的操作就在于提供了一些 override 的参数,这里用到的就是 --date 这个参数

基于这个 override 的处理,再结合点阵字体的字符数组,就可以玩出花来,比如下面伪造 github 的 contributions 提交点,来进行一些特别的显示

这个提交日期还可以一直前置,直到 1970-01-01,那么你的 github 主页就会显示一个如下的长长列表

这个玩意除了好玩之外,还有什么作用呢?来一个全部填充,假装把自己变成一个很努力的人,惊呆所有人,嘎嘎(如果面试可能还会有一点额外加分)

核心的代码就是以下这段,get_github_day 根据点阵字体获取对应的日期列表,dict 是一个由 0、1 组成的点阵字体二维数组

python 复制代码
def week_begin_day(day):
    weakday = time.strptime(day,'%Y-%m-%d')
    index = 0
    if (weakday[6]!=6):
        index = 6 - weakday[6] 
    y,m,d = weakday[0:3]
    begin_day = datetime.datetime(y,m,d)
    return begin_day + datetime.timedelta(index)

def get_draw_day(day, c):
    days = []
    letter = dict[c]
    for i in range(0,42):
        if (letter[i]==1):
            drawday = day + datetime.timedelta(i)
            days.append(drawday)
    return days

def get_day_by_word(word, day):
    days = []
    begin_day = week_begin_day(day) 
    index = 0
    n = len(word)
    while True:
        if (index >= n):
            break
        if word[index] != ' ':
            one_days = get_draw_day(begin_day, word[index])
            days.extend(one_days)
        index = index + 1
        begin_day = begin_day + datetime.timedelta(42)
    return days

def get_github_day():
    dates = []
    date_23 = get_day_by_word("FXXK GFW", "2023-01-07")
    dates.extend(date_23)
    return dates

def fake_commit(current_date, times):
    for t in times:
        commit_date = current_date.strftime("%Y-%m-%d") + " " + t.strftime("%H:%M:%S")
        with open('foo.txt', 'w', encoding='utf-8') as f:
            f.write(commit_date)
        os.system(f"git add foo.txt")
        os.system(f"git commit --quiet --date \"${commit_date}\" -m \"fake commit\"")

dates = get_github_day()
for d in dates:
    times = [random_time() for _ in range(random.randint(2, 5))]
    times.sort()
    fake_commit(d, times)

创建一个新仓库,然后在该仓库上进行 commit,为了让这些提交显示在 github 的 contributions 上,还需要配置本地 user.email 使用已经验证过的邮箱

如果不希望别人看到该仓库的提交明细,也可以新建为 private 仓库,然后在主页的 Contribution Settings 下拉列表中勾选 Private contributions

相关推荐
YuePeng6 小时前
一个注解起家,25 个模块收尾:Erupt 的生态版图长这样
后端·github
我是若尘8 小时前
发布分支落后于主干,MR 全是冲突?聊聊业界怎么治这个“祖传”难题
github
笨鸟先飞,勤能补拙8 小时前
网络安全等级保护 2.0:从定级备案、建设整改到持续合规的系统指南
网络·人工智能·windows·安全·web安全·网络安全·github
echoVic9 小时前
CI 已经绿了,为什么你的 Agent 还在用旧规则?
github
echoVic9 小时前
AI 评审最怕的不是漏报,而是审完以后代码已经变了
github
福如意如我心意11 小时前
git清除仓库敏感文件并同步至远端的操作
git
u13013012 小时前
GitHub 热榜项目:日榜(2026-08-10)
github
dong_junshuai13 小时前
每天一个开源项目#62 pdf-inspector:0.47秒解析200份PDF
开源·github
七牛开发者13 小时前
Codex 实践系列 Vol.04:用 Goal 和 Plan 管住一个长任务
java·数据库·人工智能·github·copilot
鬼手点金13 小时前
FreeLLMAPI 介绍
llm·github·nvidia·apikey·freellmapi·agnes ai·日日新