Как я могу сделать файлы git commit в папке с символическими ссылками


19

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

  • /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), который находится за символической ссылкой?

Ответы:


12

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


Таким образом, вы в основном меняете логику? Сохраните необходимые файлы / папки в папке Git, а затем поместите символическую ссылку в другое место (где использовались оригинальные файлы / папки)?
RusI

@Rusl Да, именно так
user151019

Но тогда как я могу сделать локальную настройку файлов? У меня должен быть отдельный репо для каждой машины? Теряет весь смысл.
Ашнур

Ну, локальная настройка не будет в git
user151019

3

Если вы используете 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
Это ужасно! Но это работает отлично, так что это здорово. Спасибо!
Кей разочарован в SE

Это странно! Я просто люблю это
Маркос Бестейро Лопес

2

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


1

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

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


1
Я контролирую эти файлы. Они являются таблицами стилей и т. Д. И должны находиться в каталоге, который сервер будет обслуживать.
Мача

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/
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.