有没有办法测试文件是否在git钩子中加密GPG?

Gre*_*egB 5 git gnupg

我有一个git存储库,可以跟踪几个配置文件.其中一个配置文件是纯文本,而另一个是gpg加密.它们就是这样命名的.

  • myconfig.yaml
  • myconfig.yaml.gpg

我想在git中创建一个服务器端钩子,以确保没有任何以.gpg结尾的文件版本作为明文提交.

我认为最好有一个客户端钩子和一个服务器端钩子来防止开发人员进行一系列更改,然后因为gpg文件的历史记录包含而一直试图推动他们的更改而陷入困境未加密的数据.

我不能简单地在提交/克隆期间加密/解密gpg文件,因为有些人不应该有权解密文件.

我不确定如何完成确保只有加密数据包含在所有版本的.gpg文件中的任务.有任何想法吗?

Rob*_*sak 5

您可以使用该file命令检查文件并自动确定它看起来是什么类型.例如:

$ file foo.gpg
foo.gpg: GPG encrypted data
$ file foo
foo: ASCII text
Run Code Online (Sandbox Code Playgroud)

你可以在一个钩子中匹配这个.就像是:

case "$filename" in
  *.gpg) if [ "$(file -b "$filename")" != "GPG encrypted data" ]; then
             echo "Error: $filename should be encrypted but isn't" >&2
             exit 1
         fi
         ;;
esac
Run Code Online (Sandbox Code Playgroud)

对于客户端钩子,您可以使用预提交钩子git diff --cached --name-only来获取要检查的名称列表.

服务器端钩子更难.我认为您可以挂钩预先接收,检查建议的refs到临时位置,验证它们(可能git diff --name-only HEAD^用于获取修改的文件列表),然后如果它违反了您的要求则拒绝更新.