TFS构建向文件添加额外开销问题求助(疑似Windows换行符)
解决TFS构建后文件因换行符转换变大的问题
这个问题我之前碰到过不少,大概率是TFS构建环节里的换行符自动转换(LF→CRLF)在搞鬼——毕竟你本地构建正常,只有TFS构建后文件变大,而且差值刚好符合LF转CRLF的字节变化(每个换行多1字节)。给你几个具体的排查和解决方向:
1. 配置Git仓库的换行符规则(最推荐的持久化方案)
在项目根目录添加.gitattributes文件,明确指定需要保持Linux换行符(LF)的文件类型,避免Git或TFS自动转换。比如你的文件是配置文件(.conf),可以这样写:
*.conf text eol=lf
text表示该文件被识别为文本文件eol=lf强制Git在签入和检出时都使用LF换行符
提交这个文件到仓库后,TFS构建时就会严格遵循这个规则,不会随意转换换行符。
2. 检查TFS代理机器的Git全局配置
如果代理是Windows机器,Git默认可能开启了core.autocrlf=true,会自动把LF转成CRLF。你可以:
- 在代理机器上打开命令行,执行
git config --global core.autocrlf查看当前值 - 如果是
true,可以改成input(提交时转LF,检出时不转换):
git config --global core.autocrlf input
注意:全局修改会影响代理上的所有Git项目,如果只想针对当前项目,可在构建步骤里先执行git config core.autocrlf input(不需要--global)
3. 排查构建步骤中的文件处理逻辑
检查你的TFS构建定义里,有没有执行过会修改文件的脚本或任务:
- 比如PowerShell脚本输出文件时,默认会用CRLF换行符。解决方法是指定编码为
utf8NoBOM并强制LF:
# 示例:写入文件时保持LF Get-Content "source.conf" | Out-File -FilePath "output.conf" -Encoding utf8NoBOM -NewLine "`n"
- 或者某些构建任务(比如文件替换、复制)是否有隐含的换行符转换设置,仔细检查任务参数。
4. 验证换行符类型确认问题根源
- 本地用Notepad++打开原文件,查看右下角的换行符标识(比如
LF) - 在TFS构建完成后,登录代理机器找到构建生成的文件,同样用Notepad++查看换行符,如果变成了
CRLF,就坐实了是换行符转换的问题。
5. 回溯TFS更新或代理变更
你提到可能是TFS更新或代理变更导致的,建议:
- 对比之前正常的代理环境,检查Git配置、系统环境变量的差异
- 查看TFS 2017 Update2的更新日志,确认是否有关于Git换行符处理的默认配置变更
内容的提问来源于stack exchange,提问作者Kasper Juul Larsen
相关产品推荐
相关产品推荐

