/git-safe-hook

Design to protect git history in central repo server.

Primary LanguagePython

Git 服务端钩子

需求

需要对已经发布的代码做好历史留存,但由于 Git 的自由度很高,不加限制可以删除分支和重写历史,因此需要增加服务端钩子限制。

功能

  • 保护 master 分支,master 分支不允许强制推送,不允许删除。
  • 保护发布版本的 tag 不被删除改写,保护 tag 对应的 commit 不被删除改写。
  • 保护发布分支(release/{版本号}),发布分支必须和 master 分支有一个公共的基线,发布分支存在没合并到 master 的发布 tag 对应的 commit,不允许删除和改写。

TODO

  • 目前假定 tag 的用户是可信的,接下来要加入 GPG 信息的校验
  • 刚用 golang 重写,需要进一步优化代码和结构,让其像一个真正的 go 项目

用法

编译,并把生成的二进制放到 Git 服务端相应的 pre-receive 钩子目录

go build pre-receive.go  # 编译

编译完后,可以在开发环境直接测试

./test.py