Git 可以合并 zip 存档、MS Office 文档等吗?
Can Git merge zip-archives, MS Office documents, etc?
Git 对于 Windows。
我正在学习Git。我的项目有一些 projectname.hmxz
文件而不是简单的文本文件。该文件是一个 zip 存档文件(扩展名已更改)。它是Help&Manual程序使用的工程专用文件。我可以对此类项目使用 Git 吗?这让我感到不安,因为每个分支都会有 projectname.hmxz
文件的修改版本,这不是通常的文本文件。 Git 如何将这些分支与单个 projectname.hmxz
文件合并?我认为 MS Office 文档也会有同样的问题:xls、doc 等(因为它也不是纯文本)。
我对普通的文本文件没有问题,但是这样的情况呢?
Git 只能合并文本文件,但是...
您可以将二进制文件转换为文本文件并使用配置中的 textconv
选项对它们进行比较,但如果您没有一个好的转换器,这并不是微不足道的。
检查 this answer on superuser 以获得详细说明。
除了选择一个版本而不是另一个版本之外,您无能为力。
假设您在分支 here
上并希望将其与分支 there
合并。为此,您必须使用 recursive
策略的 ours
选项(顺便说一下,请注意 recursive
是默认的合并策略):
git merge --strategy=recursive -Xours there
做相反的事情(喜欢来自 there
的文件),运行:
git merge --strategy=recursive -Xtheirs there
请注意它会影响所有文件的冲突,而不仅仅是二进制文件!
有关详细信息,请参阅 git-merge(1)
联机帮助页。我不知道 Windows 等效项,但您也可以在以下 link 中找到它:https://git-scm.com/docs/git-merge
Zip 文件:
不,它们是二进制的。对于二进制文件,合并冲突仅解决为“使用版本 A”或“使用版本 B”。
但是如果您从某个来源构建它们,也许您可以对该来源进行版本控制。
MS Office 文件:
不,不可能。但它们通常被视为文本文件,因此在第一次合并时 git 会损坏它们。您应该手动配置 git 以将它们视为二进制文件。按照此说明操作:
虽然 git 无法原生合并二进制文件,但您可以配置自定义 merge-drivers. Thus if you have/write a program that is actually able to merge two files, you can use that to automatically merge two files. However the only non-demo driver I could find was the npm-merge-driver。如果 merge-driver 失败,您仍然需要手动合并。
此外,您还可以配置 merge tools in git. That way you can pass the two/three versions of a file to program of your choice。再次快速搜索没有显示如何使用 Word 编写脚本的方法。但是,有很多博客条目详细解释了如何执行此操作,因此我仅参考手册。
Git 对于 Windows。
我正在学习Git。我的项目有一些 projectname.hmxz
文件而不是简单的文本文件。该文件是一个 zip 存档文件(扩展名已更改)。它是Help&Manual程序使用的工程专用文件。我可以对此类项目使用 Git 吗?这让我感到不安,因为每个分支都会有 projectname.hmxz
文件的修改版本,这不是通常的文本文件。 Git 如何将这些分支与单个 projectname.hmxz
文件合并?我认为 MS Office 文档也会有同样的问题:xls、doc 等(因为它也不是纯文本)。
我对普通的文本文件没有问题,但是这样的情况呢?
Git 只能合并文本文件,但是...
您可以将二进制文件转换为文本文件并使用配置中的 textconv
选项对它们进行比较,但如果您没有一个好的转换器,这并不是微不足道的。
检查 this answer on superuser 以获得详细说明。
除了选择一个版本而不是另一个版本之外,您无能为力。
假设您在分支 here
上并希望将其与分支 there
合并。为此,您必须使用 recursive
策略的 ours
选项(顺便说一下,请注意 recursive
是默认的合并策略):
git merge --strategy=recursive -Xours there
做相反的事情(喜欢来自 there
的文件),运行:
git merge --strategy=recursive -Xtheirs there
请注意它会影响所有文件的冲突,而不仅仅是二进制文件!
有关详细信息,请参阅 git-merge(1)
联机帮助页。我不知道 Windows 等效项,但您也可以在以下 link 中找到它:https://git-scm.com/docs/git-merge
Zip 文件:
不,它们是二进制的。对于二进制文件,合并冲突仅解决为“使用版本 A”或“使用版本 B”。
但是如果您从某个来源构建它们,也许您可以对该来源进行版本控制。
MS Office 文件:
不,不可能。但它们通常被视为文本文件,因此在第一次合并时 git 会损坏它们。您应该手动配置 git 以将它们视为二进制文件。按照此说明操作:
虽然 git 无法原生合并二进制文件,但您可以配置自定义 merge-drivers. Thus if you have/write a program that is actually able to merge two files, you can use that to automatically merge two files. However the only non-demo driver I could find was the npm-merge-driver。如果 merge-driver 失败,您仍然需要手动合并。
此外,您还可以配置 merge tools in git. That way you can pass the two/three versions of a file to program of your choice。再次快速搜索没有显示如何使用 Word 编写脚本的方法。但是,有很多博客条目详细解释了如何执行此操作,因此我仅参考手册。