Jenkins git checkout 中的“文件名太长”错误

Posted

技术标签:

【中文标题】Jenkins git checkout 中的“文件名太长”错误【英文标题】:"Filename too long" error in Jenkins git checkout 【发布时间】:2017-12-26 14:42:32 【问题描述】:

Jenkins中的Git checkout抛出错误“Filename too long”,失败,如下:

hudson.plugins.git.GitException:命令“git.exe checkout -f 2cea7d8eb9185899c01d2ffc86872f584da2e60c”返回状态码1:

标准输出: 标准错误:错误:无法创建文件 some_long_named_project/src/test/resources/dbunit_test_data/com/some_long_named_directory/data/testInstances_create_dataRequiresData.xml: 文件名太长

按照Filename too long in Git for Windows 和https://sifaserdarozen.wordpress.com/2015/06/25/git-file-name-too-long-error/ 的建议,我已将配置文件中的 longpaths 变量设置为“true”,但没有帮助。

还有什么我可以做的吗?

【问题讨论】:

【参考方案1】:

This answer by Saikat 为我解决了 Jenkins git checkout 的这个问题。

要遵循的步骤(Windows):

    管理员身份运行Git Bash 运行以下命令:

git config --system core.longpaths true

注意:如果第 2 步不起作用或出现任何错误,您也可以尝试运行此 命令:

git config --global core.longpaths true

阅读更多关于git confighere的信息。

(编辑:请注意,related answer 建议将设置专门应用于受影响的项目,而不是使用 --system--global 标志。)

【讨论】:

【参考方案2】:

为了让 Git 正确处理长文件名,需要启用 core.longpaths=true。要设置此参数,您可以执行以下操作:

git config --global core.longpaths true

【讨论】:

Jenkins 作业配置中的“为运行准备环境”复选框添加了预签出步骤【参考方案3】:

如果您运行 Windows 10 家庭版,您可以更改注册表以启用长路径。

转到regedit 中的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,然后将LongPathsEnabled 设置为1

如果您有 Windows 10 专业版或企业版,您还可以使用本地组策略。

gpedit.msc中转到Computer Configuration > Administrative Templates > System > Filesystem,打开Enable Win32 long paths并将其设置为Enabled

【讨论】:

【参考方案4】:

作为一种解决方法,我在 jenkinsfile 脚本中为 WORKSPACE 路径定义了一个虚拟驱动器:

bat 'subst W: /d || exit 0' //delete the virtual drive if it already exists 
bat 'subst W: "%WORKSPACE%"' 

然后删除它:

bat 'subst W: /d'

【讨论】:

以上是关于Jenkins git checkout 中的“文件名太长”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在新打git tag入库后自动触发Jenkins任务

如何使用管道代码覆盖默认的 Jenkins Git 插件检出?

git checkout之一 HEAD基本和detached 状态

sh 一个命令中的Git create和checkout分支

每天一命令 git checkout

jenkins 怎么样在checkout SVN 代码时只checkout 部分目录?