我有一个本地存储库,我手动将文件上传到FTP。在远程服务器上,文件有时会被第三方更改。不幸的是,我们无法在该服务器上使用Git。
要将第三方所做的更改同步回本地存储库,我会从远程服务器下载所有文件并替换本地文件。
这通常效果很好,但与此同时它也向我显示了数百个已更改的文件,即使可见内容完全相同。
以下是我的Git客户端(Tower)的示例屏幕截图:
正如你所看到的,Git认为每一行都有所改变,即使内容看起来与我相同。
就像我说的,这发生在数百个文件中,对我来说非常不方便,因为我喜欢跟踪实际发生变化的事情......
Git中是否有设置或允许我忽略这些“更改”的内容?
答案 0 :(得分:2)
最常见的是这是由行结束更改引起的 - 更改是将行结束字符从CRLF更改为LF,反之亦然。当您使用相同存储库的Windows和非Windows客户端时会发生这种情况。
解决此问题的最佳方法是在.gitconfig中正确设置core.autocrlf设置。或者,您可以使用.gitattributes覆盖用户配置。请参阅GitHub help pages
答案 1 :(得分: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客户端是不可行的,那么它可能是更好的解决方案。
答案 2 :(得分:0)
对于我的工作流程,我自己想出了最佳解决方案:
git diff -b
这似乎忽略了我的文件中由不可见和控制字符引起的所有更改。
我这样做的方法是输入此命令并修复或提交显示的所有更改。在某些时候,命令显示没有更多结果,我知道所有其他"更改"实际上与我无关,我可以放弃所有本地更改,同时确保我已经提交了所有"真实"将文件更改为我的本地存储库。