Git 显示更改后的相同文件

2024-05-11

当我似乎无法弄清楚更改时,Git 向我显示整个文件已更改。这是 cygwin git,但它也发生在 msysgit 中

$ git --version
git version 2.1.1

$ diff <(git show HEAD:File.cs) <(cat File.cs)
// Shows no differences

$ diff <(git show HEAD:File.cs | xxd) <(xxd File.cs)
// Shows no differences

$ git diff
// shows the entire file has changed

$ git hash-object <(git show HEAD:File.cs)
7b3762473342a5b040835bfef9f6b45c109ba48b

$ git hash-object <(cat File.cs)
7b3762473342a5b040835bfef9f6b45c109ba48b

$ git hash-object File.cs
7b3762473342a5b040835bfef9f6b45c109ba48b

I have

$ git config --get core.fileMode
false

and

$ git config --get core.autocrlf
true

我真的不知道发生了什么,一切都希望它们是相同的,但 git 想要创建一个提交,表示整个内容已被删除并重新创建。有更了解 git 管道的人有建议吗?我能想到的就是 git show 正在删除/标准化奇数行结尾。

UPDATE:

我很确定它会发生,因为开发过程就是这样的。从 git 签出,rsync 到开发机器,开发,rsync 返回。我相信 rsync 弄乱了一些行结尾。奇怪的是 git 没有报告行结尾,而且它似乎对到底发生了什么感到非常困惑。尽管比较文件的二进制表示形式似乎是相同的。

更新2:

所以这非常烦人,我觉得我偶然发现了 git 中的一个错误。

例如

$ git gc
$ git checkout -- .
$ git clean -fd
$ git status

> shows a heap of modified files

我很确定无论在哪里运行,都不会显示任何变化,但我得到了 20 个奇怪的事情的列表:(


这可能是由以下原因引起的.gitattributes文件向 git 指示它应该进行 EOL 标准化,但存储库包含非标准化行结尾。

简单的修复方法是删除相关行.gitattributes。这可能是

* text=auto

or

*.cs text

下面是如何发生这种情况的一个简单示例:

$ echo "Hello World" > example.txt
$ unix2dos example.txt #Make sure it uses CRLF
$ git add example.txt
$ git commit -m "commit 1"
$ #Instruct git that all .txt files should be normalized
$ echo '*.txt text' >> .gitattributes 
$ git add .gitattributes
$ git commit -m "commit 2"

现在存储库处于一种奇怪的状态,因为.gitattributes声称在将文件添加到索引之前应该对其进行规范化,但当前提交的版本未规范化。

然而,此时,git status没有注意到这一点,因为文件本身的大小或 mtime 自从添加到索引以来没有改变,所以索引被认为是最新的:

$ git status
On branch master
nothing to commit, working directory clean

但是任何使索引无效的行为都会导致 git 认为该文件是脏的:

$ touch example.txt
On branch master
Changes not staged for commit:

        modified:   example.txt

no changes added to commit (use "git add" and/or "git commit -a")

And git reset --hard或尝试将文件重置为其应有状态的任何其他操作都无法解决此问题。这是因为无法将文件添加到存储库中当前状态的索引中,因为 git 已被指示规范化该文件,并且规范化永远无法生成当前提交的对象。

这就是为什么GITATTRIBUTES(1)手册页建议在引入行结束规范化时显式使整个索引无效,如下所示:

$ echo "* text=auto" >>.gitattributes
$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

阅读“行尾转换”部分git 属性 http://git-scm.com/docs/gitattributes手册页了解更多详细信息。

而不是采用仅删除该行的快速解决方案.gitattributes,您可能想保留行结束标准化规则并立即对其进行标准化。这基本上只是意味着提交 20 多个不会消失的更改,但您可以按照上述有关引入行结束规范化的说明(减去编辑.gitattributes),然后确信这种情况不会再次发生,因为所有文件现在都以标准化结尾提交,并且您将来添加的任何文件也将被标准化。这主要是个人喜好。

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

Git 显示更改后的相同文件 的相关文章

  • 无法在 git 上获取 Http 工作

    我在拇指驱动器上使用 gitbash 作为 git 我的防火墙阻止了我 并且想设置我的 git 以进行 http 访问 我使用 github 并且已经看到了有关如何执行此操作的各种信息 但我还不够了解 无法让它为我自己工作 我在 php i
  • 我应该如何将更改从一个提交转移到另一个提交?

    我在同一个分支上有两个提交 一个接一个 我在第一次提交中添加了对文件 A 的更改 然后对其他文件进行了一些更改 然后进行了另一次提交 现在我希望对文件 A 的更改是在第二次提交而不是第一次提交 最优雅的方式是什么 我知道这是一个老问题 但我
  • Git 用户配置文件 - 自定义忽略

    我们有一个由 5 名开发人员组成的团队致力于硬件项目 我们有一个 user config h 文件 其中包含每个用户的特定环境和偏好的 defines 例如他们使用的硬件版本 是否应该打开声音等 目前 该文件位于我们的 gitignore
  • 无论我做什么,我都无法推送我的代码并不断收到相同的错误

    我正在尝试将代码推送到远程分支 但不断收到此错误 rejected non fast forward error failed to push some refs to email protected cdn cgi l email pro
  • 自给定提交以来 git 中的作者列表

    我想要一种列出所有 git 作者的方法 仅自给定提交以来 是独特的 这两个很简单 我在网上看到过一些解决方案 大多数使用git log format 但我看到的都不符合附加要求 按提交日期排序 因此 如果约翰 史密斯 John Smith
  • 切换到工作区并在 Xcode 中添加 CocoaPods 后提交 git 吗?

    我刚刚在 Xcode 5 中将 CocoaPods 添加到我当前的项目中 当然 CocoaPods 创建了一个工作区 并且我已在 Xcode 中启动了该工作区 我在工作区中看到了我的项目和 Pods 项目 我的项目从第一天起就处于源代码控制
  • 是否可以使用“最小”算法进行交互式添加?

    当从快照计算变更集时 Git 并不总是正确选择块边界 git diff has a diff algorithm允许在这方面进行一些调整的选项 git diff minimal有时会给出比git diff alone 有没有办法获得相同的优
  • 如何让“git status”始终使用短格式?

    我想要git status始终使用短格式 git status short M file1 M dir file2 file untracked3 dir file untracked4 似乎不存在这方面的配置选项 并且git config
  • git 索引到底包含什么?

    Git 索引到底包含哪些内容 可以使用什么命令查看索引内容 感谢您的所有回答 我知道索引充当暂存区 提交的内容是在索引中而不是工作树中 我只是好奇索引对象由什么组成 我猜它可能是文件名 目录名 SHA 1 对的列表 也许是一种虚拟树 在 G
  • 本地分支显示在 GitHub 的“网络”视图上

    我们使用 Git 我们的工作流程由 dev 和 master 分支组成 它们位于 GitHub 和每个开发人员的本地存储库上 不会直接在 master 或 dev 上执行任何工作 而是在本地分支中执行工作 并且仅在 dev 上进行合并 然后
  • 在 emacs 的文件中不断出现的这些 ^M 是什么?

    我认为这可能与 TextMate 有关 但我们在一个小团队中工作 并且在 git 中几乎相同的文件的全文件冲突方面遇到了一些问题 在一个分支中 文件的每一行都附加了 M 这是什么神秘的事 M角色应该做什么 它从哪里来 我们的开发人员在 Wi
  • 在 MySQL 数据库上使用版本控制 (Git)

    我是一名 WordPress 设计师 开发人员 越来越多地使用版本控制 特别是 Git 尽管我确实在某些项目中使用 SVN 我目前正在使用 Beanstalk 作为我的远程仓库 将所有 WordPress 文件添加到我的存储库中是没有问题的
  • git svn 克隆特定分支并合并

    我希望将我的代码库从 svn 迁移到 git 我的 svn 仓库中有太多分支 我只想克隆几个分支并将它们合并在一起并将其推送到 git 我想避免克隆所有分支 因为这需要很长时间 我该如何实现这一目标 完成后 我想定期从这些 svn 分支获取
  • Git 将分支从一个远程推送到另一个远程?

    我设置了以下遥控器 git remote korg rorg 以及以下分支 git branch a no branch remotes korg gingerbread remotes korg gingerbread release r
  • 使用 reposurgeon 将 svn repo 转换为 git

    我正在尝试使用 svn repo 转换为 git再生外科医生 http www catb org esr reposurgeon 这是我所做的 有一个具有 svn 名称 gt git 名称映射的 repo map 文件 svnadmin d
  • Gitlab-runner 更改 builds_dir

    我在生产服务器上的默认 builds dir 是 root builds qL8eZYTH 0 faramarzqoshchi testing gitlab runner 我希望它是这样的 home domain name public h
  • 无法在 github 上的特定分支上生成 git no such file or directory

    问题出在这个 fork repo 上 https github com RubenWillems CCNet https github com RubenWillems CCNet 我可以在同一台笔记本电脑上安装其他叉子 但不能使用此叉子
  • 在 Git 中查看已删除的文件

    我已使用 Git 删除了一个文件 然后又提交了 因此该文件不再位于我的工作副本中 我想查看该文件的内容 但不想真正恢复它 我怎样才能做到这一点 git show HEAD path to file 您可以使用显式提交标识符或HEAD n查看
  • cygwin有java sdk吗?

    cygwin有java sdk吗 如果有一个使用 cygwin 文件系统和 X windows 进行显示的本机 cygwin 实现 那就太好了 不幸的是我不知道这样的版本 我认为移植 OpenJDK 也需要付出很大的努力 但我还没有尝试过
  • 编辑 git patch 给出“您编辑的块不适用”

    我正在交互地添加一个文件 git add template panels panel reports php p diff git a template panels panel reports php b template panels

随机推荐

  • Git:man 命令不起作用

    在 Git Bash 中 他们给了我一个error用于返回 man command man git bash man command not found 我的 Git 版本 git version git version 2 18 0 wi
  • Jquery 自动完成通配符

    我正在使用jquery ui autocomplete插件 但我注意到当它搜索时 它使用像这样的通配符 value 我正在使用邮政编码的自动完成功能 我认为这会让像这样的通配符更有意义 value 因此 当您开始输入时 它只会过滤掉以您已输
  • 运行 Django 测试时如何将 DEBUG 设置为 True?

    我目前正在运行一些 Django 测试 看起来DEBUG False默认情况下 有没有办法运行我可以设置的特定测试DEBUG True在命令行还是在代码中 对于测试用例内的特定测试 您可以使用 override settings 装饰器 f
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 从发布的文件中删除 PDB 引用

    在使用任何 IDE 调试和创建文件后 我总是会查看最终的二进制可执行文件或 DLL 现在我正在尝试 Visual C 2010 寻找最佳版本 没有垃圾或不必要的引用 因此 我创建了一个包含两个项目的新解决方案 一个可执行文件及其 DLL V
  • Python 上每个系数具有特定约束的多元线性回归

    我目前正在数据集上运行多元线性回归 起初 我没有意识到我需要限制自己的体重 事实上 我需要有特定的正权重和负权重 更准确地说 我正在做一个评分系统 这就是为什么我的一些变量应该对音符产生积极或消极的影响 然而 当运行我的模型时 结果不符合我
  • Pandas如何将多个函数应用于数据框

    有没有办法像 DataFrameGroupBy agg 函数那样将函数列表应用于 DataFrame 中的每一列 我发现了一个丑陋的方法来做到这一点 df pd DataFrame dict one np random uniform 0
  • Google Maps iOS SDK:地图上东西点之间的距离

    如何计算地图东点和西点之间的距离 以米为单位 假设用户更改了滚动地图的位置 然后我使用 mapView didChangeCameraPosition delegate 方法捕获移动 但我不知道如何计算距离 这是一个辅助函数 可用于计算两个
  • EmberJS:如何为 ember-data RESTAdapter 中的模型提供特定的 URL?

    问题一 如果我有一个名为 Company 的余烬数据模型 我如何告诉它点击 businesses and businesses id而是检索记录 有没有办法指定给定模型的 url 更好的是 像 BackboneJS 一样 我可以在运行时计算
  • Azure webjob - 队列处理功能的正常关闭

    我有一堆 webjob 队列处理函数 public static void ProcessSomething QueueTrigger testrequest TestThing thing TextWriter logger Cancel
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 如何从 WinRT StreamSocket 读取所有可用数据并清空 inputStream?

    我想在向套接字写入新数据之前读取当前正在等待套接字的所有数据 WinRT中的读取方法都是异步的 所以我不能简单地while直到套接字为空 由于我确实想丢弃套接字上的数据 因此我不想使用读取器 而是直接从套接字读取数据IInputStream
  • 改变换行行为

    我可以在 TextView 中使用 Spannable 创建具有不同外观 下划线 删除线等的跨度 我怎样才能做同样的事情来改变换行行为 特别是 我不希望电子邮件地址在中间换行 我希望它像一个单词一样 I tried 包裹在一起跨度 http
  • 如何在Python中获取套接字的外部IP?

    当我打电话时socket getsockname 在套接字对象上 它返回我的机器的内部 IP 和端口的元组 但是 我想找回我的外部IP 最便宜 最有效的方式是什么 如果没有外部服务器的配合 这是不可能的 因为您和另一台计算机之间可能存在任意
  • CSS 3.0 用户选择属性替换

    我正在使用 CSS 3 0 它抱怨 用户选择 属性不存在 有谁知道合适的替代品或替代品是什么 user select is 回到规范 https drafts csswg org css ui 4 propdef user selectCS
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • [karma-server]:类型错误:无法读取未定义的属性“范围” - CI 环境中的 Angular 单元测试

    我们的 CI CD 管道停止处理 ng test 作业并失败并显示以下错误消息 karma server TypeError Cannot read property range of undefined at handleRangeHea
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 使用 sapply 的列表和矩阵

    我有一个也许是基本的问题 我在网上搜索过 我在读取文件时遇到问题 尽管如此 我还是按照 Konrad的建议设法读取了我的文件 我很欣赏这一点 How to get R to read in files from multiple subdi
  • Git 显示更改后的相同文件

    当我似乎无法弄清楚更改时 Git 向我显示整个文件已更改 这是 cygwin git 但它也发生在 msysgit 中 git version git version 2 1 1 diff lt git show HEAD File cs