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

У меня есть Linux-каталог (и не нужно никаких окон):

/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

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

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, но то, что вы пытаетесь выполнить, это получить материал в другом месте в дереве.

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

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

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

$HOME/settings

Это выданная копия каталога, содержащего .bashrc, .profile, .vimrc, .vim и т.д. файлы и папки из репо svn. Все мои файлы профиля и каталоги были символическими ссылками в эту папку, например, .profilesettings/.profile и т.д. Когда я вношу изменения, они отражаются в дереве svn, на который я могу вернуться, чтобы убедиться, что Я не теряю настройки конфигурации, когда я перехожу в другую систему.

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

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

mount --bind /absolute/path/to/some/where/else project1/link1