Могу ли я иметь один проект в двух SVN-репозиториях? - PullRequest
6 голосов
/ 09 января 2009

Наш И.Т. Отдел не разрешает подключения к серверу SVN извне физического офиса. (Они просто такие.) Мне нужно работать над проектами, когда я не в офисе.

Я мог бы просто проверить проект и подождать, пока я приду, чтобы сделать регистрацию. Может быть, это будет лучше. Но я люблю часто проверять. Мне интересно, есть ли способ сохранить проект в двух репозиториях и поддерживать их в актуальном состоянии. Таким образом, я всегда смогу зарегистрироваться где-нибудь на случай смерти моего HD. У меня есть собственный репозиторий на VPS-сервере, который я использую для личных проектов.

Я исследовал команду svn switch. С моим текущим проектом в обоих репозиториях я попытался переключить свою рабочую копию с личного на рабочие серверы SVN ...

$ svn switch --relocate svn+ssh://personalvps.com/svn/project/trunk svn://worksvn/project/trunk
svn: The repository at 'svn://worksvn/project/trunk' has uuid '2baef97e-42ce-488c-bbba-c2625158c643', but the WC has 'f13e1f32-dc92-4c4a-b84d-34a59fe32063'

Затем я попытался добавить параметры --username и --password, но получил сообщение об ошибке "запись не найдена".

Это вообще возможно или это абсолютно непрактично?


UPDATE

Спасибо за ответы. К сожалению, любое решение, которое связано с действиями И.Т. (небольшое изменение политики, изменение настроек где-то, установка чего-либо) не на столе. Мне нужно найти решение в рамках текущей настройки, в которой нет внешних подключений, кроме наших веб-серверов.

Я посмотрю на управление распределенной версией.

Ответы [ 12 ]

11 голосов
/ 09 января 2009

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

7 голосов
/ 09 января 2009

Вы читали о git ? он использует локальный репозиторий для автономной работы и может быть легко синхронизирован с репозиторием SVN.

Две статьи , которые объясняют, как делать то, что вы хотите.

5 голосов
/ 09 января 2009

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

http://svn.apache.org/repos/asf/subversion/trunk/notes/svnsync.txt

Он очень прост в использовании, и вы сможете настроить свое офисное репо для синхронизации с личным репозиторием.

4 голосов
/ 09 января 2009

Как последнее усилие, вы всегда можете проделать дыру в корпоративном брандмауэре с помощью SSH. Посмотрите на «ssh туннели» (а также, если подумать, «пробить дыру в брандмауэре» также может быть хорошим поисковым термином). Я думаю, что вы захотите использовать опцию -L или -R ssh, но я не могу вспомнить, какие из них или даже если они верны. И если вы работаете с Windows, все равно можно использовать ту же самую технику, если вы сначала установите Cygwin.

РЕДАКТИРОВАТЬ : Извините, я не совсем понял, как это работает. Опция, которую вы хотите, это -R. Он открывает порт на удаленной машине (для прослушивания). Когда что-то подключается к этому порту на удаленной машине, соединение возвращается обратно по SSH-соединению к локальной машине, а затем перенаправляется на сервер по вашему выбору в локальной сети. Вы можете подключиться к домашнему компьютеру с рабочего компьютера, прежде чем выходить ночью с SSH, чтобы открыть туннель. Затем, когда вы работаете из дома, вы устанавливаете рабочую копию SVN (используя svn switch --relocate) так, чтобы она указывала на ваш домашний компьютер. Кстати, порт SVN по умолчанию - 3690, если вы используете демон svnserve.

3 голосов
/ 09 января 2009

Это не практично только для Subversion, но практично в распределенных системах управления версиями, таких как git.

Посмотрите на git, и что более важно git-svn .

2 голосов
/ 27 февраля 2009

Краткий ответ: нет. Вы не можете делиться историей между репозиториями.

Длинный ответ: это слабость централизованных систем, таких как Subversion. Решения распределенного контроля версий (например, git) не имеют этой проблемы. Каждая «рабочая копия» является репозиторием, и коммиты могут быть сделаны автономно и синхронизированы между репозиториями (или центральным «официальным» репозиторием) в более позднее время.

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

  • git включает git-svn , который обеспечивает такую ​​функциональность. Git имеет кривую обучения, но это улучшилось с серией 1.6.x.

  • svk , похоже, уже не очень активно разрабатывается, но работает достаточно хорошо. Он работает очень , как Subversion. Это позволяет вам хранить локальные зеркала ваших официальных репозиториев, делать коммиты в локальные филиалы и передавать эти изменения обратно в официальный репозиторий, когда вы можете. В действительности он не распространяется в том же смысле, что и git, но, вероятно, он лучше подходит для вашей ситуации и требует меньше концептуальных изменений, чем git.

2 голосов
/ 09 января 2009

Я бы настоятельно рекомендовал вашему ИТ-отделу настроить защищенную VPN, которая бы поместила вас в их безопасную локальную сеть, даже если вы физически подключены к другому интернет-соединению. Поддерживать синхронизацию проектов с несколькими репо невероятно сложно.

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

1 голос
/ 09 января 2009

Вам нужна система репликации Subversion, например, Pushmi или SVK, как уже упоминалось. Если вы можете подключиться через веб-серверы, почему бы вам не настроить SVN с доступом http вместо svn? Если порты заблокированы, вы можете использовать mod_proxy для перенаправления общедоступного URL-адреса на внутренний порт SVN.

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

1 голос
/ 09 января 2009

В svn вы определенно можете создать несколько репозиториев, а затем связать их вместе с помощью команды svn: externals. Я дома, поэтому не могу вспомнить все детали, но это похоже на использование модулей в CVS. Вы создаете папку и задаете для нее свойства, представляющие собой целую кучу внешних объектов (которые сопоставляются с другими более высокими папками в других хранилищах).

Гадкий момент заключается в том, что создавать ветки и финальные версии беспорядочно, поскольку последняя папка со свойствами не очень хорошо обрабатывается в репозитории, но кроме того, что она немного неудобна, она работает достаточно хорошо. У нас есть базовый код в одном репозитории и два других с конфигурациями для конкретного экземпляра. Оформите правильный тег, и вы получите полностью объединенный проект, готовый для взлома. (В CVS он работал намного лучше, но еще одна полезная функция потерялась во времени).

Paul.

1 голос
/ 09 января 2009

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

http://justinsboringpage.blogspot.com/2008/11/how-to-copy-svn-repository-from.html

В Subversion есть инструмент SVNSYNC, который упрощает синхронизацию из одного хранилища в другое. Это замечательно при переходе на другой веб-сервер. В этом примере я копирую проект, над которым работаю, из Sourceforge в Google Code. После этого репозиторий кода Google станет точным зеркалом, включая полную историю изменений.

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

Для этого вам нужно иметь имя пользователя и пароль для кода Google. Для репозитория, который вы копируете, вы не копируете. Сначала вы используете начальную команду, чтобы настроить параметры для копии, а затем используйте команду sync, чтобы сделать фактическую копию. Это делает одну ревизию за раз и занимает некоторое время ...

svnsync init https://lispbuilder.googlecode.com/svn https://lispbuilder.svn.sourceforge.net/svnroot/lispbuilderProject svnsync - имя пользователя YOURNAME --password YOURPASSWORD sync https://lispbuilder.googlecode.com/svn https://lispbuilder.svn.sourceforge.net/svnroot/lispbuilder

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