Git for Windows中的文件名太长了

Pap*_*lon 587 windows git

我正在使用Git-1.9.0-preview20140217Windows.据我所知,这个版本应该解决文件名太长的问题.但不适合我.

当然,我做错了什么:我没有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: Filename too long
Run Code Online (Sandbox Code Playgroud)

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

我在这里错过了什么?

spa*_*ym3 992

您应该能够运行该命令

git config --system core.longpaths true
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是受支持的Git版本,请手动将其添加到您的某个Git配置文件中以启用此功能.看起来可能是1.9.0及之后.

  • [这里](https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path)是一些背景信息,为什么没有启用默认,以及一些技术细节. (35认同)
  • 这个配置选项为我解决了这个问题,即使是在接受的答案中提到的msys.(具体来说,版本为1.9.4.msysgit.2). (13认同)
  • 运行上面的命令后,"无法锁定配置文件C:\ Program Files\Git\mingw64/etc/gitconfig".但@Yash回答对我有用 (9认同)
  • @divideByZero以管理员身份运行git bash可以防止该错误. (8认同)
  • Sourcetree有点奇怪,除非你"确保SourceTree使用的是System的Git而不是嵌入式的." - 感谢[Matej Drolc](http://pingec.si/blog/articles/msysgit-longpath/)提供的建议 (5认同)
  • 这在 Windows 中对我有用:以管理员身份运行 git bash,git config --system core.longpaths true,git clone https://yourrepo.git (3认同)
  • Windows 10更新1607及更高版本现在支持将[删除MAX_PATH限制]的注册表项(https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v = vs.85).aspx #maxpath)整个系统.注册表项是HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled,它应该是一个设置为1的DWORD. (3认同)

ive*_*eqy 530

Git对文件名的限制为4096个字符,除非在Windows上使用msys编译Git.它使用较旧版本的Windows API,文件名限制为260个字符.

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

您可以通过使用Windows上的Git另一端绕过这或者设置core.longpathstrue在其他的答案解释的那样.

git config --system core.longpaths true
Run Code Online (Sandbox Code Playgroud)

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

https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file上的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进行编译.相反,它是一个本机Windows应用程序,带有一个精简的MSYS环境. (16认同)
  • 或者作为快速修复,只需尝试将您的仓库结帐到C:/在Windows上,从而减少文件夹路径字符的数量. (4认同)
  • @sschuberth:除了缺乏与不支持长路径的程序的兼容性之外,是否有任何缺点? (3认同)
  • @JAB另一个缺点是长路径必须是绝对的; 不支持相对路径.有关详细信息,请参阅[此处](https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath). (3认同)
  • 为我解决了,但我使用“--global”而不是“--system”来避免需要管理员权限。 (3认同)
  • 从Windows 10开始,您可以编辑注册表(或应用组策略)以删除Windows API文件名长度限制.https://www.howtogeek.com/266621/how-to-make-windows-10-accept-file-paths-over-260-characters/ (2认同)
  • 这对我有用 git config --system core.longpaths true 但请记住以管理员身份打开终端,否则您将收到权限被拒绝的错误消息 (2认同)

Sag*_*dal 184

这可能有所帮助:

git config core.longpaths true
Run Code Online (Sandbox Code Playgroud)

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

  • 这里的人们已经注意到这个设置会引入一些不可预测的行为,所以看起来最好使用上面的命令作为需要它的项目的本地设置,而不是附加``system`,它将把它应用到所有项目 (11认同)
  • 我没有提升的权限,因此在 git 存储库中执行此操作比要求 IT 团队使用提升的权限运行全局命令要容易得多。谢谢萨吉鲁丁! (4认同)
  • 嘿,这只是另一个高度赞成的答案的copypasta.可能至少解释了为什么你更喜欢删除--system选项.. (3认同)

Yas*_*ash 64

创建.gitconfig并添加

[core]
longpaths = true
Run Code Online (Sandbox Code Playgroud)

您可以在项目位置(不确定)以及全局位置创建文件.在我的情况下,位置是C:\Users\{name}\.

  • 您也可以使用以下命令执行此操作:`git config --global core.longpaths true` (9认同)
  • 使用 Visual Studio,上面的 git bash 解决方案对我不起作用,但是找到项目的 .git/config 文件并按上面所示进行编辑。谢谢亚什。 (2认同)

Sai*_*pta 40

要遵循的步骤:

  1. 管理员身份启动Git Bash
  2. 运行命令 git config --system core.longpaths true

了解更多关于git config 这里.

  • 感谢你的回答!使用 --global 命令为我解决了这个问题! (2认同)

小智 40

这对我有用

终端图像

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

git config --system core.longpaths true
Run Code Online (Sandbox Code Playgroud)


Jan*_*lva 35

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

git config --system core.longpaths true
Run Code Online (Sandbox Code Playgroud)

但有效的解决方法是从Git中删除node_modules文件夹:

$ git rm -r --cached node_modules
$ vi .gitignore
Run Code Online (Sandbox Code Playgroud)

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

$ git add .gitignore
$ git commit -m "node_modules removed"
$ git push
Run Code Online (Sandbox Code Playgroud)

  • 无需提交“node_modules”:“packages.lock”文件位于此处,以确保“npm install”安装的版本始终相同,直到您进行“npm update” (3认同)
  • 有一个很好的理由将node_modules文件夹保存到git中:如果你希望你的软件在一年的模块可能从npm消失后表现相同. (2认同)

gug*_*gol 32

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

git clone -c core.longpaths=true <repo-url>
Run Code Online (Sandbox Code Playgroud)

-c key = value

在新创建的存储库中设置配置变量; 这在初始化存储库之后,但在获取远程历史记录或检出任何文件之前立即生效.密钥的格式与git-config 1预期的格式相同(例如,core.eol = true).如果为同一个键指定了多个值,则每个值都将写入配置文件.例如,这样就可以安全地向源远程添加额外的fetch refspec.

更多信息


Md.*_*sen 21

  • 从这里下载并安装 Git bash:https://git-scm.com/download/win
  • 以管理员身份运行 git bash gui 并运行以下命令:git config --system core.longpaths true
  • 现在克隆任何存储库。
  • 如果问题没有解决,请尝试以下命令:git config --global core.longpaths true
  • 如果没有帮助,请尝试重新启动 Windows。


Arp*_*wal 18

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

“错误:无法锁定配置文件C:\ Program Files(x86)\ Git \ mingw32 / etc / gitconfig:权限被拒绝”

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

git config --global core.longpaths true
Run Code Online (Sandbox Code Playgroud)

  • 如果您以管理员身份运行命令行应用程序,则第一个命令将起作用! (5认同)

ama*_*205 15

git config --global core.longpaths true
Run Code Online (Sandbox Code Playgroud)

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

  • 对于 Github Desktop 用户来说,这是唯一有效的方法,因为 Github Desktop 使用自己的 Git 配置。 (2认同)

Dhe*_*kar 8

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

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

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

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

  • 这是解决我的问题的唯一方法。这是我路径中的文件夹太多了。 (2认同)

Jul*_*amp 8

您还可以尝试启用长文件路径.

如果您运行Windows 10 Home Edition,则可以更改注册表以启用长路径.

转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemregedit,然后设置LongPathsEnabled1.

如果您使用的是Windows 10 Pro或Enterprise,则还可以使用本地组策略.

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

  • 我认为这必须与git配置结合使用,值得注意的是,由于[here](https://superuser.com/a/1114683/103148)中提到的原因,它无法与Windows资源管理器一起使用. (3认同)

Ric*_*ard 8

TortoiseGit (Windows)

对于在 Windows 上使用 TortoiseGit 的任何人,我都是这样做的:

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

(2) 在“Git”选项卡上,单击“编辑本地.git/config”按钮。

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

保存并关闭所有内容,然后重新尝试提交。对我来说,这奏效了。在此处输入图片说明

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


Nir*_*ake 5

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

  1. 以管理员身份打开 cmd 或 git bash
  1. 从上面以管理员身份运行的 cmd 或 git bash 给出以下命令
git config --system core.longpaths true
Run Code Online (Sandbox Code Playgroud)
  1. 这将允许全局访问长路径

  2. 现在您可以克隆存储库而不会出现长路径问题