Как использовать репозиторий Internet Subversion при разработке кода? - PullRequest
5 голосов
/ 26 июня 2009

Я нарисовал себя в проблеме работы с проектом Subversion из CodePlex - для этого я попросил помощи здесь . У меня есть локальный репозиторий, а у CodePlex есть интернет-репозиторий для проекта, и эти два не смешиваются: - (.

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

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

Этот метод работы кажется мне здравым смыслом, но я никогда не работал над проектом с открытым исходным кодом. Так: 1. Это действительно распространенный метод работы и 2. Как вы поступаете с Subversion, не попадая в неприятности?

Ответы [ 6 ]

1 голос
/ 26 июня 2009

Поглощение изменений из внешнего источника («отбрасывает поставщик») в ваш собственный локальный репозиторий описано в книге SVN в разделе Ветви поставщика .

В качестве альтернативы, вы можете просто использовать команду слияния для выбора версий из папки в хранилище A и применить эти изменения к рабочей копии папки в хранилище B. Кажется, что команда merge имеет некоторую поддержку для этого (по крайней мере, в последней версии), так что это, вероятно, работает так же, как слияние между локальными ветвями (за исключением автоматического отслеживания слияния).

1 голос
/ 26 июня 2009

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

Я сам использую Mercurial и рекомендую его для пользователя Subversion, поскольку многие его команды аналогичны командам в Subversion. Другие популярные инструменты в этой категории включают Git и Bazaar .

0 голосов
/ 26 июня 2009

Обычно я сохраняю одну копию, которую я принес из SVN, которая содержит только обновленный код из репозитория и код, над которым я работаю и который планирую отправить обратно.

При работе с новой функцией я экспортирую всю копию в новую копию на своем компьютере, а затем выполняю + тестирование необходимых изменений. Если я решил, что хочу зафиксировать изменения обратно, я использую какой-то инструмент слияния ( WinMerge , если вы работаете в Windows), чтобы объединить мои изменения обратно в исходную папку с обновленным SVN, которая Я сбил.

Здесь все довольно аккуратно, так как я могу относительно легко избежать непреднамеренной фиксации кода. Я также могу легко отменить изменения, просто сделав новую копию моей «базовой» SVN-обновленной папки. Недостатком является то, что это делает работу с несколькими функциями, которые я не планирую совершать одновременно, довольно громоздкой.

0 голосов
/ 26 июня 2009

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

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

На github вы увидите множество подобных проектов (расширяющих проекты OSS с подрывной деятельностью с использованием git) - для NHibernate, для проекта Castle и т. Д.

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

0 голосов
/ 26 июня 2009

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

Другой вариант - экспортировать файлы из репозитория и добавить его в свой собственный репозиторий. Но это будет только боль в будущем.

0 голосов
/ 26 июня 2009

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

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

...