Git 二进制文件与 .gitattributes 中的 -diff

2024-05-07

在 .gitattributes 中有以下等价内容:

*.chm binary

*.chm -diff

我努力了*.chm二进制文件,但恐怕它仍然可能尝试合并这些文件。是-diff更适合我打算做什么?

另外,在提交给定类型的文件后,此设置是否适用?

Thanks


谢谢你的提问,你问的是:

我努力了*.chm二进制文件,但恐怕它仍然可能尝试合并这些文件。是-diff更适合我打算做什么?

内置宏属性binary相当于:

[attr]binary -diff -merge -text

(ref: 定义宏属​​性 - Gitattributes https://git-scm.com/docs/gitattributes#_defining_macro_attributes)

所以从你的问题来看,害怕-diff over binary可能更合适:差别不大。通常两者都应该足够了,git 属性文档名称-diff将文件标记为二进制的最简单方法之一。那么为什么不选择它呢?.chm files?

请参阅以下示例,该示例显示了问题中某些属性的效果:

.gitattributes file
[1]                     | [2]                   | [3]
------------------------|-----------------------|------------------------
*.chm binary            | *.chm -diff           | *.chm binary
*.chm -diff             |                       |

$ git check-attr -a help.chm
------------------------|-----------------------|------------------------
help.chm: binary: set   | help.chm: diff: unset | help.chm: binary: set
help.chm: diff: unset   |                       | help.chm: diff: unset
help.chm: merge: unset  |                       | help.chm: merge: unset
help.chm: text: unset   |                       | help.chm: text: unset

REMARK: [1]上面的输出与单行相同*.chm -diff binary or *.chm binary -diff。强烈暗示所有这些在逻辑上都等同于*.chm binary and 不同的 to *.chm -diff.

对于这个问题如果-diff is more适合您的意图,这取决于其他git 属性在您的配置中以及您认为合适或不合适的。由于您没有在问题中分享它们,我可以认为它们的答案是未定义的(这里无意冒犯,属性可以设置、未设置或未定义)。但这样的话答案就不完整了。所以一切皆有可能,并且使用binarymarco-attribute 可以取消设置或定义先前已设置或未定义的属性merge and/or text属性在存储库配置中已经有效。

所以binary看起来比-diff对我来说只是为了按下答案(不太可能好),因为您担心合并二进制文件,这是binary取消设置的宏属性merge具有以下后果的属性:

Unset

将当前分支的版本作为暂定合并结果,并声明合并有冲突。这适用于没有明确定义的合并语义的二进制文件。

(ref: merge- 执行三向合并 - Gitattributes https://git-scm.com/docs/gitattributes#_merge)

这与使用相同binary内置合并驱动程序。所以就像binary宏属性建议,您将合并显式标记为“二进制”。

区别于-diff- 这也隐式地将文件标记为二进制文件 -binary宏属性does改变merge属性,因此取消设置diff属性允许有一个与未设置不同的merge属性合并驱动程序正在运行(这是现有答案正确的地方,使用binary不等于-diff- 它不完整地列出了宏观思想的属性,并错过了宏观思想的未设置merge属性 - 可能尚未记录正在使用的版本,可能是 git 版本

正如您可能想象的那样,这些都是非常精细的细节。简而言之-diff应该足够了,binary可能不会造成伤害,但会取消设置比正常需要更多的属性,因此在合并时更加明确(不提及text属性),但可能会产生不需要的副作用和/或使将来的维护变得更加困难(这是非常理论化的,但是它可能会做更多的事情,这让您一开始就感到害怕)。

我个人的答案是,不要害怕,遵循你自己的喜好-diff直到遇到实际问题。您很可能很久以前就已经解决了这个问题。


也感谢您提出的附加问题:

另外,在提交给定类型的文件后,此设置是否适用?

Yes.

如有疑问,请尝试使用$GIT_DIR/info/attributes(具有最高优先级),因为它是您的克隆本地的并且从未提交,然后使用进行验证git check-attr它如何影响已提交文件的属性。

Git 不会将每个提交的文件的属性存储在存储库中,仅存储在.gitattributes文件(如果已提交)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git 二进制文件与 .gitattributes 中的 -diff 的相关文章

  • git 预提交钩子格式代码 - Intellij/Android Studio

    本要点展示了如何在预提交时使用 Eclipse 格式化程序自动格式化 Java 代码 Source https gist github com ktoso 708972 https gist github com ktoso 708972
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • refname 不明确且拉取失败

    我运行了以下命令 因为我想将生产分支移回而不必先签出 git branch f production HEAD 1 现在 当我检查生产时 我收到以下警告 warning refname production is ambiguous 然后我
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • 如何将更改移出主分支

    基本问题 但这一直发生在我身上 进行更改working branch 切换到master git merge working branch git push cap deploy 到舞台 泡一杯新茶 然后我回来思考其他事情并开始做出一些改变
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • 如何正确使用“mvn release:prepare”?

    我尝试了这个命令 用dryrun在我的 Maven 项目上进行测试 mvn release clean release prepare DdryRun true DgenerateBackupPoms false Dtag solocal
  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • git 认为文件已更改

    我在一台机器上对一个项目做了一些工作 然后推送到 github 在另一台机器上克隆并做了一些工作 然后推送 然后我回到第一台机器并做了一个pull 现在 第一台机器认为项目中最初的所有文件都已更改 我试过了 git checkout f a
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • Git 提交失败:“请使用 -m 或 -F 选项提供消息。”

    当我键入 git commit 命令来提交文件时 我收到以下错误消息 Microsoft Visual Studio 微软 找不到命令 错误 核心编辑器 Microsoft Visual Studio 存在问题 请使用 m 或 F 选项提供
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t

随机推荐