26

在将 git 存储库从 Linux 克隆到 Windows 系统时,我在结帐阶段收到以下错误:

$ git clone gituser@serveraddr:/git/git_repo.git git_WA
克隆到 'git_WA'...
gituser@serveraddr 的密码:
远程:计数对象:500846,完成。
远程:压缩对象:100% (118676/118676),完成。
远程:总计 500846(增量 307739),重复使用 483023(增量 291136)
接收对象:100% (500846/500846),907.54 MiB | 9.04 MiB/s,完成。
解决增量:100% (307739/307739),完成。

错误:无法创建文件 RealR************************************************ ****************************************************** ****************************************************** ****************************************************** *************validation.xml(没有这样的文件或目录)
检出文件:100%(441329/441329)
检出文件:100%(441329/441329),完成。
完毕。

案例 2:克隆为裸仓库,在本地从裸仓库中签出所有内容 => 相同的错误。

Case-3:直接克隆C:\中的repo,checkout成功,没有报错。

-> 看起来文件名/文件路径长度限制有问题。

案例 4:从 SVN 存储库签出相同的文件。可以在任何地方结帐,没有任何问题。因此从窗户方面没有问题。(是的,我在 SVN 和 GIT 中都有数据,我刚刚从 SVN 迁移到 GIT)。

因此,问题必须在 msysgit 内,一些文件路径长度限制。可以调整 gitclient/msysgit 中的路径长度吗?

Edit1:所有操作都使用TortoiseGIT 客户端 v1.8.0git-bash:git version 1.8.0.msysgit.0 进行了尝试
Edit2:添加了克隆时使用的实际命令。

4

5 回答 5

17

在将项目签出到具有 67- (Windows) 或 76- (cygwin) 字符基本路径的 Windows 目录中时,我遇到了类似的问题 - 当添加到签出文件的路径长度时,它超过了 Windows 的路径 -长度限制:

git checkout -f HEAD
error: unable to create file <194-character filepath> (No such file or directory)
fatal: cannot create directory at '<187-character directory path>': No such file
or directory

我通过将 git 存储库检查到 c:\git 解决了这个问题,该存储库的长度为 6 或 15 个字符,将最大路径长度保持在 Windows 限制之下。

于 2013-12-06T17:26:30.157 回答
16

尝试:

git config --system core.longpaths true

这将允许它检查文件,即使文件路径较长。问题是当您尝试删除它时,因为 Windows 不允许删除长度超过允许阈值的路径。解决方法是重命名本地存储库中的文件夹,以减少路径的总长度。例如,路径为 alpha/beta/gamma/universe.txt,可以限制为 1/2/3/universe.txt,使其长度低于 windows 文件大小阈值。

于 2017-01-13T12:22:32.617 回答
5

许多 Windows API 的文件路径名限制为 260 个符号。所以 git 不能创建名称超过 260 个符号的文件。NTFS 文件系统实际上支持更长的名称(32k),但没有简单的方法允许程序使用长名称。

解决方法 1:将您的项目移动到更靠近磁盘根目录的新位置。优势:

  • 一切都应该正常(假设没有路径更长的文件 260)

坏处:

  • 您必须更改项目位置

解决方法 2:从更接近磁盘根目录的文件夹中创建一个Junction到您的项目文件夹,然后从 junction 文件夹执行 git clone。您可以使用mklinkcommand 或Link Shell Extension来执行此操作。

优势:

  • 您可以有长文件名(大于 260)
  • 您可以保存项目位置
  • 您可以在初始克隆后安全地删除连接(如果您不需要在原始位置处理违反 260 个符号限制的文件)

坏处:

  • 连接处的完整文件名仍然必须少于 260 个符号。否则,此解决方案将无济于事。
  • 如果要修改长文件
于 2014-05-03T12:33:22.207 回答
2

考虑到类似的问题,我看到的唯一建议是:

解决方法:使用http://www.cygwin.com/

或者至少检查msysgit的git-bash 会话中的结帐是否效果更好。


2015 年 5 月更新(2 年后):

注意:最新的 2.4.1 git-for-windows 建议

core.longpaths::

在 Git for Windows 中启用对内置命令的长路径 (> 260) 支持。
默认情况下禁用此功能,因为 Windows 资源管理器、cmd.exe 和 Git for Windows 工具链(msys、bash、tcl、perl...)不支持长路径。
仅当您知道自己在做什么并准备好忍受一些怪癖时才启用此功能。

于 2013-02-11T13:58:22.450 回答
0

使用 Windows PowerShell。为我工作。

于 2015-01-28T01:13:30.767 回答