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

时间:2011-10-21 19:12:15

标签: git encryption compression hook wrapper

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

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

  1. 合并了sensitive.pgp检测到的冲突。
  2. 启动git-mergetool。工具也无法合并PGP文件。
  3. 现在我有我的版本,基本版本和远程版本的临时文件。
  4. 解密所有三个文件。
  5. 在解密版本上调用我的合并工具。
  6. 加密结果。
  7. git-add新sensitive.pgp
  8. 我想告诉Git在尝试合并之前应用我的预处理和后处理,因此它可以自动处理。我可以想象许多具有相同通用模式的其他场景:几乎任何时候你都有一个带有类似文本的底层结构的压缩文件格式(例如PDF,OpenOffice,Word)。

    有什么建议吗?

1 个答案:

答案 0 :(得分:6)

您有几个选择:

  1. .gitattributes(请参阅git help attributes)中定义一个结帐/签入过滤器,该过滤器在结帐时解密文件(在工作树中保留未加密状态)并在签入前对其进行加密
  2. 定义自定义合并驱动程序(请参阅git help attributes中的merge.<driver>.*git help config选项)
  3. 定义自定义合并工具(请参阅git help mergetool中的mergetool.<tool>.*git help config选项),在调用真实合并工具之前解密,并在真实合并工具返回时加密
  4. 您可以将git配置为仅应用自定义过滤器并将驱动程序合并到特定文件,但合并工具适用于整个存储库,除非您通过将文件名传递给git mergetool命令来限制它。您可以设计自定义合并工具,以根据要合并的文件的名称更改其行为。