ChatGPT解决这个技术问题 Extra ChatGPT

Windows 版 Git 中的文件名太长

我将 Git-1.9.0-preview20140217 用于 Windows。据我所知,此版本应该解决文件名过长的问题。但不适合我。

我肯定做错了什么:我做了git config core.longpaths truegit add .,然后是git commit。一切顺利。但是当我现在执行 git status 时,我会得到一个带有 Filename too long 的文件列表,例如:

node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/ test-handle-source-errors.js:文件名太长

重现对我来说非常简单:只需使用 Angular 生成器(“yo angular”)创建一个 Yeoman Web 应用程序,然后从 .gitignore 文件中删除 node_modules。然后重复上述 Git 命令。

我在这里想念什么?

你在哪里读到那个版本应该修复长文件名?
这是补丁的拉取请求:github.com/msysgit/git/pull/122
@PapaMufflon 您可以将接受的答案更改为得分更高的答案吗?它对我帮助很大。
@v.karbovnichy 请仔细阅读我的问题。我已经在投票最多的答案中运行了该命令。但是在我问这个问题的时候,接受的答案是正确的:msys 仍然有这个字符限制。现在这个限制已经消失了, git config core.longpaths true 可以正常工作。
好的,那我同意

A
Aelius

Git 的文件名限制为 4096 个字符,但在 Windows 上使用 msys 编译 Git 时除外。它使用旧版本的 Windows API,并且文件名限制为 260 个字符。

据我了解,这是 msys 的限制,而不是 Git 的限制。您可以在此处阅读详细信息:https://github.com/msysgit/git/pull/110

您可以通过在 Windows 上使用另一个 Git 客户端或将 core.longpaths 设置为 true 来规避此问题,如其他答案中所述。

git config --system core.longpaths true

Git 是作为脚本和编译代码的组合构建的。通过上述更改,某些脚本可能会失败。这就是默认情况下不启用 core.longpaths 的原因。

https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later 处的 Windows 文档包含更多信息:

从 Windows 10 版本 1607 开始,MAX_PATH 限制已从常见的 Win32 文件和目录函数中删除。但是,您必须选择加入新行为。注册表项允许您启用或禁用新的长路径行为。要启用长路径行为,请在 HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled 处设置注册表项(类型:REG_DWORD)


路径中 260 个字符的限制并不特定于 MSYS,它是一般的 Windows API 模仿。这可以通过使用 Unicode 路径来解决,但它还有其他缺点,这就是默认情况下不启用 core.longpaths 的原因。另请注意,Git for Windows 不是针对 MSYS 编译的。相反,它是一个带有精简 MSYS 环境的本机 Windows 应用程序。
@sschuberth:除了与不支持长路径的程序缺乏兼容性之外,还有其他缺点吗?
@JAB另一个缺点是长路径总是必须是绝对的;不支持相对路径。有关详细信息,请参阅 here
或者作为一种快速修复,只需尝试在 Windows 上将您的 repo 签出到 C:/,从而减少文件夹路径字符的数量。
从 Windows 10 开始,您可以编辑注册表(或应用组策略)以删除 Windows API 文件名长度限制。 howtogeek.com/266621/…
P
Peter Mortensen

您应该能够运行命令

git config --system core.longpaths true

或者在您使用受支持的 Git 版本后,手动将其添加到您的一个 Git 配置文件中以打开此功能。看起来可能是 1.9.0 及更高版本。


这个配置选项为我解决了这个问题,即使在接受的答案中提到了 msys 也是如此。 (具体来说,版本 1.9.4.msysgit.2)。
Sourcetree 的行为有点奇怪,除非您“还确保 SourceTree 使用的是系统的 Git 而不是嵌入式 Git”。 - 感谢Matej Drolc的建议
Here 是默认情况下不启用此功能的一些背景信息,以及一些技术细节。
运行上面的命令后得到“无法锁定配置文件 C:\Program Files\Git\mingw64/etc/gitconfig”。但是@Yash 回答对我有用
@divideByZero 以管理员身份运行 git bash 可以防止该错误。
A
Akif

这可能会有所帮助:

git config core.longpaths true

基本解释:此答案建议不要将此类设置应用于全局系统(应用于所有项目,因此避免 --system--global 标签)配置。此命令仅通过特定于当前项目来解决问题。

编辑:

对于那些没有被授予全局更改 git 设置的人来说,这是一个与“权限被拒绝”问题相关的重要答案。


这里的人们已经注意到此设置可能会引入一些不可预测的行为,因此似乎最好将上述命令用作需要它的项目的本地设置,而不是附加 --system 将其应用于所有项目
嘿,这只是另一个高度赞成的答案的复制。至少可以解释为什么您更喜欢删除 --system 选项..
我没有提升的权限,因此在 git 存储库中执行此操作比要求 IT 团队以提升的权限运行全局命令要容易得多。谢谢萨吉鲁丁!
S
Saikat

遵循的步骤(Windows):

以管理员身份运行 Git Bash(右键单击应用快捷方式将显示以管理员身份运行的选项)运行以下命令:

git config --system core.longpaths true

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

git config --global core.longpaths true

阅读有关 git config here 的更多信息。


git config --global core.longpaths true 拯救了我的一天。谢谢
P
Peter Mortensen

创建 .gitconfig 并添加

[core]
longpaths = true

您可以在项目位置(不确定)以及全局位置创建文件。在我的例子中,位置是 C:\Users\{name}\


您也可以使用以下命令执行此操作:git config --global core.longpaths true
git config --global core.longpaths true 为我工作谢谢
使用 Visual Studio,上面的 git bash 解决方案对我不起作用,但找到项目的 .git/config 文件并按上面所示进行编辑。谢谢你。
这对我有用,我找到了那个文件并手动修改了它
上面提到和验证的答案是正确的,但是由于授予文件的权限,可能无法使用这些命令更新文件。这种方法非常简单,因为这是手动方法,对我来说效果很好。您可以在以下路径 C:\Users\{username} 中轻松找到 .gitconfig 文件并对其进行编辑。
W
Watchmaker

为了完全确保它在存储库初始化后立即生效,但在获取远程历史记录或检出任何文件之前,以这种方式使用它更安全:

git clone -c core.longpaths=true <repo-url>

-c key=value 在新创建的仓库中设置一个配置变量;这在存储库初始化后立即生效,但在获取远程历史记录或签出任何文件之前。密钥的格式与 git-config1 预期的格式相同(例如,core.eol=true)。如果为同一个键提供多个值,则每个值都将写入配置文件。例如,这使得向源远程添加额外的 fetch refspecs 是安全的。

More info


P
Peter Mortensen

更好的解决方案是从 Git 启用 longpath 参数。

git config --system core.longpaths true

但是一个可行的解决方法是从 Git 中删除 node_modules 文件夹:

$ git rm -r --cached node_modules
$ vi .gitignore

在 .gitignore 文件内的新行中添加 node_modules。完成此操作后,推送您的修改:

$ git add .gitignore
$ git commit -m "node_modules removed"
$ git push

将 node_modules 文件夹签入 git 有一个很好的理由:如果您希望您的软件在一年的模块可能从 npm 中消失后表现相同。
@cfstras 如果某些库存在漏洞并且您不定期更新,那么您肯定会遇到安全问题。
当然,您必须升级您的依赖项。但只有当你想要的时候,如果有什么东西坏了,你会希望你的备份在 git...
是真的。我会编辑我的答案。谢谢你的评论。
无需提交 node_modulespackages.lock 文件在此处可确保 npm install 安装的版本始终相同,直到您创建 npm update
A
Arpit Aggarwal

执行 git config --system core.longpaths true 向我抛出了一个错误:

“错误:无法锁定配置文件 C:\Program Files (x86)\Git\mingw32/etc/gitconfig: Permission denied”

修复了在全局级别执行命令:

git config --global core.longpaths true

全局设置只影响当前用户,而系统设置影响机器上的所有用户。如果这是您的工作站,它们实际上与您可能只使用一个用户相同。
如果您是命令行应用程序以管理员身份运行,则第一个命令将起作用!
A
A v o c a d o

这对我有用

https://i.stack.imgur.com/YD4se.png

以管理员身份运行终端。并运行以下命令。

git config --system core.longpaths true

a
amalik2205
git config --global core.longpaths true

上面的命令对我有用。使用“--system”给了我配置文件未锁定错误


对于 Github Desktop 用户,这是唯一有效的,因为 Github Desktop 使用自己的 Git 配置。
P
Peter Mortensen

您也可以尝试启用长文件路径。

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

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

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

gpedit.msc 中转到 计算机配置管理模板系统文件系统,打开 Enable Win32长路径并将其设置为已启用


我认为这必须与 git config 结合使用,值得注意的是它不适用于 Windows 资源管理器,原因是提到的 here
Win32 - 我想知道如果应用程序是 64 位,这是否有帮助?
M
Md. Shahariar Hossen

从这里下载和安装 Git bash:https://git-scm.com/download/win

以管理员身份运行 git bash gui 并运行以下命令: git config --system core.longpaths true

现在克隆任何存储库。

如果问题未解决,请尝试以下命令: git config --global core.longpaths true

如果它没有帮助尝试重新启动 Windows。


R
Richard

TortoiseGit (Windows)

对于使用 TortoiseGit for Windows 的任何人,我都这样做了:

(1) 右键单击包含您的项目的文件夹。选择 TortoiseGit -> 设置。

(2) 在“Git”选项卡上,单击“Edit local .git/config”按钮。

(3)在弹出的文本文件中,在[core]部分下,添加:longpaths = true

https://i.stack.imgur.com/K71hv.png

我希望这可以最大限度地减少任何可能的系统范围问题,因为我们不是在编辑全局 .gitconfig 文件,而只是针对这个特定存储库的文件。


P
Peter Mortensen

将存储库移动到驱动器的根目录(临时修复)

您可以尝试将本地存储库(整个文件夹)临时移动到驱动器的根目录或尽可能靠近根目录。

由于驱动器根目录的路径较小,因此有时可以解决问题。

在 Windows 上,我会将其移至 C:\ 或其他驱动器的根目录。


这是解决我的问题的唯一方法。那是我的路径中有太多文件夹。
N
Niroshan Ratnayake

在 Windows 中,您可以按照对我有用的这些步骤进行操作。

以管理员身份打开你的 cmd 或 git bash

从您以管理员身份运行的 cmd 或 git bash 提供以下命令

git config --system core.longpaths true

这将允许全局访问长路径现在您可以克隆存储库而不会出现长路径问题


P
Peter Mortensen

我也有这个错误,但在我的情况下,原因是使用了一个过时的 npm 版本,v1.4.28。

更新到 npm v3,然后

rm -rf node_modules
npm -i

为我工作。 npm 问题 2697 包含 npm v3(2015 年 6 月 25 日发布)中包含的“最大平面”文件夹结构的详细信息。


k
kartick shaw

在 Windows 机器中

以管理员身份运行命令提示符,然后运行以下命令

git config --system core.longpaths true


P
Peter Mortensen

如果您正在使用加密分区,请考虑将文件夹移动到未加密分区(例如 /tmp),运行 git pull,然后再移回。