msys git和长路径

时间:2011-02-14 13:17:12

标签: windows git path msysgit

我正在尝试使用git来更有效地管理使用CVS进行源代码控制的项目,但是我遇到了问题add - 一个确实有很长路径的文件 - 276个字符

不幸的是,这个文件是由我正在使用的工具随附的自定义IDE生成的,并且它应该由该工具提供,因此无法重命名或移动。

使用以下方法尝试使其半可读:

<projectpath> - 包含此项目所有组件的路径
<hugepath> - 从<projectpath>到第一个文件的路径我遇到问题 <filename> - 我遇到问题的文件的名称

me@work <projectpath>
$ git init
Initialized empty Git repository in <projectpath>/.git/

me@work <projectpath> (master)
$ git add <hugepath>/<filename>
fatal: unable to stat '<hugepath>/<filename>': No such file or directory

me@work <projectpath> (master)
$ ls -al <hugepath>
ls: <hugepath>/<filename>: File or path name too long
total 3
drwxr-xr-x    3 me Administ        0 May  3  2010 .
drwxr-xr-x    4 me Administ     4096 May  3  2010 ..
drwxr-xr-x    2 me Administ        0 May  3  2010 CVS

msys工具使用UNC前缀来处理路径,这通常可以让您工作 在Windows上使用长文件,但这似乎没有绕过路径限制:

me@work <projectpath> (master)
$ git add //?/<projectpath>/<hugepath>/<filepath>
fatal: Too long path: //?/<projectpath>/<hugep (intin - the path displayed is trimmed)

me@work <projectpath> (master)
$ ls-al //?/<projectpath>/<hugepath>/
ls: //?/<projectpath>/<hugepath>/.: No such file or directory
ls: //?/<projectpath>/<hugepath>/<filepath>: No such file or directory
total 2
drwxr-xr-x    4 me Administ     4096 May  3  2010 ..
drwxr-xr-x    0 me Administ        0 May  3  2010 CVS

在Windows上使用git跟踪具有长路径的文件是否有任何变通方法?

我在Windows Vista Business,SP1上使用1.7.4.msysgit.0。

5 个答案:

答案 0 :(得分:13)

限制为259个字符,所以你离它不远。如果<hugepath>/<filename>的长度小于256个字符,那么您可以使用“subst”技巧:

一种选择是使用Windows命令shell中的subst

subst P: <projectpath>

然后使用mysysgit:

cd /p
<git commands>

如果不起作用,可以从Windows Vista / 7/2008命令shell(RunAs管理员)创建硬链接:

mklink /D C:\p <projectpath>

然后使用mysysgit:

C:
cd \p
<git commands>

答案 1 :(得分:10)

Cygwin,因此它的git包,通过自动将它们映射到UNC路径,确实透明地支持这些长路径。

答案 2 :(得分:1)

GIT 1.9及更高版本为您提供了设置longPaths属性的选项。

git config --system core.longpaths true

此属性将配置GIT以允许您尝试签出的长路径。

答案 3 :(得分:0)

这不是Windows的限制,它实际上支持任意长的文件名,并且只要我记得就已经这样做了。

我看到你正在使用//?/。根据{{​​3}},您应该使用\\?\。使用\\?\时,正斜杠转换为反斜杠。

答案 4 :(得分:0)

有一个git选项可以让你处理长路径:core.longpaths。它从git 1.9.0开始可用。