2009-06-03 5 views
4

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

Я хочу знать, что является лучшей практикой, касающейся ОТРАЖЕНИЯ, СООБЩЕНИЯ при использовании SVN в такой ситуации.

В настоящее время мы сталкиваемся с проблемой, что в одном файле 4 изменения. Клиент хочет, чтобы в X (только 4 основных выпуска и 4 младших выпуска) были выпущены только 2 изменения.

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

Может кто-нибудь ответить, как решить эту проблему, используя SVN как лучший инструмент, какой он есть.

Спасибо и с уважением, Кедар Хукери.

ответ

5

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

Это зависит от вашего процесса, но в целом:

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

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

1

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

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

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

+0

Если вы используете SVN, SVK - это удивительный вспомогательный инструмент для управления сложностью слияния в Subversion. Как инструмент, subversion не предлагает много безопасности/гибкости управления выпуском, что-то вроде ClearCase. Я не уверен, что они попытаются исправить этот пробел - их заявленная цель была лучше CVS, чем CVS, и что они отлично справились с этим. –

+0

Изменение контроля источника может быть затруднительным. Вы считали, что лучше разбираетесь в инструментах Diff, как предлагает darthcoder? У меня есть сторонний SVN-клиент, но мне нравится сторонний инструмент сравнения, который у меня есть настолько, что я использую его, а не используя инструмент, включенный в мою операционную систему (Apple FileMerge). Araxis FileMerge - отличный инструмент, и мне нравятся изменения лучше всего (OS X, к сожалению). –

+0

@darthcoder & Andrew: По-видимому, Mercurial может легко импортировать репозиторий SVN, извлекать и историю фиксации, поэтому это может быть не очень сложно, но я рассмотрю инструменты, которые вы, ребята, предлагаете, большое спасибо за эти указатели! – Billy

1

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

main branch (trunk) - new feature development here 
    |- release-1.0 - locked release branch 
    |--- release-sp1 
    |--- release-patches - patch release fix stream (new fixes merged here) 
    |------ release-sp1-issue# - this is where you make your bug fixes 
           before merging them. 
           This issue# is the bug-id in your tracking system. 

После того, ошибка будет исправлена, и стремится к выпуску патча, вы удалите старый -эмиссионный # филиал , Это препятствует тому, чтобы филиалы выходили из-под контроля, но позволяет держать небольшие изменения в настройках.

Материнские платы могут быть принудительно осуществлены путем освобождения соединительных линий только для интеграторов. Использование подрывной деятельности через апач: Subversion/Apache Permissions, вы можете создать группу, интеграторы, и установить следующие разрешения на Вашем проекте

project 
    |- branches (everyone: rw) 
     |- individual-fixes 
    |- release-branches: (integrator: rw, everyone: ro) 
     |- release-1.0-fixes 
     |- release-2.0-fixes 
    |- trunk  (integrator: rw, everyone: ro) <- new dev goes here!!!! 
    |- tags  (integrator: rw, everyone: ro) 
     |- release-1.0 
     |- release-1.0-sp1 
     |- release-2.0 

Тогда каждое слияние мало, хорошо отслеживается, и лишь небольшая группа людей может сделать слияние. Однако это создает узкое место в вашей команде слияния. Я никогда не работал с большой командой git/mercurial, чтобы понять, как это работает.

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

+0

Поддерживаете ли вы свои ветви релиза в стволе разработки? Мне трудно понять это. Я использую стандартную структуру Subversion, поэтому сохраняю выпуски в папке тегов. Похоже, это быстро загромождает. –

+0

теги доступны только для чтения. Вы не интегрируете/не объединяетесь в них. Но имея отдельное дерево ветвей релиза, вы можете контролировать доступ к интеграторам. В идеале, когда что-то помечено, его ветвь release удаляется. Как только SP1 отправляется, вот и все, никаких изменений.В этом случае, предполагая 1 выпуск, у вас есть только две ветви: одна, соединительная линия (новая разработка) и поток исправлений выпуска, который в конечном итоге станет новым пакетом обновления. –

Смежные вопросы