伪造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

相关推荐
ursazoo12 小时前
写了一份 7000字指南,让 AI 帮我消化每天的信息流
人工智能·开源·github
小兵张健16 小时前
Playwright MCP 截图标注方案调研(推荐方案1)
前端·javascript·github
哈基咪怎么可能是AI19 小时前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
vibecoding日记1 天前
为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 🤬🎙️
git·编程工具
九狼2 天前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
逛逛GitHub2 天前
4 个热门的 GitHub 开源项目
github
程序员鱼皮2 天前
GitHub 关注突破 2w,我总结了 10 个涨星涨粉技巧!
前端·后端·github