微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Git - 无需修改即可输出更改

如何解决Git - 无需修改即可输出更改

我刚刚从我的 Bitbucket 存储库中克隆了我的存储库,但是我在提交阶段收到了很多带有更改的文件

但是,有一些变化,就像这个例子:

enter image description here

为了隐私,我隐藏了数据库名称和表名称,但它们是相同的(没有更改)并且对于所有文件都是相同的。

我认为这与换行符(CRLF)有关并执行了这个:

 git config --global core.autocrlf true

然后:

git reset

但是,我仍然看到输出更改并且文件数量没有减少。

会发生什么?

解决方法

该行末尾的红色斑点表示不需要——在 Git 的“眼睛”中,即——空白。某些空白位是否不必要取决于数据的用户。例如,考虑一下 [Whitespace 编程语言](https://en.wikipedia.org/wiki/Esoteric_programming_language#Whitespace:尾随空格在这里肯定很重要。但是由于图像中的文本是简单的 SQL,所以这里的尾随空格并不重要。

这不一定是 CRLF。例如,假设我们有以下几行:

This is  
some text.

现在让我们在每行的末尾添加字母 Z。令人惊讶与否,取决于您仔细查看上述文本的程度,我们得到了这一点:

This is  Z
some text.Z

如果我们删除单词is后面不必要的空格,我们会得到:

This isZ
some text.Z

如果我们确实去掉这些空白,Git 会尽职尽责地显示差异,因为存在差异。它可能没有区别——就像在 SQL 语句中一样——也可能没有区别,就像在 Whitespace 语言中一样。 Git 并不真正知道,所以它会显示变化。

红色(或其他颜色)突出显示取决于您选择的 diff — 外部差异,即那些未内置到 Git 中的差异,当然只会做自己的事情 — 以及许多 Git 设置。行中的 CR 是否出现也是您可以选择的,并且 Git 是否会重击您的数据以 remove CR 是还有一些你可以配置的东西,但是无论你是否以这种方式配置 Git,Git 进行这些更改的点都不是你期望的。1

对我来说更有趣的是:

\ No newline at end of file

,在文本文件中,可以用行分隔符分隔,或者用行分隔符/终止符终止。这是什么意思?让我们用两行来看看那个文件的内容(在我们去掉愚蠢的额外空格之后)。它读This isend-of-linesome text.end-of-line吗?还是读This isend-of-linesome text.?如果是前者,我们有行终止符:每一行都以end-of-line结尾。如果是后者,我们有行分隔符:行被行尾分隔,但文件没有一个最后的行尾

如果我们在编辑器中打开了文件,也许我们无法分辨。我们可以判断是否可以,如果可以,如何判断取决于我们的编辑器。但是,通常情况下,无论文件采用哪种布局(终止符或分隔符),它看起来都完全相同。但事实并非如此。

git diff 命令需要能够告诉你——或者更重要的是,告诉 Git——文件是这样的。所以它使用 \ No newline at end of file 来表示文件缺少最后的行终止符。 Git,本质上,“相信”文件通常使用行终止符,而这个缺少一个。

如果您有一个没有行结束符的文件,并且您想向其中添加一行,则必须在文件中添加或更改两行过程:您首先在文件末尾缺少一个终止符的地方添加一个终止符,然后添加另一行,有或没有终止符。如果所有行都以终止符结尾,并且您要添加一行,则只需添加一行。所以你应该避免这种情况。您的编辑器中可能有一个设置,以确保文本文件的最后一行以正确的行结束符结束。

处理完这件事后——并检查是否在过去文件最后一行的行尾添加了一个纯文本空白——然后你可以调查你是否有 CRLF 问题。请参阅 Why isn't my .gitattributes file preventing the addition of "\r"s when checking out files on Windows?How to normalize working tree line endings in Git? 等(在 标签下搜索 CRLF、行尾、gitattributes 等。)


1通过阅读您的想法,我神奇地知道了这一点。 ? 不,我当然不知道你期望什么,但在实践中,似乎没有人期望 Git 在 Git 实际做的地方做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。