14

У меня есть две папки:

  • /home/me/code/project/
  • /srv/www/projectfiles/

В папке /home/me/code/project я поместил static ссылку в /srv/www/projectfiles/

т.е. /home/me/code/project/static/ -> /srv/www/projectfiles/

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

Как мне зафиксировать файл (например, /srv/www/projectfiles/style.css), который находится за символической ссылкой ?

5 ответов5

10

Обходной путь должен состоять в том, чтобы /srv /www /projectfiles был символической ссылкой на /home /me /code /project /static, поэтому git не видит символических ссылок

2

Если вы используете Linux, мне особенно нравится решение, предоставляемое GitBLSR. Это библиотека, загружаемая через LD_PRELOAD, которая прозрачно разыменовывает символические ссылки на файлы и папки вне репозитория.

Установить его для локальной учетной записи пользователя просто:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh

Это скомпилирует библиотеку и создаст псевдоним, подобный следующему в ~/.bashrc:

alias git="LD_PRELOAD=/path/to/gitbslr.so git"

Использование этого псевдонима включает разыменование прозрачной ссылки.

1

Другой обходной путь - единственный, который я нашел, который работает и для каталогов, - это изменение рабочего дерева git для конкретных действий.

git --work-tree=/home/me/code/project/ add /home/me/code/project/static/
git --work-tree=/home/me/code/project/ commit /home/me/code/project/static/
1

Переместите файлы в папку и удалите символическую ссылку. Git не пересекает символические ссылки.

Он (и я) предположил бы, что вы используете символические ссылки на набор файлов, которые вы либо не контролируете, либо не хотите изменять, так как они не должны быть версионированы.

1

Подумайте об использовании точки монтирования для монтирования папки назначения (с которой вы в настоящее время используете символическую ссылку), чтобы она появлялась в том месте, где вы хотите ее разместить под проектом git. Я успешно использовал этот подход.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .