Следуйте символические ссылки в SVN

У меня есть каталог linux (и мне не нужна проверка Windows):

/home/me/projects/project1

В этом проекте мне нужно, чтобы SVN (1.8.8) следовал по символической ссылке "link1":

/home/me/projects/project1/link1/<some_directories_and_files>

Но SVN не позволит мне сделать это, просто добавлю link1 но не его содержание. Если я пытаюсь добавить его содержимое, я получаю сообщение об ошибке:

svn add link1/*
svn: E145001: Can't schedule an addition of '/home/me/projects/project1/link1/first_directory' below a not-directory node

Я попытался преобразовать ссылку 1 в жесткую ссылку, но я тоже не могу этого сделать:

ln /path/to/my/linked/directory link1
ln: ‘/path/to/my/linked/directory’: hard link not allowed for directory

Любая идея? Как вы справляетесь с такой конфигурацией? Мне просто нужно совершить все из /home/me/projects/project1 из простого svn commit

1 ответ

Решение

Если я понимаю вашу проблему, у вас есть:

project1/
project1/link1 -> ../../some/where/else

Если вы делаете простой svn add link1 он добавляет запись символьной ссылки в хранилище Subversion, но вы пытаетесь добиться того, чтобы что-то было в дереве.

Если это так, то вы боретесь в неправильном направлении, вы должны создать настоящие файлы и каталоги по ссылке1 и сделать символические ссылки целевых мест в каталог ссылки1. Это было бы простым решением проблемы.

Другое решение было бы сделать местоположение ../../some/where/else местоположение svn само по себе, и сделайте link1 внешним определением для этого местоположения. Когда вы фиксируете в главном каталоге, внешние компоненты будут зафиксированы одновременно, что обеспечит сохранение информации; однако, чтобы обеспечить синхронизацию другого местоположения, необходимо обновить его до той же версии, что и сохраненные данные.

В моем случае на рабочем столе у ​​меня есть каталог настроек:

$HOME/settings

Это извлеченная копия каталога, содержащего .bashrc, .profile, .vimrc, .vimи т.д. файлы и папки из svn Сделки РЕПО. Все мои профильные файлы и каталоги были символическими ссылками в эту папку, например, .profile -> settings/.profileи т. д. Когда я делаю изменения, они отражаются в дереве svn, которое я могу зафиксировать, чтобы не потерять свои параметры конфигурации при переходе в другую систему.

Если вы действительно хотите, чтобы svn следовал по символическим ссылкам в качестве жестких ссылок (Вы не можете создавать жесткие ссылки на каталоги, потому что это было бы плохо™), то вам придется взломать исходный код клиента svn, чтобы он делал то, что хотел; но это будет кошмар обслуживания.

Вы можете сойти с рук, превратив символическую ссылку в точку монтирования привязки, направленную на цель, но у нее есть свои проблемы - для этого вам нужно быть суперпользователем, и в итоге для выполнения этой задачи в ваших /proc/mounts останутся забавные записи. этот:

mount --bind /absolute/path/to/some/where/else project1/link1
Другие вопросы по тегам