Как превратить проект в локальный SVN-репозиторий? - PullRequest
3 голосов
/ 01 марта 2011
  • Я хочу получить копию проекта с открытым исходным кодом в локальном репозитории SVN.
  • Я хочу зафиксировать изменения в моем хранилище, но не в центральном хранилище проекта с открытым исходным кодом.
  • Я хочу видеть обновления, поступающие из репозитория проектов с открытым исходным кодом, и просматривать их.
  • Если мне нравятся эти изменения, я хочу поместить их в свой локальный репозиторий.

  • Какими путями я могу пойти, чтобы удовлетворить эти требования?

  • Какой путь лучше и почему?

Будет ли история SVN проекта с открытым исходным кодом оставаться доступной в моем хранилище этими способами?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 10 июля 2013

Взгляните на эту тему StackOverflow и ответьте: Правильный рабочий процесс для управления частной веткой Subversion. У меня очень похожая проблема с вашей, и я собираюсь продолжить использовать git-svn [мост приведен в принятом ответе].См. Также Git и другие системы - Git и Subversion

Преимущество основного подхода: Таким образом, вы всегда можете использовать SVN в качестве «внутреннего конца», окончательного хранилища.

Надеюсь, это поможет.Любовь и мир,

1 голос
/ 10 июля 2013

Как и было предложено от gbjbaanb, вы должны использовать Ветви поставщика и оставить его в чистом виде Subversion

Вы можете (должны) добавить к описанному в книгеодна небольшая деталь рабочего процесса:

  • Если исходный проект также обрабатывается Subversion
  • Если вы можете получить доступ к хранилищу проекта из местоположения вашего собственного сервера

, вы можетесвязать часть вышестоящего репо (/ trunk ???) с веткой вашего репо (используя svn: externals).Таким образом, вы можете

  • Контролировать активность в восходящем направлении (svn up, svn log)
  • Иметь собственную независимую от основной магистрали на своем сервере
  • Интегрировать изменения в вышестоящемваш код, используя обычное слияние
0 голосов
/ 01 марта 2011

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

Я не знаю, работали ли вы с одним из них, но вы можете добиться того, чего хотите, с обоими.

Вот несколько шагов к моей идее (с точки зрения Mercurial, но это будет очень похоже на Git):

  1. Инициировать ртутный репозиторий (hg init в пустой директории)
  2. Оформить заказ в хранилище svn
  3. Добавить все файлы в хранилище Mercurial (hg addremove)
  4. Передать изменения в хранилище Mercurial (hg commit -m "initial commit")
  5. Клонировать ртутный репозиторий в другом месте (hg clone /path/to/myrepo . в пустой директории)

Теперь вы можете работать в этом ртутном клоне и совершать в нем действия. Однако очень важно никогда не выдвигать изменения в исходном хранилище Mercurial.

Для обновления хранилища SVN выполните следующие действия:

  1. В кассе SVN: svn update
  2. Все еще в контрольном пункте SVN hg addremove; hg commit -m "svn update"
  3. В каталоге workind (mercurial clone): hg pull; hg merge; hg commit -m "merging svn update"

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

По сути, мы используем Mercurial как своего рода прокси для хранилища SVN. Вы можете зафиксировать в локальном клоне Mercurial, не изменяя при этом исходный источник, и все равно обновлять из SVN, а затем объединять изменения в локальном клоне Mercurial.

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

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

Однако, если вы никогда не слышали о dvcs, git или mercurial, я настоятельно рекомендую вам прочитать некоторую документацию, потому что эти шаги довольно сложны, и все может пойти не так, как надо.

Надеюсь, эта помощь.

EDIT:

Вы также можете использовать SVN externals , но вы не сможете просмотреть и выбрать модификации, которые хотите импортировать в свой репозиторий .

Вам необходимо установить свойство svn: externals для каталога с помощью:

svn propedit externals adirectory

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

path/where/tocheckout    http://svn.example.com/repos/project

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

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

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