"虚线"结账后立即对二进制文件进行修改

时间:2018-02-27 15:18:17

标签: windows git atlassian-sourcetree

这种情况有点复杂,所以我提前道歉。我已经完成了我能想到的一切,并且研究了我能找到的所有东西,但仍然无法完全理解这一点。

我处理的是一个包含大量具有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规则?

0 个答案:

没有答案