[GIT] 使用 Git Hooks 纪录不同专案的 commit 讯息

今天分享一个特别的东西 Git Hooks,会研究这个是因为我想将不同专案的 commit 纪录起来,方便之后查阅,查了一些资料发现原来 Git 本身有提供 Hooks(钩子) 的功能,可以在 commit 的前后执行我们写的 Script,一般常用来检查提交讯息是否符合团队规定,或执行自动化测试等等,而我的用法好像比较特别。
http://img2.58codes.com/2024/emoticon25.gif

Git Hooks 可以用的 Script 有很多,这篇我就用自己相对熟悉的 Python 语言,前阵子有用来练习一些题目,可以较快上手。

Git Hooks

每个 Git 专案下都有个 .git 的隐藏资料夹,git hooks 就放在 .git 里面的 hooks 资料夹内,开启后可以看到 .sample 副档名的档案。

http://img2.58codes.com/2024/20106865RsIoP8AURC.jpg

Hooks 的种类很多,我用到的是 commit-msg,它会在用户提交讯息后被执行,利用这个 hook 就可以在提交后,执行纪录 commit 的脚本。

程式

#!/usr/bin/pythonimport sysimport osimport reimport csvimport datetimeimport subprocesscommit_msg_filepath = sys.argv[1]with open(commit_msg_filepath, 'r', encoding='UTF-8') as f:        dateTime = datetime.datetime.now().strftime("%Y-%m-%d")    name = subprocess.check_output(['git', 'show', '-s', '--format=%an']).decode('UTF-8').strip()    content = f.read().strip('\n')    branch = subprocess.check_output(['git', 'symbolic-ref', '-q', '--short', 'HEAD']).decode('UTF-8').strip()    project = os.path.basename(os.getcwd())        # 改成自己的存放路径    csvPath = 'C:\\CommitLog\\CommitLog.csv'    with open(csvPath, 'a', encoding='Big5', newline='') as csvFile:        writer = csv.writer(csvFile, quotechar='"', quoting = csv.QUOTE_ALL)        writer.writerow([dateTime, project, name, content, branch])    print('Commit log created!!!')sys.exit(0)

说明

1. dateTime (提交日期)

现在时间只取日期的部分

2. name (用户名称)

这里用到 git 指令 git show -s --format=%an 可以取得用户名

3. content (提交讯息)

sys.argv[1] 可以取得储存提交讯息的档案路径

4. branch (分支)

同样用到 git 指令 git symbolic-ref -q --short HEAD 取得当前分支

5. project (专案名称)

从脚本存放的路径取得


程式中 print 的内容可以在 commit 视窗看到

http://img2.58codes.com/2024/20106865A4ztXUuGKu.jpg

程式最后的 sys.exit(0) 代表该 hooks 执行成功,将 0 改为 1 则代表失败,就会出现上图不正常结束的讯息。

还有一点要特别注意,想要启动 hooks 需要将 .sample 副档名拿掉,这边让我卡关好久,不管怎么改程式都没反应,原来没有 .sample 才是 hooks 的正确档名。

http://img2.58codes.com/2024/emoticon20.gif

结语

原来想将结果製作成 Excel,但没有 Python 存取 Excel 的经验,所以偷懒改用 CSV,Excel 开启后感觉差不多,不过还是欢迎有经验的大大,推荐好用的 Excel 套件给小弟,今天就到这里搂,感谢大家观看。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章