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

How to store open documents (.docx, .vsdx, ...) on Git?

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

不幸的是,打开的文档文件是二进制文件(实际上它们是 ZIP 存档)并且 Git 不太喜欢二进制文件。

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

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

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

对吗?

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


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

自由工作,无忧无虑地提交 Visio 文件。然后,当您对更改感到满意时,只需将目标文件移到目录下即可。提取并提交它。这可能看起来不够优雅,但如果您的 Visio 文件夹因内存问题而变得无法使用,您可以将其粉碎,因为您需要的一切都在其下方的 git 存储库中。 (防止大型二进制文件在存储库中占用 space 的唯一真正方法是不提交它们。)

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

添加本地远程


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

如果您喜欢冒险,可以研究 git 的“清理”和“污迹”过滤器(它们会在您提交和签出文件时被调用——它们旨在让您使用与你的团队不同的缩进规则,但你可以压缩和解压缩东西)。如果您正在提取 Visio 文件以便更好地检查更改,您可能会利用 git 的 textconv 配置。 Git 让我们对文件调用自定义差异,一种方法是将该文件转换为字符串,然后 运行 对其进行差异。这确实需要您熟悉 .gitconfig 和 .gitattributes 文件并找到适合字符串转换的程序。

然而,您描述的问题是内存问题,因此可能不需要您提供的挂钩和配置。