5

いくつかの設定ファイルを追跡するgitリポジトリがあります。構成ファイルの1つはプレーンテキストで、もう1つはgpg暗号化されています。それらはそのように名付けられています。

  • myconfig.yaml
  • myconfig.yaml.gpg

gitでサーバー側フックを作成して、.gpgで終わるファイルのバージョンがプレーンテキストとしてコミットされないようにします。

開発者が大量の変更を加えて、gpgファイルの履歴に含まれているために変更をプッシュしようとするとスタックするのを防ぐために、クライアント側のフックとサーバー側のフックがあるとよいと思います。暗号化されていないデータ。

一部の人はファイルを復号化するためのアクセス権を持ってはならないため、コミット/クローン作成中にgpgファイルを単純に暗号化/復号化することはできません。

暗号化されたデータのみがすべてのバージョンの.gpgファイルに含まれるようにするタスクを実行する方法がわかりません。何か案は?

4

1 に答える 1

6

このコマンドを使用し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クライアント側のフックについては、チェックする名前のリストを取得するために pre-commit フックを使用できます。

サーバー側のフックはより困難です。事前受信にフックし、提案された参照を一時的な場所にチェックアウトし、それらを検証し (おそらくgit diff --name-only HEAD^変更されたファイルのリストを取得するために使用)、要件に違反する場合はそこからの更新を拒否できると思います。

于 2013-01-08T23:59:27.833 に答える