git显示文件内容,并在文件末尾显示LF或CRLF
我使用命令 git show sha1:/path/file>/c/tmp/file 当我用notepad++打开存储库中的文件时,我可以看到该文件是DOS格式的 当我打开文件/c/tmp/file时,无论我的core.autocrlf配置是什么,该文件都是Unix格式的 对于“git show”命令,如何使用正确的autocrlf检索文件?测试(使用git 2.24.0)显示:git显示文件内容,并在文件末尾显示LF或CRLF,git,Git,我使用命令 git show sha1:/path/file>/c/tmp/file 当我用notepad++打开存储库中的文件时,我可以看到该文件是DOS格式的 当我打开文件/c/tmp/file时,无论我的core.autocrlf配置是什么,该文件都是Unix格式的 对于“git show”命令,如何使用正确的autocrlf检索文件?测试(使用git 2.24.0)显示: git cat-file --filters HEAD:path/file 将对对象的内容应用CRLF过滤器(可能
git cat-file --filters HEAD:path/file
将对对象的内容应用CRLF过滤器(可能还有污点过滤器,但不包括textconv
设置)。(注意:请参阅哪个.gittributes
文件内容定义了应该使用的过滤器。)似乎没有办法使用git show
打开--filters
(但可能应该有)
--filters
选项是Git2.11中的新选项,于年引入(作者Johannes Schindelin)。torek的答案并不完全正确
--过滤器
将应用当前工作目录中的过滤器(例如.gittributes
),而不是特定头部或SHA1处的.gittributes
#在提交4324a3时显示路径/文件,
#但是应用工作目录中当前存在的.gittributes。
git cat文件--过滤器4324a3:路径/文件
我认为目前没有一种方法可以在特定提交时应用历史
.gittributes
中的过滤器来显示文件;除非签出提交并显式删除和恢复感兴趣的文件(删除和还原/签出是必要的,以便实际运行筛选-例如,如果文件在整个时间内都相同,但只有.gittributes
将eol
从saycrlf
移动到lf
,或者以其他方式)t转换:git show--textconv
(或者使用git show--no textconv
)显式禁用它。文档没有说明是为git show
启用还是禁用默认值,而是查看当前源(~git 2.24)显示它已启用。@torek OP并没有这样做。您可以将此作为答案发布。文档不明确。因此,默认情况下,textconv筛选器仅对git diff[1]和git log[1]启用,而不对git格式修补程序[1]启用或者diff管道命令。
@PanagiotisKanavos:Aha:测试证明--textconv
不应用EOL转换。它只应用.gittributes
中的显式textconv
设置(然后可能仅在执行diff时,而git show
不应用)但是,git cat file--filters
确实起到了作用。