История О Том, Как Копирование Svn Победило Слияние Svn

Итак, сразу опишу нашу ситуацию, а потом объясню, почему я дал этой статье такое дурацкое название :-) Наша команда из 4 человек работает над одним проектом (пока не скажу, что это за проект, надеюсь, напишу об этом позже) У нас было 3 ветки SVN: Production (стабильная ветка, обслуживающая запросы пользователей), Staging (промежуточная ветка), Trunk (ветвь разработчика).

В ходе итерации (мы работаем по Scrum, Скрам ), программисты фиксируются в одной ветке разработки (Trunk), после чего накопленные в ходе итерации изменения и возможности передаются в Staging ветку с помощью команды svn merge, где они тестируются и проверяются нашим QA. Далее, чтобы не делать очередной мерж в продакшене (из Staging в Stable) с последующим паническим тестом в продакшене после слияния.

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



$HTTP["host"] =~ "^.

*somehost.com$" { .

server.document-root = "/path/to/the/stable/branch" .

} $HTTP["host"] =~ "^.

*somehost.com.staging$" { .

server.document-root = "/path/to/the/staging/branch" .

}

После выпуска:

$HTTP["host"] =~ "^.

*somehost.com$" { .

server.document-root = "/path/to/the/staging/branch" .

} $HTTP["host"] =~ "^.

*somehost.com.staging$" { .

server.document-root = "/path/to/the/stable/branch" .

}

Те.

в конце итерации Stable и Staging поменялись местами.

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

Вот мы и избавились от одного лишнего слияния.

Но этого нам показалось мало :-) Нет ничего более непредсказуемого, чем инженерия.

Мы решили удалить второй мердж, а точнее оставшийся.

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

Во время последнего слияния от разработки к стадии мы столкнулись с большими проблемами, из-за того, что все мы используем разные операционные системы (Arch linux, Mac OS, Windows Vista), разные IDE (Eclipse, Net Beans, Notepad++, VIM :-).

) ) И даже разные настройки внутри одних и тех же редакторов (сейчас я напишу спецификацию об общих настройках редактора).

В связи с этим для возврата каретки везде использовались разные последовательности символов, некоторые редакторы заменяли табуляцию пробелами и т. д. В связи с этим при слиянии у нас не возникло никаких конфликтов, SVN слил всё!!! По сути идентичные куски кода.

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

Но в какой-то момент наши нервы не выдержали! И я просто удалил промежуточную ветку (svn delete staging), а затем мы просто скопировали текущую ветку разработки (транк) во вновь созданную (с помощью команды svn copy Trunk Staging).

Осталось только поправить конфиги во вновь созданной ветке и все.

Поэтому слияния как такового нет. В конце каждой итерации промежуточная ветвь удаляется (постановка svn delete).

И создается новый (постановка ствола копии svn).

И конфиги этому способствуют. Единственное, что меня беспокоило, это то, что размер репозитория будет быстро расти.

Но.

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

И изменения отличаются от этой базовой ветки.

Поэтому я совершенно спокоен относительно размера репозитория.

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

З.

Ы.

На самом деле меня даже больше интересовали мнения по поводу мержа в Git Например, по словам Линуса Торвальдса: «Я знаю несколько компаний, которые используют git внутри компании, даже не подозревая об этом, потому что они по-прежнему хранят свои основные репозитории в Subversion, но многие разработчики затем импортируют код в git, потому что git действительно хорошо справляется со слияниями.

.

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

Это немного грустно, но я слышал о многих людях, работающих в компаниях именно по такому сценарию…» Git Google Talk Теги: #svn #svn merge #svn copy #svn delete #branches #Системы контроля версий

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.