我希望能够在Git尝试合并它们之前调用一些文件的预处理,并对合并后的结果进行后处理。这里的一般想法是一些文件很难按原样自动合并,但可以转换为更容易处理的形式。这是我的具体用例:
我有一个主要不是非常敏感数据的存储库。在该存储库中,我在一个名为sensitive.pgp
的文件中有一些加密的敏感数据。我喜欢这种安排,因为我不必相信我的存储库是安全管理的,我只需要相信加密和密码。当然,Git无法合并加密文本,因此如果同时在两个签出中修改sensitive.pgp
,则无法合并 - 即使明文的更改很容易分开。手动工作流程如下:
sensitive.pgp
检测到的冲突。sensitive.pgp
。我想告诉Git在尝试合并之前应用我的预处理和后处理,因此它可以自动处理。我可以想象许多具有相同通用模式的其他场景:几乎任何时候你都有一个带有类似文本的底层结构的压缩文件格式(例如PDF,OpenOffice,Word)。
有什么建议吗?
答案 0 :(得分:6)
您有几个选择:
.gitattributes
(请参阅git help attributes
)中定义一个结帐/签入过滤器,该过滤器在结帐时解密文件(在工作树中保留未加密状态)并在签入前对其进行加密git help attributes
中的merge.<driver>.*
和git help config
选项)git help mergetool
中的mergetool.<tool>.*
和git help config
选项),在调用真实合并工具之前解密,并在真实合并工具返回时加密您可以将git配置为仅应用自定义过滤器并将驱动程序合并到特定文件,但合并工具适用于整个存储库,除非您通过将文件名传递给git mergetool
命令来限制它。您可以设计自定义合并工具,以根据要合并的文件的名称更改其行为。