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.