Git Hooks—提交Commit前检查本地时间是否不对

Git Hooks---提交Commit前检查本地时间是否不对

有时候,本地要测一些东西,或者启动一个本地服务器,要改到本地时间,但是git commit时,会直接使用本地时间作为提交时间来记录commit信息,假设我将本地时间改到一个月后,那么我这条commit的时间在git log里就是一个月后的时间。
为了解决这个问题,我写了一个git钩子,在commit前检查本地时间是否与网络时间相差30分钟内,如果相差大于30分钟,则将本地时间改为网络时间并提示再次commit。

首先,不了解git-hooks的小伙伴可以看下这篇介绍:
Git Hooks 功能与作用详解

话不多说直接上代码:

python 复制代码
#!/usr/bin/env python

from datetime import datetime, timedelta, timezone
from email.utils import parsedate_to_datetime

# 固定 UTC+8,避免 Windows 上 zoneinfo 缺少 tzdata 时报错
SHANGHAI_TZ = timezone(timedelta(hours=8))
import http.client
import win32api
import tkinter.messagebox
import sys

class System_Time:

	def __init__(self):
		self.__newtime = None

	def get_webservertime(self, host='www.baidu.com'):
		conn = http.client.HTTPConnection(host)
		conn.request("GET", "/")
		r = conn.getresponse()
		ts = r.getheader('date')
		dt_utc = parsedate_to_datetime(ts)
		return dt_utc.astimezone(SHANGHAI_TZ).replace(tzinfo=None)

	@classmethod
	def alter(cls):
		obj = cls()
		webTime = obj.get_webservertime()
		now = datetime.now()
		diff_seconds = abs((webTime - now).total_seconds())
		tkinter.messagebox.showinfo(title='diff_seconds:', message=str(diff_seconds))
		if diff_seconds / 60 >= 30:
			a = tkinter.messagebox.askokcancel(
				'提示',
				'本地时间与网络时间相差大于30分钟,是否需要设置为网络时间,'
				f'本地时间:{now},网络时间:{webTime},相差秒数:{diff_seconds:.3f}'
			)
			if a:
				try:
					webTime = webTime - timedelta(hours=8)
					win32api.SetSystemTime(webTime.year, webTime.month, webTime.weekday(), webTime.day, webTime.hour, webTime.minute, webTime.second, 0)
					tkinter.messagebox.showinfo(title='提示', message='修改系统时间成功,请再次Commit!')
				except Exception as error:
					print(error.__str__())
			else:
				tkinter.messagebox.showinfo(title='提示', message='本地时间与网络时间相差较大,需要修改后再提交!')
			sys.exit(1)


if __name__ == '__main__':
	System_Time.alter()

我这里是直接用百度的时间作为网络时间的,写得可能比较简陋,但是能用就行~

效果(这里是加了临时代码强行弹出的,所以实际上时间没差多少):

相关推荐
呆萌的代Ma1 天前
Git不强行推送,撤销最近几次的提交
git
透明的玻璃杯1 天前
git应用
git
炸炸鱼.1 天前
Git+Jenkins实战(一):从零搭建自动化发布与回滚系统(附完整代码)
git·jenkins
言6661 天前
要忽略前端依赖包node_modules的文件在目录下 git暂存区消失
git
胡小禾1 天前
Git Worktree
git
程序员小羊!1 天前
18 GIt
git
怣疯knight1 天前
Git 本地分支关联远程分支 常用命令汇总
git
ANNENBERG1 天前
git分支开发管理
git
坤坤藤椒牛肉面1 天前
GIT的使用
git
w3296362711 天前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git