SVN, Samba и символические ссылки. Как заставить их всех играть вместе? - PullRequest
4 голосов
/ 08 марта 2010

У меня есть проект веб-сайта под управлением версией, который использует файлы из неверсионного каталога на том же сервере через символические ссылки.

В настоящее время я храню символические ссылки в хранилище. Идея состоит в том, что если кто-то извлекает рабочую копию на тот же сервер, он может отредактировать и протестировать рабочую копию проекта, прежде чем отправить ее обратно в хранилище.

Когда они извлекают свою рабочую копию, она успешно устанавливает символические ссылки, чтобы весь сайт работал при тестировании.

Пользователи, работающие над проектом, являются пользователями Windows, поэтому я установил общие папки samba на сервере, а затем сопоставил их с сетевыми дисками в Windows. Люди могут редактировать свои рабочие копии непосредственно на сервере через сетевые ресурсы, а затем тестировать их в веб-браузере, прежде чем вносить свои изменения обратно в хранилище через TortoiseSVN.

Проблема

У меня проблема в том, что Samba разрешает символические ссылки, как и ожидалось, но когда пользователь пытается зафиксировать свои изменения обратно в хранилище, TortoiseSVN считает, что связанные файлы являются частью проекта, и пытается передать целевые файлы в хранилище и не сами символические ссылки.

Я попытался отключить поддержку символических ссылок в samba, что означает, что связанные файлы не могут быть разрешены, поскольку я не хочу, чтобы люди имели доступ к связанным файлам, и при этом я не хочу импортировать связанные файлы в хранилище. Проблема в том, что я получаю Can't stat '\\webserver\projects\working\project\symlinked_file.php'. Access is denied

Кроме проблемы символической ссылки, все остальное работает на 100% идеально. Пользователи могут либо извлекать проекты веб-сайтов на свою машину и работать на них (но не могут тестировать), либо извлекать их в свое пространство на веб-сервере dev, работать с ними и полностью тестировать. Поэтому я не хочу менять процесс рабочего процесса, мне просто нужно решить проблему символической ссылки.

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Я решил удалить символические ссылки из хранилища. Затем я создал скрипт bash, который предлагает пользователю создать символические ссылки в своей рабочей копии. Я должен был убедиться, что отключил опцию Samba follow symlinks, чтобы TortoiseSVN не пытался добавить связанные файлы в хранилище.

Также следует отметить, что когда пользователь выполняет фиксацию с использованием TortoiseSVN, он будет отображать ссылки в журнале изменений, но они не будут проверены и, следовательно, не будут добавлены в хранилище. Вам просто нужно игнорировать их.

1 голос
/ 17 июля 2011

Не могли бы вы использовать символические ссылки UNIX вместе с символическими ссылками NTFS для обеспечения совместимости с Windows? Или вы всегда можете создать версию для других файлов и использовать svn: externals для ссылки на них.

0 голосов
/ 15 июля 2011

Хорошо, пройдя несколько вариантов, я пришел к следующему: проблема в том, что Windows не знает о символических ссылках, но Tortoise также не уничтожает их при проверке Windows. Решение состоит в том, чтобы позволить людям самим проверять общий доступ к Windows, а затем найти способ добавить символические ссылки обратно.

Конечно, просто перезаписать их не вариант, так как черепаха будет жаловаться на измененные файлы / каталоги и т. Д. Мы хотим оставить их в покое. Для веб-сервера со статическими изображениями / другими ресурсами в директории с символьными ссылками будет работать простой Alias в конфигурации Apache, но, увы, наша кодовая база также включает код по символической ссылке.

В Debian unionfs-fuse решил эти проблемы. Рецепт, который, кажется, работает здесь:

  • Создать базовые проверки где-нибудь на сервере Linux (svnroots).
  • Создайте каталог, в котором мы собираемся создать «оверлей» (каркас).
  • Найдите в каталоге svn-checkouts символические ссылки и создайте их заново в туше:

.

for file in `find $DEVPATH/svnroots/ -type l`;do
       path=`dirname $file | sed "s,$DEVPATH/svnroots,$DEVPATH/carcass,g"`
       mkdir -p $path
       path=$path/`basename $file`;
       ln -s `readlink $file` $path;
done
  • Создайте нужные каталоги (с файлами людей из их общего ресурса, но с символическими ссылками, хранящимися в subversion:

.

for user in ${windowsusers[@]};
    unionfs-fuse -o cow,allow_other,suid,uid=33,gid=33 $DEVPATH/carcass=ro:$DEVPATH/$user/=rw $DEVPATH/correct_dirs/$user
done

Чтение / запись в этом каталоге пойдет в каталог пользователей, каталог каркаса доступен только для чтения, но накладывается на каталог пользователей, что приводит к правильным символическим ссылкам. Сценарии достаточно легко перезапустить при изменениях символьных ссылок в Subversion (и перемонтирование не требуется: изменения в каркасе напрямую отражаются в correct_dirs).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...