这种情况有点复杂,所以我提前道歉。我已经完成了我能想到的一切,并且研究了我能找到的所有东西,但仍然无法完全理解这一点。
我处理的是一个包含大量具有Windows样式行结尾的文件的仓库。在某些时候,一些文件被改为linux风格。我怀疑我是通过cygwin和/或vim无意中做到的,但最初的原因实际上并不重要。
问题是我支持的一些遗留应用程序要求文件具有CRLF
行结尾。我没有尝试更改repo中每个文本文件的结尾,而是尝试了一个没有按预期工作的快速解决方案。我尝试使用.gitattributes
将* text eol=crlf
文件放在回购的根目录中,因为我的理解是它强制所有文件都为CRLF
。
当时我没有理解的是,这依赖于git确定哪些文件是文本,哪些文件是二进制文件。这似乎导致了一些报道了一些误报的情况。如果实际没有进行任何更改,文件将被列为已修改。
经过对.gitattributes
和行结尾以及所有这些内容的大量研究后,我想出了一个新的.gitattributes
文件。这个文件特别列出了所需的CRLF
文件以及一些应被视为二进制文件的文件。
不幸的是,我还在对剩下的几个文件进行幻像修改。奇怪的是,所有这些文件扩展名都在.gitattributes
中明确标记为二进制文件。例如,在我的.gitattributes
(我在下面粘贴)中,我有一行*.exe binary
但是即使有了这一行,我也有几个显示为已修改的.exe
个文件。
如果我查看"修改过的"进一步加入这个谜团。文件,更改消失,一切都很好。我可能很想称这是一个合适的解决方法,但据我所知,没有办法检查团队中大多数人正在使用的git客户端中的单个文件:Sourcetree。我找到了一种解决方法,您可以右键单击该文件,查看日志并重置为特定提交,但它与签出文件的效果不同。
作为一个额外的线索,在Sourcetree中,可以轻松打开文件的前/后版本。我打开了"之前"其中一个.exe
的版本,只是打开没有问题。 ""之后"版本促使我选择一个应用程序来打开它。这让我相信.exe
已经因为我不理解的过程而变得腐败。
"改变"文件是两个.exe
,一个.tgz
和一个.pm
文件。有趣的是,.pm文件以某种方式将单个 CRLF行更改为LF
对此有任何建议将不胜感激。我尝试使用更具体的.gitattributes
文件解决此问题,并最终需要git新手可以使用的解决方案。
谢谢!
我的.gitattributes
文件:
*.Object text eol=crlf
*.CS text eol=crlf
*.Script text eol=crlf
*.Project text eol=crlf
*.actions text eol=crlf
*.pm binary
*.png binary
*.PNG binary
*.jpg binary
*.JPG binary
*.jpeg binary
*.JPEG binary
*.dll binary
*.DLL binary
*.exe binary
*.EXE binary
*.tgz binary
*.TGZ binary
*.doc binary
*.DOC binary
我的核心git配置:
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
tl; dr :在上面列出.gitattributes
文件的Windows系统上,git表示在结帐后立即修改了某些文件。这适用于显式列为二进制的几种文件类型。在CLI git上,检出文件可以修复它。 Sourcetree似乎没有类似的选择。如何让这些文件遵守.gitattributes
规则?