Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git能否合并zip存档、MS Office文档等?_Git_Git Merge - Fatal编程技术网

Git能否合并zip存档、MS Office文档等?

Git能否合并zip存档、MS Office文档等?,git,git-merge,Git,Git Merge,Git for Windows 我正在学习Git。我的项目有一些projectname.hmxz文件,而不是简单的文本文件。此文件是zip存档(扩展名已更改)。它是程序使用的项目的特殊文件。我可以使用Git进行此类项目吗?这让我感到不安,因为每个分支都会修改projectname.hmxz文件的版本,它不是一个普通的文本文件。Git将如何将这些分支合并到一个projectname.hmxz文件中?我认为MS Office文档也会出现同样的问题:xls、doc等(因为它也不是纯文本) 我对常用的文

Git for Windows

我正在学习Git。我的项目有一些
projectname.hmxz
文件,而不是简单的文本文件。此文件是zip存档(扩展名已更改)。它是程序使用的项目的特殊文件。我可以使用Git进行此类项目吗?这让我感到不安,因为每个分支都会修改
projectname.hmxz
文件的版本,它不是一个普通的文本文件。Git将如何将这些分支合并到一个
projectname.hmxz
文件中?我认为MS Office文档也会出现同样的问题:xls、doc等(因为它也不是纯文本)


我对常用的文本文件没有问题,但这种情况如何?

Git只能合并文本文件,但是

您可以使用配置中的
textconv
选项将二进制文件转换为文本文件并对其进行区分,但如果没有好的转换器,这并不是一件小事


查看详细的解释。

除了选择一个版本而不是另一个版本之外,你做不了什么

假设您位于分支
此处
,并希望将其与分支
那里
合并。为此,您必须使用
递归
策略的
ours
选项(顺便注意,
递归
是默认的合并策略):

要执行相反的操作(支持
中的文件
),请运行:

请注意,它会影响所有文件的冲突,而不仅仅是二进制文件


有关更多信息,请参见
git merge(1)
manpage。我不知道Windows的等效版本,但您也可以在以下链接中找到它:

Zip文件:

不,它们是二进制的。对于二进制文件,合并冲突仅作为“使用版本A”或“使用版本B”解决

但是如果您从某个源代码构建它们,也许您可以对该源代码进行版本控制

MS Office文件:


不,不可能。但它们通常被视为文本文件,因此在第一次合并时git会损坏它们。您应该手动配置git,将其视为二进制文件。按照以下说明操作:

尽管git不能以本机方式合并二进制文件,但您可以配置自定义文件。因此,如果您拥有/编写了一个能够合并两个文件的程序,您可以使用该程序自动合并两个文件。然而,我能找到的唯一非演示驱动程序是。如果合并驱动程序失败,您仍然需要手动合并


此外,您还可以在git中进行配置。这样,您就可以将文件的版本传递给。同样,快速搜索并没有显示如何使用Word编写脚本。然而,有很多博客文章详细解释了如何做到这一点,因此我只参考手册。

不,git只能合并基于行的文本文件。即使是单行xml/html文件,你也不走运。关于使用
pandoc
区分Word文档的有趣博文:要合并二进制文件,你只能在当前分支上的文件和其他分支上的文件之间进行选择。请参阅@nwinkler,OP询问有关合并文件的问题。blogpost明确指出,Word文档是二进制文件,不能按原样合并,也就是说,如果不将它们转换为某种文本格式,就不能合并。我认为,在大多数情况下,这种转换是单向的。@Werkriter是的,我知道-这就是为什么我将链接作为评论而不是答案的一部分发布的原因。它没有回答这个问题,但它的方向与此类似——它可能会提供一些额外的背景信息。
git merge --strategy=recursive -Xours there
git merge --strategy=recursive -Xtheirs there