如何使用预处理和后处理来包装git文件?

Eri*_*son 6 compression git encryption hook wrapper

我希望能够在Git尝试合并它们之前调用一些文件的预处理,并对合并后的结果进行后处理.这里的一般想法是一些文件很难按原样自动合并,但可以转换为更容易处理的形式.这是我的具体用例:

我有一个大多数不是非常敏感的数据库.在该存储库中,我在一个名为的文件中有一些加密的敏感数据sensitive.pgp.我喜欢这种安排,因为我不必相信我的存储库是安全管理的,我只需要相信加密和密码.当然,Git不可能合并加密文本,因此如果sensitive.pgp同时修改两个签出,则无法合并 - 即使明文的更改很容易分开.手动工作流程如下:

  1. sensitive.pgp检测到合并冲突.
  2. 启动git-mergetool.工具也无法合并PGP文件.
  3. 现在我有我的版本,基本版本和远程版本的临时文件.
  4. 解密所有三个文件.
  5. 在解密版本上调用我的合并工具.
  6. 加密结果.
  7. git-添加新的sensitive.pgp.

我想告诉Git在尝试合并之前应用我的预处理和后处理,因此它可以自动处理.我可以想象许多具有相同通用模式的其他场景:几乎任何时候你都有一个带有类似文本的底层结构的压缩文件格式(例如PDF,OpenOffice,Word).

有什么建议?

Ric*_*sen 6

您有几种选择:

  1. 在中定义一个签入/签入过滤器.gitattributes(请参阅参考资料git help attributes),以在签出时解密文件(将其保留在工作树中未加密)并在签入之前对其进行加密
  2. 定义自定义合并驱动程序(请参阅git help attributes和中的merge.<driver>.*选项git help config
  3. 定义一个自定义合并工具(请参阅git help mergetool和中的mergetool.<tool>.*选项git help config),该工具在调用真正的合并工具之前进行解密,并在真正的合并工具返回时进行加密

您可以将git配置为仅将自定义过滤器和合并驱动程序应用于特定文件,但是合并工具适用于整个存储库,除非您通过将文件名传递给git mergetool命令来对其进行限制。您可以设计您的自定义合并工具来更改其行为,具体取决于要合并的文件的名称。