如何将git文件合并包装为预处理和后处理?

如何将git文件合并包装为预处理和后处理?,git,encryption,compression,hook,wrapper,Git,Encryption,Compression,Hook,Wrapper,我希望能够在Git尝试合并文件之前对文件调用一些预处理,然后对合并结果进行后期处理。这里的总体思路是,有些文件很难按原样自动合并,但可以转换为更易于处理的形式。以下是我的具体用例: 我有一个存储库,其中大部分不是非常敏感的数据。在这个存储库中,我有一些加密的敏感数据,在一个名为sensitive.pgp的文件中。我喜欢这种安排,因为我不必相信我的存储库是安全管理的,我只需要信任加密和密码。当然,问题是Git不可能合并加密文本,因此如果同时在两次签出中修改sensitive.pgp,则无法进行合并

我希望能够在Git尝试合并文件之前对文件调用一些预处理,然后对合并结果进行后期处理。这里的总体思路是,有些文件很难按原样自动合并,但可以转换为更易于处理的形式。以下是我的具体用例:

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

  • 检测到
    敏感的pgp的合并冲突
  • 启动git合并工具。该工具也无法合并PGP文件
  • 现在我有了我的版本、基础版本和远程版本的临时文件
  • 解密所有三个文件
  • 在解密版本上调用我的合并工具
  • 加密结果
  • git添加新的
    sensitive.pgp
  • 我想告诉Git在它尝试合并之前应用我的预处理和后处理,这样它就可以自动处理这个问题。我可以想象很多其他场景都有相同的通用模式:几乎任何时候你都有一个压缩文件格式,它的底层结构类似于文本(例如PDF、OpenOffice、Word)


    有什么建议吗?

    您有几个选择:

  • .gittributes
    (请参阅
    git help attributes
    )中定义签出/签入筛选器,该筛选器在签出时解密文件(在工作树中保持未加密状态),并在签入前对其进行加密
  • 定义自定义合并驱动程序(请参见
    git-help-attributes
    git-help-config
    中的
    merge..*
    选项)
  • 定义一个自定义合并工具(请参见
    git-help-mergetool
    git-help-config
    中的
    mergetool..*
    选项),该工具在调用真正的合并工具之前进行解密,并在真正的合并工具返回时进行加密

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

    附加点:除了将该逻辑放入预处理和后处理本身之外,是否有其他方法将此操作配置为仅在特定文件或文件类型上执行?非常感谢。我已经开始修补自定义合并驱动程序,这看起来是一个很好的解决方案。