Ситуация такова: в локальной сети имеется компьютер с именем, например, server. На нём расшарена папка с именем svn в которой я храню свои SVN репозитории. На том компе нет реального "SVN сервера", просто расшареная виндовая (samba) сетевая папка, в которой вручную создаются репозитории (каждый в своей подпапке).
Как чекаютятся репозитоии в windows в таком случае: используется file схема пути, т.е. например file://server/svn/MyProject и всё работает отлично.
И вот настал тот час, когда мне стало необходимо зачекаутить этот репозиторий и из под Linux-а. Тут ждёт первая проблема: file схема на линуксе работает только с локальными путями! Все остальные требуют сервера на удалённом компьютере (что у меня сейчас не возможно). Первое решение очевидное - просто монтируем сетевую папку например в /mnt/svn и оттуда чекаутим file:///mnt/svn/MyProject и это действительно отлично работает! Кроме одного косяка... Работая под Windows-ом в репозиторий MyProject я добавил внешний (external) репозиторий MyProject2! И конечно же до него путь сохранился такой: file://server/svn/MyProject2 и при чекауте MyProject SVN не может слить его зависимость по пути file://server/svn/MyProject2.
То есть по хорошему у меня должен работать чекаут точно по тем же путям, что и в windows, что проблематично, но не возможного же не бывает...
Как чекаютятся репозитоии в windows в таком случае: используется file схема пути, т.е. например file://server/svn/MyProject и всё работает отлично.
И вот настал тот час, когда мне стало необходимо зачекаутить этот репозиторий и из под Linux-а. Тут ждёт первая проблема: file схема на линуксе работает только с локальными путями! Все остальные требуют сервера на удалённом компьютере (что у меня сейчас не возможно). Первое решение очевидное - просто монтируем сетевую папку например в /mnt/svn и оттуда чекаутим file:///mnt/svn/MyProject и это действительно отлично работает! Кроме одного косяка... Работая под Windows-ом в репозиторий MyProject я добавил внешний (external) репозиторий MyProject2! И конечно же до него путь сохранился такой: file://server/svn/MyProject2 и при чекауте MyProject SVN не может слить его зависимость по пути file://server/svn/MyProject2.
То есть по хорошему у меня должен работать чекаут точно по тем же путям, что и в windows, что проблематично, но не возможного же не бывает...
Первое действие - создал в корне файловой системы папку /svn и примонтировал в неё сетевую папку server/svn. Всё ок, я могу чекаутить мой проект по пути file:///svn/MyProject Теперь на хватает в пути всего-то слова server. К счастью в svn есть один альтернативный вариант написания пути: file://localhost/svn/MyProject. Однако проблема в том, что на линуксе SVN просто удаляет слово localhost из пути! И если оно написано не верно, то выводит ошибку и ни чего не делает. Плохо, что нет резолва IP и чекаута по сети и слово localhost - просто затычка, однако в моём простом случае это и было решением )
Так как localhost просто заглушка и ни чего не значит, то его можно заменить и на другое слово, например... на слово "server" ) Беда только в том, что внешних конфигов нет, это слово зашито в коде SVN. Но разве ж это настоящая проблема?
Решение:
3. Находим функцию svn_uri_get_dirent_from_file_url
4. Ищем код
Так как localhost просто заглушка и ни чего не значит, то его можно заменить и на другое слово, например... на слово "server" ) Беда только в том, что внешних конфигов нет, это слово зашито в коде SVN. Но разве ж это настоящая проблема?
Решение:
1. Чекаут исходников subversion svn co http://svn.apache.org/repos/asf/subversion/trunk subversion
2. Идём в папку subversion/subversion/libsvn_subr, открываем файл dirent_uri.c3. Находим функцию svn_uri_get_dirent_from_file_url
4. Ищем код
if (strcmp(hostname, "localhost") == 0) hostname = NULL;5. меняем на такой код
if (strcmp(hostname, "localhost") == 0 || strcmp(hostname, "server") == 0) hostname = NULL;6. Билдим SVN
sudo apt-get install autoconf sudo apt-get install libtool-bin sudo apt-get install apache2-dev libapr1-dev libaprutil1-dev sudo apt-get install zlib1g-dev ./get-deps.sh cd apr/ ./buildconf cd ../apr-util/ ./buildconf cd ../apr-util/xml/expat/ ./buildconf.sh cd ../../.. ./autogen.sh ./configure make //в папке subversion7. Устанавливаем в систему В папке subversion/subversion/svn лежит бинарник с именем svn Я его просто копировал в /usr/bin Но может ещё понадобиться сделать
sudo make installИначе некоторые зависимости не находит! Почему make install не ставит сам бинарник (у меня) - не ясно, курить скрипты лень )
Комментариев нет:
Отправить комментарий