【问题标题】:Is there a way to test if a file is GPG encrypted in a git hook?有没有办法测试文件是否在 git hook 中被 GPG 加密?
【发布时间】:2013-01-08 21:33:24
【问题描述】:

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

  • myconfig.yaml
  • myconfig.yaml.gpg

我想在 git 中创建一个服务器端挂钩,以确保任何以 .gpg 结尾的文件的任何版本都不会以纯文本形式提交。

我认为最好有一个客户端钩子和一个服务器端钩子,以防止开发人员进行大量更改,然后在尝试将他们的更改向上推时陷入困境,因为gpg 文件包含未加密的数据。

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

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

【问题讨论】:

    标签: git gnupg


    【解决方案1】:

    您可以使用file 命令检查文件并自动确定它的类型。例如:

    $ file foo.gpg
    foo.gpg: GPG encrypted data
    $ file foo
    foo: ASCII text
    

    你可以在一个钩子中匹配这个。比如:

    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
    

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

    服务器端的钩子比较难。我认为您可以挂上预接收,将建议的参考文件签出到一个临时位置,验证它们(可能使用git diff --name-only HEAD^ 获取已修改文件的列表),然后如果它违反了您的要求,则拒绝从那里更新。

    【讨论】:

      猜你喜欢
      • 2022-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多