msys git и длинные пути - PullRequest
       31

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

12 голосов
/ 14 февраля 2011

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

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

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

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

Ответы [ 5 ]

13 голосов
/ 13 сентября 2011

Ограничение составляет 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>
10 голосов
/ 13 сентября 2011

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

2 голосов
/ 25 апреля 2018

GIT 1.9 и более поздняя версия предоставляет вам возможность установить свойство longPaths.

git config --system core.longpaths true

Это свойство настроит GIT для разрешения длинных путей, которые вы пытаетесь оформить.

0 голосов
/ 08 января 2015

Есть опции git, которые позволяют вам обрабатывать длинный путь: core.longpaths. Это доступно начиная с git 1.9.0.

0 голосов
/ 14 февраля 2011

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

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

...