如何在Git上存储打开的文档(.docx,.vsdx,...)?

时间:2016-11-25 15:58:12

标签: git binary visio opendocument

我想在我的Git存储库中存储Microsoft Visio 2013图表。这些图稍后将转换为SVG和PDF,以用于使用Sphinx构建的软件文档。

不幸的是,open-documents文件是二进制文件(事实上它们是ZIP存档),Git不太喜欢二进制文件。

我意识到,如果我解压缩我的vsdx文件,我会收到大量xml个文件,这些文件使用Git更易于管理。

问题是我需要将一些脚本挂钩到Git,以便仅将解压缩的打开文档文件存储在存储库中,但将压缩版本保留在工作目录中。这是否可行且可取,以减少整体存储库占用空间?

目标是,如果我在Visio图表上移动一个形状,我不想在我的存储库中几乎复制我的兆字节vsd文件。我想这个带有一行换行的2兆字节XML文件有更好的机会在Git Packfiles上压缩。

这是对的吗?

1 个答案:

答案 0 :(得分:1)

如果您担心使用大型Visio文件的内存问题,为什么不利用git的分布式特性并设置多个存储库?像这样。


Root Folder (Git Repo)
    .gitignore (that ignores the Visio Folder)
    Visio Folder (Also a Git Repo)

自由工作,无需担心提交Visio文件。然后,当您对更改感到满意时,只需将目标文件移到目录中即可。提取并提交它。这可能看起来不太优雅,但如果您的Visio文件夹因内存问题而无法工作,您可以将其粉碎,因为您需要的所有内容都在它下面的git repo中。 (保持大二进制文件不占用仓库中空间的唯一真正方法是不提交它们。)

如果此解决方案太粗糙,请将Visio文件夹设置为根文件夹的远程。让您的Visio文件夹包含两个单独的分支,一个包含包含您的巨型文件的提交,另一个包含您的巨型文件的提交。只需从没有Visio文件的分支中获取。如果仍然无法获得控制权,则需要设置遥控器,子文件夹等,直到获得可以为您生成有意义的工作流程和历史记录的存储库结构。

添加本地远程


cd 'Root Folder'
git remote add visiofiles 'Visio Folder'

如果您感觉冒险,可以调查git的“干净”和“涂抹”过滤器(当您提交和结帐时,它们会调用文件 - 它们旨在让您使用与您的团队不同的缩进规则,但你可以拉链和解压缩东西)。如果您要提取Visio文件以便更好地检查更改,则可能会优先考虑git的textconv配置。 Git让你在文件上调用自定义差异,一种方法是将该文件转换为字符串并在其上运行diff。这确实需要您对.gitconfig和.gitattributes文件感到满意,并找到适合字符串转换的程序。

然而,您描述的问题是内存问题,因此您可能没有必要使用挂钩和配置。