Одиночная многопользовательская проверка в Subversion - возможно? - PullRequest
1 голос
/ 17 ноября 2008

В нашей организации возникает следующая проблема. Мы хотим, чтобы наше веб-дерево контролировалось ревизиями, но многие из нас хотят иметь возможность изменять (и регистрировать) любой файл этого дерева. Мы также хотели бы, чтобы для всего этого была только одна проверка, потому что дерево довольно большое. Для частей этого дерева в настоящее время мы используем RCS, который учитывает поведение, описанное выше, но, конечно, имеет ряд других недостатков.

Кто-нибудь знает, как сделать это (возможно, с каким-то обходным путем) с Subversion на сервере Unix?

Ответы [ 10 ]

2 голосов
/ 17 ноября 2008

Разработчики не на своих машинах? Является ли дерево настолько огромным, что его необходимо извлечь на общий сетевой диск на сервере, поскольку оно не подходит для рабочих станций отдельных разработчиков? Я думаю, что этот вопрос нуждается в цифрах, чтобы прояснить проблемы и обосновать его.

1 голос
/ 17 ноября 2008

Как вы, вероятно, видели из других постов, общий ответ на этот вопрос - «Не делай этого». Вообще говоря, Subversion используется для отдельных проверок некоторых или всех хранилищ в локальной рабочей области.

Если вы абсолютно, положительно, должны иметь представление о всем хранилище на разработчика, но разработчик меняет только небольшую часть, вот потенциальное решение для вас. Вам нужно будет разработать несколько сценариев, чтобы облегчить то, что я описываю (основано на UNIX IDE, которую я использовал).

Я также предполагаю, из ваших комментариев, что среда - UNIX или Linux - я не думаю, что в Windows возможно следующее.

  1. Извлечь как только для чтения весь проект в каком-то месте. Убедитесь, что все разработчики имеют доступ для чтения к нему.
  2. Иметь сценарий, который может выполнить разработчик, который сканирует структуру каталогов, создавая зеркало структуры, используя символические ссылки на доступный только для чтения каталог в рабочем пространстве этого разработчика.
  3. При извлечении части дерева для редактирования удалите символическую ссылку и извлеките этот путь из Subversion (вам, вероятно, понадобится сценарий для переноса svn команд для обработки этого)
  4. Либо в svn commit, либо в отдельном скрипте, возможно, вы захотите удалить каталог рабочей области и восстановить символическую ссылку.
  5. Обновляйте копию, доступную только для чтения, либо через post-commit в Subversion, либо периодически с cron или чем-то подобным.

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

Причиной обходных путей является то, что Subversion действительно не предназначалась для использования таким образом. Тем не менее, этот метод будет работать, с некоторой болью, для того, что вы описываете.

1 голос
/ 17 ноября 2008

Диски дешевые. Пусть каждый разработчик проверит копию дерева. Subversion решает проблему блокировки, поэтому каждый пользователь, имеющий собственную копию, не мешает другим вносить изменения. Вы будете намного продуктивнее и будете лучше подотчетны за изменения, если каждый из них проверяет и управляет своей собственной версией дерева разработки.

1 голос
/ 17 ноября 2008

@ Лита: Я знаю, что RCS основан на блокировке, и у нас нет проблем с этим в нашем сценарии. Я также знаю, что вы можете использовать SVN с блокировкой, но проблема с извлечением для пользователя сохраняется ...

1 голос
/ 17 ноября 2008

В типичной среде SVN каждый пользователь имеет свою собственную (полную или частичную) копию дерева, где он может вносить любые изменения, которые он хочет внести в дерево, не мешая и не нарушая своих коллег. Затем она решает, что проверить. Все остальные могут оформить заказ, когда они считают, что это лучшее время для этого. и основной пользователь (развертывание) регулярно (ежедневная сборка) проверяет целостность.

Я думаю, что вы путаете RCS по сравнению с CVS / subversion: RCS блокирует файл для всех остальных во время редактирования, SVN ничего не блокирует (обычно. Блокировка возможна, но редко используется).

1 голос
/ 17 ноября 2008

Почему бы просто не проверить кусочек дерева, которое вы хотите изменить? Это не должно быть проблемой. Может быть, я не совсем понимаю, что вы имеете в виду под «разовой проверкой».

0 голосов
/ 17 ноября 2008

Если задержка / пропускная способность при проверке рабочей копии вас беспокоит, имейте в виду, что рабочая копия полностью автономна. Это означает, что вы можете оформить заказ в огромном хранилище, а затем просто скопировать эту «рабочую копию» тому, кто в ней нуждается.

Тот же трюк также хорошо работает для веток - если у вас есть недавняя рабочая копия ствола без изменений, вы можете просто скопировать ее и затем 'svn switch' 'на новую ветку.

  1. Оформление огромного хранилища в base_working_copy (за ночь?)
  2. cp -a base_working_copy my_working_copy (и кому бы то ни было нужно)
  3. cp -a base_working_copy my_branch
  4. cd my_branch
  5. переключить мою ветку на любую ветку URL

Я также успешно использовал это для рассылки компакт-дисков больших рабочих копий людям с проблемами пропускной способности.

Смотри также: использование subversion с действительно очень большим сайтом

0 голосов
/ 17 ноября 2008

Subversion позволяет вам извлекать любую часть дерева, а с версией 1.5 также поддерживает разреженные проверки . Это означает, что вы можете точно настроить оформление заказа на уровне отдельного каталога (но не настолько, насколько это возможно для уровня отдельных файлов).

Так, например, если ваш репозиторий выглядит так:

Repository Root
  tags
  branches
  trunk
    doc
    src
      module1
        resources
      module2
    images

Вы можете извлекать только файлы в каталоге module1 (но не в его подкаталогах), используя это:

svn checkout --depth=files svn://server/repository/trunk/src/module1

Если вам также требуется содержимое подкаталога, вы можете настроить размер оформления заказа позже, см. Документацию.

0 голосов
/ 17 ноября 2008

@ Джеспер: Да, это было бы возможно. Дополнительная учетная запись для всех участников, возможно, с дополнительным правилом sudo.

@ Джон: Дело в том, что в основном все мы должны изменить некоторые файлы в некоторую часть дерева. Вот почему нам всем нужно все дерево, но мы не хотим, чтобы было так много проверок.

0 голосов
/ 17 ноября 2008

Я бы посоветовал вам использовать одну специальную учетную запись для дерева веб-сайтов, к которой имеют доступ все разработчики, и проверить это дерево в качестве этого пользователя.

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