Как использовать рабочее дерево Git в файловой системе хост-гость на виртуальной машине

Я открываю новое рабочее дерево в своем локальном репозитории в Windows и не могу скомпилировать его на своей виртуальной машине Linux, потому что «.git» содержит полный путь, начинающийся с «C:/Git», которого нет на виртуальной машине. распознавать.

У меня есть репозиторий git, который мне часто приходится кросс-компилировать как в Windows, так и в Linux. Первоначально я клонировал репозиторий в своей системе Windows и смонтировал свой диск «C:» как общую файловую систему на виртуальной машине Ubuntu. Обычно это прекрасно работает.

При попытке открыть новое рабочее дерево в git у связанного репозитория нет собственной папки «.git», а есть ссылка на папку «.git» исходного репозитория, и она сохраняется как абсолютный путь в следующий формат:

gitdir: C:/Git/...

При попытке запуска:

git rev-parse

Я получаю следующее сообщение:

fatal: not a git repository: /mnt/hgfs/WindowsDriveC/Git/WorktreeDir/C:/Git/OriginalGitDir/.git/worktrees/WorktreeDir

Из-за этого ограничения некоторые из моих сценариев не работают.

Есть ли способ «обмануть» Linux, чтобы он распознал полный путь и правильно идентифицировал исходный репозиторий git?


person dsbeery    schedule 05.05.2019    source источник


Ответы (1)


Как правило, делать такие вещи не рекомендуется, потому что это может привести к повреждению, и, как вы видели, пути Windows не очень хорошо сочетаются с путями Linux.

Однако, как говорится, есть несколько вариантов. Один из них — настроить рабочее дерево под Cygwin или подсистемой Windows для Linux и поделиться им. Это по-прежнему приведет к тому, что путь не существует на виртуальной машине Linux, но можно будет создать символическую ссылку из /cygdrive/c или /mnt/c в /mnt/hgfs/WindowsDriveC, и тогда все остальное будет работать.

Другой вариант — просто использовать подсистему Windows для Linux, что означает, что вы можете выполнять компиляцию и создавать двоичные файлы Windows, не выходя из Windows. Вы бы создавали двоичные файлы Linux, но вам не нужно было бы беспокоиться о совместном использовании с виртуальной машиной. Однако рабочее дерево должно быть создано в WSL.

Последний вариант — отредактировать файл .git в рабочем дереве, чтобы использовать относительный путь к основному репозиторию. Это не поддерживается и может сломаться, но опять же может работать для ваших нужд. Обязательно используйте косую черту для этой цели.

person bk2204    schedule 05.05.2019
comment
Какой формат вы бы использовали для относительного пути? и к какой порче это может привести? У меня есть репозиторий, синхронизированный между двумя компьютерами Windows, но у каждого из них разные пути, поэтому абсолютный путь прерывается. - person endolith; 17.06.2020
comment
Вы бы использовали что-то вроде ../other/repo. - person bk2204; 17.06.2020
comment
Я не понимаю. Если я создам рабочее дерево и изменю файл .git на относительный путь, он все равно будет работать, но тот, который был перемещен, не работает, даже если он изменен на абсолютный путь. Winmerge не показывает никаких других различий между двумя рабочими деревьями. Просто имя ветки в файле .git. - person endolith; 17.06.2020
comment
О, я думаю, что это нужно изменить в нескольких местах. Файл .git\worktrees\BranchName\gitdir тоже имеет абсолютный путь - person endolith; 17.06.2020
comment
Я столкнулся с той же проблемой. Какие файлы вы изменили, кроме .git\worktrees\BranchName\gitdir, чтобы все заработало? Я могу задать новый вопрос, если хотите. спасибо. - person xpt; 19.06.2020