Git:插入和删除的数量相等 - 没有任何改变

问题描述 投票:0回答:3

我有一个本地存储库,我手动将文件上传到FTP。在远程服务器上,文件有时会被第三方更改。不幸的是我们不能在该服务器上使用Git。

为了将第三方所做的更改同步回我的本地存储库,我从远程服务器下载所有文件并替换我的本地文件。

这通常效果很好,但与此同时它也向我显示了数百个已更改的文件,即使可见内容完全相同。

以下是我的Git客户端(塔)的示例屏幕截图:

enter image description here

正如你所看到的,Git认为每一行都有所改变,即使内容看起来与我相同。

就像我说的,这发生在数百个文件中,对我来说非常不方便,因为我喜欢跟踪实际发生变化的事情......

Git中是否有设置或允许我忽略这些“更改”的内容?

git
3个回答
2
投票

最常见的是这是由行结束更改引起的 - 更改是将行结束字符从CRLF更改为LF,反之亦然。当您使用相同的存储库的Windows和非Windows客户端时会发生这种情况。

解决此问题的最佳方法是在.gitconfig中正确设置core.autocrlf设置。或者,您可以使用.gitattributes覆盖用户配置。见GitHub help pages


2
投票

当文件以ASCII模式上载到FTP服务器时,更改很可能是由于行结尾转换为CRLF引起的。 The FTP RFC在3.1.1.1节中规定:

根据NVT标准,应在必要时使用<CRLF>序列来表示文本行的结尾。

因此,只需以ASCII模式上传文件即可更改其行结尾。如果将git配置为仅使用LF作为行结尾(默认值),它将始终(正确地)将这些行检测为已更改。除了行结尾之外,文件的字符编码可能会因这些转换而发生变化。

要解决此问题,应将所有访问这些文件的FTP客户端配置为使用BINARY模式。这将避免对文件内容的任何解释,而只是按原样传输文件。

或者,可以将git配置为通过configuring core.eol(在本例中可能是crlf)或通过将受影响文件的匹配规则写入.gitattributes来预期某种类型的行结尾。虽然这更像是一种解决方法,但如果让所有参与方都适当地配置其FTP客户端是不可行的,那么它可能是更好的解决方案。


0
投票

对于我的工作流程,我自己想出了最好的解决方案:

git diff -b

这似乎忽略了我的文件中由不可见和控制字符引起的所有更改。

我这样做的方法是输入此命令并修复或提交所有显示的更改。在某些时候命令显示没有更多结果,我知道所有其他“更改”实际上与我无关,我可以放弃所有本地更改,同时确保我已经提交了所有“真实” “将文件更改为我的本地存储库。

© www.soinside.com 2019 - 2024. All rights reserved.