2013-01-08 46 views
4

我有一個跟蹤一些配置文件的git倉庫。其中一個配置文件是純文本,而另一個是gpg加密的。他們是這樣命名的。有沒有辦法測試一個文件是否在git鉤子中被加密了?

  • myconfig.yaml
  • myconfig.yaml.gpg

我想創造的git服務器端掛鉤,以確保沒有在.gpg結尾的文件的版本致力於爲純文本。

我認爲最好有一個客戶端鉤子和一個服務器端鉤子,以防止開發人員進行一堆更改,然後一旦嘗試推進其變更就會卡住,因爲歷史記錄一個gpg文件包含未加密的數據。

我不能簡單地在commit/clone期間加密/解密gpg文件,因爲有些人不應該有權訪問解密文件。

我不確定如何完成確保只有加密數據包含在所有.gpg文件版本中的任務。有任何想法嗎?

回答

4

您可以使用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^獲取修改後的文件列表),然後如果違反了您的要求,則拒絕更新。

相關問題