Я использую интересный подход: извлечение (и обновление) выполняется в совершенно отдельном каталоге (возможно, на совершенно отдельной машине), а затем код копируется туда, где веб-сервер будет читать его с помощью rsync. Правило --exclude в командной строке rsync используется, чтобы запретить копирование любых каталогов .svn (и CVS), тогда как --delete-exclusive гарантирует, что они будут удалены, даже если они были скопированы ранее.
Поскольку svn update и rsync выполняют инкрементную передачу, это довольно быстро даже для больших сайтов. Это также позволяет вам иметь свой репозиторий за брандмауэром. Единственное предостережение заключается в том, что вы должны переместить все каталоги с файлами, сгенерированными на сервере (например, каталогами files / на Drupal), в место за пределами целевого каталога rsync (rsync перезапишет все при использовании таким способом) и символическую ссылку на него. должен быть создан в исходном каталоге rsync . В исходном каталоге rsync могут быть и другие не версионные файлы (например, машинные файлы конфигурации).
Полный набор параметров rsync, который я использую:
rsync -vv --rsh='ssh -l username' -rltzpy --exclude .svn/ --exclude CVS/ --exclude Attic/ --delete-after --delete-excluded --chmod=og-w,Fa-x
Даже в этом случае для избыточности у меня все еще есть правило конфигурации, запрещающее доступ к .svn, копируемый из правила по умолчанию Debian, которое запрещает доступ к .ht * (.htaccess, .htpasswd).