Если я понимаю вашу проблему, у вас есть:
project1/
project1/link1 -> ../../some/where/else
Если вы делаете простой svn add link1
, он добавляет запись символической ссылки в репозиторий subversion, но то, что вы пытаетесь выполнить, - это получить материал где-то еще в дереве.
Если это так, то вы боретесь в неправильном направлении, вы должны сделать настоящие файлы и каталоги под link1 и сделать символические ссылки на целевые местоположения в каталоге link1. Это было бы простым решением проблемы.
Другим решением было бы сделать местоположение ../../some/where/else
самостоятельным местоположением svn и сделать link1 внешним определением для этого местоположения. Когда вы фиксируете в основном каталоге, внешние файлы будут зафиксированы одновременно, что позволит сохранить информацию; однако, чтобы обеспечить синхронизацию другого местоположения, вам необходимо обязательно обновить его до той же версии, что и сохраненные данные.
В моем случае на рабочем столе у меня есть каталог настроек:
$HOME/settings
Это извлеченная копия каталога, содержащего .bashrc
, .profile
, .vimrc
, .vim
и т. д. файлы и папки из репозитория svn
. Все файлы и каталоги моего профиля были символическими ссылками в эту папку, поэтому, например, .profile
-> settings/.profile
и т. д. Когда я вношу изменения, они отражаются в дереве svn, к которому я могу вернуться, чтобы убедиться, что я не потерять мои настройки конфигурации, когда я перехожу в другую систему.
Если вы действительно хотите, чтобы svn переходил по символическим ссылкам как по жестким ссылкам (вы не можете создавать жесткие ссылки на каталоги, потому что это было бы плохо™), то вам придется взломать исходный код клиента svn, чтобы он это делал. что вы хотели; но это будет кошмар обслуживания.
Вы могли превратить символическую ссылку в точку монтирования привязки, направленную на цель, но у этого есть свои проблемы — вам нужно быть root, чтобы сделать это, и в итоге это оставляет забавные записи в ваш /proc/mounts для этого:
mount --bind /absolute/path/to/some/where/else project1/link1
Монтирование привязки не работает при монтировании внутри дерева svn, поскольку изменения формата рабочей копии, внесенные в svn 1.7 — операции svn пытаются переместить файлы из .svn/tmp в целевую папку, которая будет ссылка на кросс-устройство. Обходной путь в этом случае - идти изнутри наружу, т.е.:
mount --bind project/link1 /absolute/path/to/somewhere/else
С изменением формата рабочей копии svn одной папки .svn для извлеченного дерева вам нужно будет выполнять все последующие операции из истинного местоположения svn, так как это не будет работать из смонтированной папки, исходя из предположения что вы не смонтировали все проверенное дерево в этом целевом местоположении.
person
Petesh
schedule
20.07.2014