Msys git и длинные пути

Я пытаюсь использовать git для более эффективного управления работой над проектом, который использует CVS для своего исходного элемента управления, но у меня возникают проблемы add - файл, который имеет очень длинный путь - 276 символов.

К сожалению, этот файл создается с помощью специальной среды IDE, с которой я использую инструмент, и ожидается, что он окажется там инструментом, поэтому его нельзя переименовать или переместить.

Используя следующее, чтобы сделать это полу-читаемым:

<projectpath> - путь, содержащий все компоненты для этого проекта
<hugepath> - путь от <projectpath> к первому файлу, с которым у меня возникают проблемы с
<filename> - имя файла, с которым у меня возникают проблемы с

[email protected] <projectpath>
$ git init
Initialized empty Git repository in <projectpath>/.git/

[email protected] <projectpath> (master)
$ git add <hugepath>/<filename>
fatal: unable to stat '<hugepath>/<filename>': No such file or directory

[email protected] <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, который обычно позволяет вам работать с длинными файлами на окнах, но это не похоже на ограничение пути:

[email protected] <projectpath> (master)
$ git add //?/<projectpath>/<hugepath>/<filepath>
fatal: Too long path: //?/<projectpath>/<hugep (intin - the path displayed is trimmed)

[email protected] <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

Существуют ли какие-либо обходные пути для отслеживания файлов с длинными путями с помощью git в Windows?

Я использую 1.7.4.msysgit.0 в Windows Vista Business, SP1.

Ответ 1

Предел составляет 259 символов, поэтому вы не за горами. Если длина <hugepath>/<filename> меньше 256 символов, вы можете использовать трюк "subst":

Один из вариантов - использовать subst из командной оболочки Windows:

subst P: <projectpath>

Затем с mysysgit:

cd /p
<git commands>

Или, если это не сработает, из командной оболочки Windows Vista/7/2008 (администратор RunAs) вы можете создать жесткую ссылку:

mklink /D C:\p <projectpath>

Затем с mysysgit:

C:
cd \p
<git commands>

Ответ 2

Cygwin и, следовательно, его пакет git, прозрачно поддерживают такие длинные пути, автоматически сопоставляя их с UNC-путями.

Ответ 3

Это не ограничение Windows, которое фактически поддерживает произвольно длинные имена файлов и делает это до тех пор, пока я помню.

Я вижу, что вы используете //?/. Согласно документации, вы должны использовать \\?\. При использовании \\?\ передняя косая черта не преобразуется в обратную косую черту.

Ответ 4

Существует опция git, которая позволяет обрабатывать длинный путь: core.longpaths. Он доступен с git 1.9.0.