- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个行尾问题让我抓狂...
背景:过去,我使用的是 core.autocrlf 设置,但我发现我遇到了不同的存储库表现不佳的问题(我在 Windows 上工作,我有一些需要 LF 结尾的存储库和一些需要 CRLF 结尾的存储库)。所以我试图摆脱它并在每个存储库中使用 .gitattributes (我希望 Git 闭嘴并让我管理行尾!)。所以我现在有 core.autocrlf=false
和一个 .gitattributes
对于我正在处理的 Visual Studio 项目,它看起来像这样:
# Don't do any end of line normalization.
* -text
# Always treat these files as binary. Not strictly necessary, but can't hurt.
*.png binary
*.gif binary
*.jpg binary
*.jpeg binary
*.dll binary
*.doc binary
*.docx binary
*.xls binary
*.xlsx binary
*.pdf binary
我已将存储库中的所有文件强制为以 unix2dos 结尾的 CRLF,并确认它们在工作目录中具有正确的行结尾,并将它们全部 checkin 。是的,我遵循了此处的建议 Trying to fix line-endings with git filter-branch, but having no luck
这几乎是完美的。
问题 每当我更改文件时,git 都会报告它在更改的行上有行尾差异,例如,如果原始行是
string s;
修改后的行是
string sucks;
git diff 显示变化为
string sucks;^M
看起来 Git 认为 repo 中的文件仍然有 LF 结尾(因为它们在过去被规范化了?)。 ^M 会导致大量视觉噪音,我不确定这是否是其他任何问题的征兆。我不明白为什么 Git 会报告差异,因为我已经在上一次提交中 checkin 了所有以 CRLF 结尾的文件,实际上是在这次提交之前的提交。
那么,为什么我会得到这些“虚假”差异,我该如何摆脱它们呢?
最佳答案
哇哦!我想我找到了答案。本站http://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff/建议做
git config [--global] core.whitespace cr-at-eol
这确实关闭了“git diff”。当然,最好的解决方案是在 .gitattributes 文件中执行等效操作,以便它与存储库保持一致并且不依赖于用户的设置。
.gitattributes 的最终设置
我花了一些时间在 Linux 和 Windows 上试验 repos 以及具有 Unix 和 Windows 行尾的文件,我相信如果你只给你的 git repo 一个 .包含两行的 gitattributes 文件:
* -text
* whitespace=cr-at-eol
第一行阻止 git 执行任何行结束规范化,第二行停止 git-diff 在行尾突出显示 CR 字符。我能找到的唯一缺点是,如果将文件从 DOS 转换为 Unix,反之亦然:git-diff 将显示文件已更改,但不会突出显示原因,而只是显示每一行删除然后添加。我可以接受这个,因为它是一个非常罕见的手术(或者应该是)。
以上将行尾管理的负担放在了提交者身上。这是应该的,我不相信我的 VCS 工具应该尝试变魔术,成千上万的网页和关于 git 处理行尾的问题证明他们在这里做出了错误的决定。
变化
如果将第一行替换为
* eol=lf
然后文件在工作目录中将始终以 LF 结尾。这对于必须跨 Unix 和 Windows 工作的存储库非常方便,例如“.dotfiles”。同样,eol=crlf
将强制使用 Windows 风格的行结尾。 警告 这也会将 CRLF 转换为二进制文件!在 how to config git repo so that all files are stored with line-ending LF ( not CFLF ) ? 查看我的评论所以你还需要使用文件路径或告诉 git 哪些文件是二进制的。 https://help.github.com/articles/dealing-with-line-endings/
方便的别名
以下两个 git 别名提供了一种将存储库中的所有文本文件从 DOS 转换为 Unix 或反之的快速方法。他们明确排除了对 .git 文件夹的任何处理。我找不到从命令行定义它们的方法,因此编辑 .gitconfig 并在 [alias]
部分添加以下两行:
godos = !find . -path ./.git -prune -o -type f -exec unix2dos {} "\\;"
gounix = !find . -path ./.git -prune -o -type f -exec dos2unix {} "\\;"
然后您可以在存储库的根目录中执行 git godos
或 git gounix
以将所有文本文件结尾设置为一个或另一个。 注意以上仅适用于当前分支中的文件。我还没有找到一种方法来转换每个分支中的每个文件。
引用资料
gitattributes 手册页:https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
gitconfig 手册页(关于 cr-at-eol 的讨论):https://www.kernel.org/pub/software/scm/git/docs/git-config.html
查找的 Git 别名:`find -exec` in git alias
关于规范化后的 Git 行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24577629/
我正在寻找一个库函数来规范化 Python 中的 URL,即删除路径中的“./”或“../”部分,或添加默认端口或转义特殊字符等。结果应该是指向同一网页的两个 URL 唯一的字符串。例如 http:/
我有 2 个版本的 XSD 文件,我想看看它们之间做了哪些更改。不幸的是,发布者选择完全重写 XSD,更改元素、属性、命名空间前缀等的顺序。是否有工具(命令行或 GUI)可以将它们转换为我可以使用的规
我一直在想,同时使用 normalize.css 和某种 CSS 重置会不会有什么大问题?我一直在四处挖掘,我遇到的所有文章都只是以非此即彼的方式谈论它们,而没有谈及将两者结合起来。 诚然,我在规范化
这对我来说是一个新话题,我已经阅读了几篇文章,但我仍然不清楚,甚至不确定以下问题是否与这篇文章的标题有关。 我的系统向用户发送数据。用户可以选择通过以下方式发送数据: XML 电子邮件 发布 根据用户
我正在从设计不佳的旧数据库升级到新数据库。在旧数据库中有带有字段 Id 和 Commodities 的 tableA。 Id 是主键,包含一个 int,Commodities 包含一个逗号分隔的列表。
假设我有包含此字符串的 Apache Solr 索引文档: Klüft skräms inför 我希望能够使用此关键字通过搜索找到它(注意“u”-“ü”): kluft 有没有办法做到这一点 ? 最
假设您正在处理常规的联系人数据库(您知道...姓名,电话号码,地址,电子邮件等...)。如果您在本地对此感到疑惑,那么一般来说这不是什么大问题,但是当我们查看国际场景时,它就是。 查看电话号码系统,您
尝试在不使用 python 中的任何包的情况下计算 L1 范数 假设我有向量:l = [2.34, 3.32, 6.32, 2.5, 3,3, 5.32] 我想找到这个向量的L1,没有任何包: 我已经
我们拥有 10 年的存档体育数据,分布在不同的数据库中。 尝试将所有数据合并到一个数据库中。由于我们将处理 10 倍的记录数量,因此我现在正在尝试重新设计架构以避免潜在的性能影响。 一项更改是将团队名
我正在使用以下设计为我的网站创建表格 设计1 设计2 由于并非所有注册用户都会尝试挑战,因此设计 1 适合。插入第三个表时,表 2 分数会相应更新。但是 user_id 字段变得多余。 设计 2 中为
我有一个带有字段 json 的表模板。由于 json 对于许多 template 来说可能是相同的 (1:n),我创建了另一个表 template_json 并添加了字段 template_json_
我有一个具有正交投影的 C++/OpenGl/Glut 应用程序。 窗口的宽度为 500 x 500 像素。目前,当鼠标点击发生时,该点将在 (0,0) 和 (500, 500) 之间。 我想获取该点
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我的印象是 JavaScript 解释器假设它正在解释的源代码已经被规范化。什么,规范化到底是做什么的?它不能是文本编辑器,否则源的明文表示会改变。是否有一些执行规范化的“预处理器”? 最佳答案 EC
我被分配了一项任务,但我不确定如何完成它: 我必须构建一个支持多种设备的消息系统,并且它应该尽可能高效。用户最多可以有 10 台设备,当用户收到消息时,所有设备都需要接收消息。 我有两个想法: Tab
我正在尝试将规范化合并到我的数据库设计中,互联网上提供的一些解释让我有点困惑 - 我不确定我是否在朝着正确的方向前进? 到目前为止我有: 用户: id username password 用户配置文件
规范化数据时,是否可以接受在同一张表中重复使用外键? 例如一家 express 公司有一个订单表和一个客户表,订单表会记录从哪个客户那里取件(Customer_ID),并且还会有一列用于说明要交付给哪
用 Java 制作规范形式的 XML 文件的最简单方法是什么?你有一些完成的代码吗?我在网上找到了几个链接,比如 this , this , 和 this ,但我无法让它工作:/ 谢谢, 伊凡 编辑:
在 Python 中是否有标准方法来规范化 unicode 字符串,以便它只理解可用于表示它的最简单的 unicode 实体? 我的意思是,可以将 ['LATIN SMALL LETTER A', '
我知道这个问题已经讨论了很多——但实际上我还没有找到这个问题的最终答案。 我想从我的 VBA(Excel)脚本中的日期“删除”(或更确切地说是标准化)时间。例如。: 20.12.2017 15:16
我是一名优秀的程序员,十分优秀!