Следуйте символические ссылки в 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