如果 diff'ing 不在存储库中,则没有选项可以忽略文件模式吗?

2023-11-29

我在一些自动化测试中使用 git 作为一种在 Linux 和 Windows 上使用相同语法的“diff”命令的简单方法。它工作正常,但由于我正在比较的文件位于共享驱动器上,我一直在偶然发现文件模式的差异被(不必要地)报告为更改。我环顾四周,发现core.filemode在这种情况下推荐设置 - 但在我的实验中,在工作目录之外时似乎不会使用该设置。

这是我用于测试的 diff 命令:

git diff --ignore-space-at-eol --no-index createdFile expectedFile

Output:

diff --git a/createdFile b/expectedFile
old mode 100644
new mode 100755

(我想忽略文件模式的差异)。

我尝试过的:

git -c core.filemode=false diff --ignore-space-at-eol --no-index createdFile expectedFile

正如所建议的,例如在这个答案中。然而,输出仍然与上面相同(git版本:2.25.1 - 也许这个文件模式实际上在那里不起作用,正如其中暗示的那样here?) 环境core.filemode全球范围内也不起作用。

我当前的解决方法是将“预期”文件复制到具有默认权限的 Linux 文件系统中的某个位置。如果可以避免这种情况就好了……


有一个解决方法: 显示 git diff,忽略文件权限更改? (泽德指出git diff -G.成功了)。注意:中的点(句号)-G.是这里的关键。仅模式差异没有差异文本,因此.匹配失败;所有其他差异确实有差异文本,即使它是纯粹的删除,所以.匹配某些内容,然后显示文件。但这只是一种解决方法,而不是真正的解决方案。


要扩展一下我上面的评论:确实没有办法完全按照您想要的方式执行(除了暂时 chmod-ing 文件,或复制它们并 chmod-ing 副本)。

当你跑步时git diff --no-index(或任何差异--no-index是隐含的),Git 调用lstat在每个文件上查明它是否是常规文件或目录以及其模式是什么。这个电话是从diff-no-index.c43号线附近,其最后几行包括:

else
        *mode = st.st_mode;

这假设操作系统,无论它是什么,都会产生持续的 st_mode可执行位,即使它们不可信。

为了使这个遵守core.filemode设置,最后一行可能需要阅读,例如:

        *mode = !S_IFREG(st.st_mode) || trust_executable_bit ?
            st.st_mode : st.st_mode & ~0111;

例如。这也许可以简化:我认为 Git 不关心x目录上的位,所以总是屏蔽掉0111可能就足够了,当trust_executable_bit是假的。

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

如果 diff'ing 不在存储库中,则没有选项可以忽略文件模式吗? 的相关文章

  • “git merge --squash”的正确用例是什么?

    有些人喜欢git merge squash由于以下原因 压缩到单个提交使您有机会清理混乱的 WIP 提交 并为您要合并的更改提供良好的理由 https coderwall com p qkrmjq git merge squash http
  • Git 身份验证 - 以新用户身份拉取

    以下命令集可以正常工作 mkdir carboncake cd carboncake git init git remote add origin email protected cdn cgi l email protection rep
  • 使用 Git 在线使用 TFS 的 Visual Studio 2013:自动保存文件签入

    我目前正在将 Visual Studio Premium 2013 Update 3 与 Team Foundation Server Online 结合使用并使用 Git 存储库 直到最近 我已经成功使用 Git Repo 几个月了 现在
  • Azure git 部署 - 第二个程序集中缺少引用

    我正在尝试将 Bitbucket 部署设置到 Azure 网站 我成功链接了 Bitbucket 和 Azure 但是当我推送到 Bitbucket 时 我在 Azure 站点上收到以下错误 如果我单击 查看日志 它会显示以下编译错误 D
  • 根据环境执行特定的Geb测试

    我正在 Grails 项目中执行一组规范测试 当我在本地时 我需要执行一组特定的规范 当我运行预生产环境时 我需要执行另一组规范 我当前的配置正在同时执行两个环境的所有规范 这是我想避免的 我有多个环境 已在 GebConfig 中配置 e
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 警告:引用名称“xxx”不明确

    我想知道为什么我收到 refname is ambigeous 的警告 这是否意味着名称以该字符串开头的分支不超过两个 但这里没有 Thanks git checkout B03799 warning refname B03799 is a
  • git tag --contains 如何工作?

    从几天前开始 我一直在尝试确定在哪个版本 由标签指定 中部署了特定修复 由提交指定 这里的一些帖子发布了这一点git tag contains是收集这些信息的方法 但是选项的文档 https git scm com docs git tag
  • 将主分支的提交合并到另一个分支,但不合并两个分支

    我有 git 存储库和一个主分支 我决定开发新功能 并且创建了新分支 new branch 我已经在 new branch 中创建了一些提交 但我还没有完成新功能 我决定修复 master 分支中的一些错误 因此我切换到 master 分支
  • 如何从父克隆中过去的提交中获取 git 子模块的关联提交 ID?

    有没有一种方法 除了实际检查父提交之外 还可以根据父克隆中的提交 ID 确定子模块的 SHA 1 提交 ID 我知道我能找到现在与 SHA 1 关联git submodule 这是一个例子 我有一个带有单个子模块的克隆foo上个月情况发生了
  • 如何摆脱 gerrit 中的错误依赖关系

    看起来 当使用 gerrit 时 默认情况下所有更改都依赖于前一个更改 我不会分支进行新的更改 我只是在主分支上工作 然后将提交的更改推送到远程源 主分支 即使两次提交彼此无关 每次都会创建依赖关系 我遇到了一些问题 这让我认为我没有正确地
  • 如何使用 git 撤消所有空白更改

    我有一个 git 存储库 我在其中本地替换了很多文件 git status 现在显示许多修改的文件 有些是 真正修改过的 其他的只是行结尾不同 我希望那些仅通过行结尾不同的内容消失 git重置它们 但是 我似乎找不到 linux pipin
  • git checkout HEAD -- 和有什么区别?和 git reset --hard HEAD?

    我已经查看了这个 stackoverflow 链接 但我认为我所要求的之间的细微差别是使用HEAD在结账命令中 因为他们的建议似乎不起作用 git reset hard HEAD 和 git checkout 之间有区别吗 https st
  • 无法快速删除 Git 中的许多文件

    我删除了 Git 分支中的 777 个文件新功能 by rm example 我愿意承诺 Git 要求我手动删除每个已删除的文件 git rm file 对于所有名称不相似的 777 个文件 编写上述命令将花费大量时间 如何删除我的 Git
  • 未签出...捆绑安装无法修复帮助!

    https github com intridea omniauth git at master is not checked out Please run bundle install Bundler GitError 那我该怎么办 捆绑
  • 如何克隆没有提交的裸 git 存储库并在克隆过程中获取正确的 HEAD 引用?

    这个答案 https stackoverflow com a 26898059 438273声称该问题已在版本中修复1 8 4 3 但是我在版本中还是遇到了2 25 1 它似乎在版本中按预期工作2 32 0 所以我不确定它是什么时候真正修复
  • 原始文件被分成另外两个文件,git 有没有办法查看内容去了哪里?

    我的问题 我是一名代码审查员 我在GIT中有一个情况 before a txt 然后开发人员决定拆分内容a txt分成 2 个文件 并在一次提交中添加一些更改 after b txt 很少的变化和c txt 一些变化 有没有简单的方法可以看
  • 以编程方式将工作项关联到拉取请求

    我可以得到 https www visualstudio com en us docs integrate api git pull requests get a pull request https www visualstudio co
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • 在防火墙后面使用 GitHub,无需 SSH 访问

    我真的很想使用 GitHub 但我的公司一切都被锁定了 现在 我只能通过HTTP协议使用Tortoise SVN 我可以以同样的方式使用 GitHub 吗 如果是这样 怎么办 我认为你一直能够克隆github https github co

随机推荐

  • 使用 JMH 时出现奇怪的输出

    我正在使用 jmh 来对一个简单的应用程序进行基准测试 来自 SO 问题java fork join 中出现意外的可扩展性 使用 Maven 并遵循命令行方法 如建议的http openjdk java net projects code
  • Java - 如何检查另一个(非 Java)进程是否正在 Linux 上运行

    我遇到了一些奇怪的问题 我们正在使用 Xvfb 虚拟桌面管理器 并希望在继续之前确保它正在运行 使用纯 shell 我可以轻松做到这一点 ps ef grep Xvfb grep v grep 这正是我所需要的 一行包含有关 Xvfb 过程
  • 如何进一步处理导致 Ruby FasterCSV 库抛出 MalformedCSVError 的数据行?

    传入数据文件包含格式错误的 CSV 数据 例如非转义引号 以及 有效 CSV 数据 例如包含换行符的字段 如果检测到 CSV 格式错误 我想对该数据使用替代例程 使用以下示例代码 为简单起见进行了缩写 FasterCSV open file
  • 应该避免使用 DataFrame 函数 groupBy 吗?

    This link and others告诉我火花groupByKey如果有大量键 则不要使用 因为 Spark 会打乱所有键 这同样适用于groupBy功能也一样 或者这是不同的东西 我问这个是因为我想做这个问题尝试这样做 但我有大量的钥
  • Win7和Win XP关机前运行程序

    我知道有关于此的线程 我找到了这个 如何安排任务在关闭窗口时运行但这对我来说失败了 我在 LabView 中编写了一个小程序并用它制作了一个 exe 当我在正常的 Windows 操作中双击 exe 时 它 运行完美 只需几秒钟即可完成 然
  • #include 文件指令不起作用

    所以我需要照顾这个新网站 http www kineformeconcept com mtl index shtml 自从客户端移动到托管位置后 菜单就不再显示 我从未使用过 include file whatever html 指令 我现
  • 在 C# 中使用 RotateFlip 旋转图像

    我有这段代码用于在 C Windows 窗体应用程序中的 if 循环中旋转图像 但窗体在窗体输出中不显示任何内容 有人可以帮忙吗 this splitContainer1 Panel2 Controls Add PictureBox1 Pi
  • 在Python中分割列表

    我正在用 Python 编写一个解析器 我已将输入字符串转换为标记列表 例如 2 x 3 1 4 3 x 2 我希望能够将列表拆分为多个列表 例如str split 功能 但似乎没有办法做到my list split 有任何想法吗 Than
  • ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象

    基本上 我有一个表 其中包含一家公司的一些属性 这是 主 表 它们的 ID 用于许多其他表 我基本上是通过这个方法找到他们的ID private Company currentcompany Company cuco db Companie
  • Magento Catalog_category_flat_store_1 不存在

    我有一个运行 Magento CE 1 7 的现有商店 突然从今天早上开始 没有任何代码更新 我收到以下错误 a 5 i 0 s 111 SQLSTATE 42S02 未找到基表或视图 1146 表 XXXXXX catalog categ
  • 如何应用TextBox控件模板?

    我正在尝试简化一些代码并提高可维护性 我最初正在寻找一种使文本框向左对齐的方法 它可以收缩和扩展到最大值 而无需在达到最大值后在网格单元内居中 所以我开始编写一些这样的代码
  • preload.php 文件在哪里?它是如何生成的?

    对于 Symfony 5 1 和 PHP 7 4 我想添加preload php在opcache中 Symfony 文档 在容器编译期间 例如 运行cache clear命令时 Symfony 在 config 目录中生成一个名为 prel
  • 如何将表列(通过 SQL 查询返回)作为 CheckedListBox 中的项目列出?

    如果我有下表 canAssign 1 有没有办法添加列标题文本 例如 canAssign等 到CheckedListBox作为用户可以检查的标签 我找到的所有答案都列出了value作为标签 像这样 1 而不是这个 canAssign 仅作为
  • 如何将 MKV 字节读取为视频?

    我正在接收 MKV 视频片段 以字节为单位 我需要获取它的第一帧以供以后处理 而不将视频保存在磁盘中 对于类似的图像问题 我使用 OpenCV 或 PIL 一切正常 但是 我无法对视频数据执行相同的操作 有什么技巧可以帮助我将视频从字节读取
  • Python 的 subprocess shell=True 属性在 Java 中的等价物是什么?

    我已经使用Python很长时间了 python 的系统和子进程方法可以采用 shell True 属性来生成设置环境变量的中间进程 在命令运行之前 我一直在使用 Java 来回使用 Runtime exec 来执行 shell 命令 Run
  • MSAL UserAgentApplication:本地存储不工作

    UserAgentApplication localCache localStorage 不起作用 重现步骤 var client new Msal UserAgentApplication config aadClientId confi
  • 在 Swift 中使用 Regex 进行简单搜索时,如何避免由于搜索字符串中的特殊字符而导致的错误?

    我正在使用正则表达式在文本视图中搜索单词 我实现了一个文本字段和两个开关作为选项 全字和匹配大小写 当您在搜索字段中输入普通单词时 一切正常 但当我输入 或 等特殊字符时 我会收到错误 我得到的错误是这样的 Error Domain NSC
  • 游戏中心邀请立即失败

    我们在发送邀请时遇到问题GKGameCenterViewController 视图控制器打开得很好 但是当我们尝试向某人发送邀请时 它立即失败 两个帐户都启用了游戏中心邀请并通过GKGameViewController工作正常 这是我们用来
  • 使用 VBA 将 JSON 解析为 Excel

    我在 VBA 中解析 JSON 数据时遇到一些问题 我已经尝试了网上的所有示例 但仍然无法解决问题 我设法做的是使用另一个从另一个网站提取数据的 VBA 代码将 JSON 数据以原始格式提取到 Excel 中 我粘贴了下面有效的代码 它不是
  • 如果 diff'ing 不在存储库中,则没有选项可以忽略文件模式吗?

    我在一些自动化测试中使用 git 作为一种在 Linux 和 Windows 上使用相同语法的 diff 命令的简单方法 它工作正常 但由于我正在比较的文件位于共享驱动器上 我一直在偶然发现文件模式的差异被 不必要地 报告为更改 我环顾四周