metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-04-25 08:16 am

А вот как у вас модно

работать с системами контроля версий? Конкретно, с subversion, потому что в меркуриале и прочих DVCS можно хоть обкоммитится до одури - пока в другой репозиторий не закинешь, этого никто не увидит.

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

PS: В комментариях много советуют бранчи. Я почему-то никогда ими не пользовался, сначала в svn они были адом и мне лень было это осиливать, а сейчас как-то никогда не возникает надобности. Т.е. организация проекта и релизов как-то так получилась, что борьба с бранчами не стоит того.

[identity profile] ex-biespart.livejournal.com 2010-04-25 08:30 am (UTC)(link)
Я карпарацыйны perforce абгортваю ў git-p4. Для кожнай фічы маю асобную галіну, у якой стэкам складваю ўсе больш-менш сэнсоўныя змены. Перад камітам назад у perforce аб'ядноўваю ўсё напрацаванае ў 1-2 асэнсаваныя каміты (rebase) і тады ўжо раблю git-p4 submit.

[identity profile] morozov.livejournal.com 2010-04-25 06:48 pm (UTC)(link)
А есть где-то руководство для чайников по поводу настройки git-p4 под виндовс? Насколько я понимаю, из коробки (как git-svn) такое не работает. Очень хотелось бы попробовать.

[identity profile] ex-biespart.livejournal.com 2010-04-25 07:05 pm (UTC)(link)
Тут ничего не подскажу - я очень далёк от Windows. Но, в принципе, git-p4 - это обычный python-скрипт без больших внешних зависимостей, который вызывает p4 из $PATH. Не вижу причин, по которым он не будет работать под Windows.
Естественно, прийдётся немного больше попотеть, настраивая окружение...

[identity profile] jdevelop.livejournal.com 2010-04-25 08:47 am (UTC)(link)
как советовали выше, git поможет, но он уебански работает на винде по слухам

а если чисто svn - то коммитить в транк всякое говно, в ветку stable это говно потом сливать через тулзу svnmerge, которая костыль для уебанского мержа в свн - но работает

для больших кусков форкнуть бранч, поиздеваться там - и потом взад в транк

[identity profile] kurilka.livejournal.com 2010-04-25 08:54 am (UTC)(link)
Имхо кроме проблем с crlf (решаемых при наличии прямых рук) там ничего уебанского нет.
А так согласен - бранчи и ещё раз бранчи, и DVCS в этом смысле гораздо более логичная вещь (или такие есть централизованные VCS с удобными мерджами?).

[identity profile] blacklion.livejournal.com 2010-04-25 08:55 am (UTC)(link)
Не нужен в svn костыль уже, 1.6.x вполне хорошо нативно мерджит.

[identity profile] lionet.livejournal.com 2010-04-25 09:04 am (UTC)(link)
Судя по тому, каким образом это реализовано, грабли там только паутиной слегка присыпаны.

Легче уж бранчи с номерами ревизий в имени делать.

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 09:06 (UTC) - Expand

[identity profile] jdevelop.livejournal.com 2010-04-25 09:06 am (UTC)(link)
если ты про --reintegrate, тогда оно как бы и да, бранч целиком засосет за милую душу

а вот показать, какие ревизии уже есть в транке, а каких еще нет - оно увы, не сможет, или я не нашел

например такое действие

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

как это просто сделать в svn - я не знаю, но вот

svnmerge merge -r 1,3,4,11,25
работает отлично

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 09:07 (UTC) - Expand

(no subject)

[identity profile] jdevelop.livejournal.com - 2010-04-25 09:19 (UTC) - Expand

(no subject)

[identity profile] jdevelop.livejournal.com - 2010-04-25 09:19 (UTC) - Expand

[identity profile] alexott.livejournal.com 2010-04-25 09:15 am (UTC)(link)
у нас на работе svn, но я пользуюсь git, куда всосал репозиторий через git-svn (можно взять hgsvn, bzr-svn по вкусу). Я тоже предпочитаю коммитить маленькими кусочками - коммит должен содержать одно изменение - исправление ошибки и т.д. Если делается какая-то эксперементальная работа, то я завожу отдельный бранч, работаю в нем, и после того, как все нужное получилось, коммичу в основную ветку разработки и делаю git svn dcommit, так что в центральном репозитории оказываются все сделанные изменения. Но я пользуюсь одним правилом - код в центральном репозитории всегда должен компилироваться и проходить тесты.

[identity profile] d4s.livejournal.com 2010-04-25 09:31 am (UTC)(link)
+1

[identity profile] kurilka.livejournal.com 2010-04-25 09:35 am (UTC)(link)
Cлушай, а как у тебя выглядит "коммичу в основную ветку разработки"? Через cherrypick?

[identity profile] alexott.livejournal.com 2010-04-25 09:42 am (UTC)(link)
зависит от того, что за ветка - если это trunk, то туда уходит все из master через dcommit. если ветка - отдельный бранч в svn, типа для фиксения ошибок в конкретной версии, то да - использую cherrypick

(no subject)

[identity profile] kurilka.livejournal.com - 2010-04-25 09:50 (UTC) - Expand

(no subject)

[identity profile] alexott.livejournal.com - 2010-04-25 12:25 (UTC) - Expand

[identity profile] vp.livejournal.com 2010-04-25 09:40 am (UTC)(link)
+1

[identity profile] psilogic.livejournal.com 2010-04-25 09:24 am (UTC)(link)
У нас CVS. Коммит по принципу: если состояние проекта не ухудшится от данного коммита. То есть, нельзя коммитить, например, если от этого проект перестанет собираться.

[identity profile] slonopotamus.livejournal.com 2010-04-25 09:50 am (UTC)(link)
> У нас CVS.

Сочувствую.

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 09:53 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2010-04-25 09:56 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 10:30 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 10:32 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2010-04-25 10:41 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 10:44 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 10:46 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 10:49 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2010-04-25 10:53 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 11:05 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 10:55 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 11:06 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 12:54 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:04 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 13:11 (UTC) - Expand

(no subject)

[identity profile] familom.livejournal.com - 2010-04-25 15:02 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 11:11 (UTC) - Expand

(no subject)

[identity profile] volodymir-k.livejournal.com - 2010-04-25 18:16 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 18:48 (UTC) - Expand

[identity profile] dmzlj.livejournal.com 2010-04-25 09:47 am (UTC)(link)
1) SVN в топку.

Далее. Сделал таск - опубликовал свой бранч. Ответственный за интеграцию берет бранч с выполненным таском и мержит изменения на релизный бранч.

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

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

Для целей бэкапа так же в конце рабочего дня приветствуется сделать push со своей локальной ветки в центральный реп, что бы если что (винт посыпался, компютер сгорел, канализацию прорвало и все затопило) изменения не пропали.


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

Edited 2010-04-25 09:51 (UTC)

[identity profile] metaclass.livejournal.com 2010-04-25 09:54 am (UTC)(link)
Насчет "коммитится большими осмысленными аннотированными кусками работы, желательно со ссылкой на соответствующий таск/тикет." - это в DVCS есть методы "объединить over 9000 коммитов из одной локальной репы в один коммит в основную"?

Кстати, разделить релизный и центральный реп для бэкапов - до этого я не додумался с hg, это хорошая идея. Не додумался, потому как в svn у нас центральный и релизный это общий реп на сервере.

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 09:59 (UTC) - Expand

(no subject)

[identity profile] aamonster.livejournal.com - 2010-04-25 12:18 (UTC) - Expand

(no subject)

[identity profile] aamonster.livejournal.com - 2010-04-25 12:19 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 12:29 (UTC) - Expand

(no subject)

[identity profile] aamonster.livejournal.com - 2010-04-25 13:14 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 12:27 (UTC) - Expand

(no subject)

[identity profile] aamonster.livejournal.com - 2010-04-25 13:08 (UTC) - Expand

(no subject)

[identity profile] anatoly borodin - 2010-04-26 00:44 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 13:21 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 13:21 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:27 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 13:33 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:46 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 14:08 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 14:10 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 14:15 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 14:20 (UTC) - Expand

[identity profile] dmzlj.livejournal.com 2010-04-25 09:55 am (UTC)(link)

PS: В комментариях много советуют бранчи. Я почему-то никогда ими не пользовался, сначала в svn они были адом и мне лень было это осиливать, а сейчас как-то никогда не возникает надобности. Т.е. организация проекта и релизов как-то так получилась, что борьба с бранчами не стоит того.


Суть в том, что авторы CVS и SVN много сделали для того, что бы бранчи воспринимались, как какая-то вещь, с которой надо бороться. На самом деле, это вешь, которая служит для удобства, и бороться там не с чем.

[identity profile] metaclass.livejournal.com 2010-04-25 09:58 am (UTC)(link)
Я как-то опасаюсь, что у меня в результате работы в бранчах репозиторий превратится в рандомный граф из ченджесетов и ревизий и я сойду с ума читать логи изменений в случае чего.
Т.е. c svn и без бранчей как-то легче для мозга - я точно знаю что история линейна, без ответвлений и слияний. А вот с бранчами может получится живая изгородь с шипами :)

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 10:05 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 10:48 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 10:54 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 11:13 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 11:16 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 11:21 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 11:31 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 11:42 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 11:58 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 12:14 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 12:23 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 12:30 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 12:39 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 12:51 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 12:59 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:05 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:10 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:15 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2010-04-25 12:51 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 12:53 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:02 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:11 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:15 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:18 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:23 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:50 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 13:53 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:56 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2010-04-25 14:01 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 15:02 (UTC) - Expand

(no subject)

[identity profile] usovalx.livejournal.com - 2010-04-25 23:38 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 13:30 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:48 (UTC) - Expand

(no subject)

[identity profile] blacklion.livejournal.com - 2010-04-25 13:26 (UTC) - Expand

(no subject)

[identity profile] psilogic.livejournal.com - 2010-04-25 13:45 (UTC) - Expand

(no subject)

[identity profile] kurilka.livejournal.com - 2010-04-25 10:06 (UTC) - Expand

(no subject)

[identity profile] nivanych.livejournal.com - 2010-04-25 10:48 (UTC) - Expand

(no subject)

[identity profile] kurilka.livejournal.com - 2010-04-25 10:56 (UTC) - Expand

(no subject)

[identity profile] nivanych.livejournal.com - 2010-04-25 10:59 (UTC) - Expand

(no subject)

[identity profile] kurilka.livejournal.com - 2010-04-25 11:02 (UTC) - Expand

(no subject)

[identity profile] nivanych.livejournal.com - 2010-04-25 11:06 (UTC) - Expand

[identity profile] http://users.livejournal.com/_aive_/ 2010-04-25 11:39 am (UTC)(link)
У нас проекты небольшие, по 3-5 человек, так что только одно правило - после коммита проект должен билдиться :)
А так, если комментарий здравый можешь добавить к коммиту - значит это уже не какая-то мелкая хренотень :)

[identity profile] aamonster.livejournal.com 2010-04-25 12:14 pm (UTC)(link)
Правильно советуют. Просто чтобы в основной ветке всегда была живая версия.

Вариант (не идеальный, но терпимый) - локальный mercurial + централизованный svn. Коммитить на каждый чих у себя, а как заработает - в svn.

[identity profile] familom.livejournal.com 2010-04-25 02:59 pm (UTC)(link)
Локально использую mercurial поверх центрального репозитория.

[identity profile] morozov.livejournal.com 2010-04-25 06:57 pm (UTC)(link)
Что в раньше в SVN, что сейчас в Perforce стараюсь коммитить по возможности как можно чаще. Есть основная ветка разработки, мелкие исправления делаются прямо в ней. Для более крупных заводятся функциональные ветки. Когда работал с SVN, сделали автоматическое развёртывание с созданием метки и переключением на неё копии на боевых серверах.

[identity profile] zmila.livejournal.com 2010-04-26 06:29 am (UTC)(link)
мы пользуемся svn. команда из 20 чулавек. коммитается по 100-200 файлов в день. примерно раз в два-три дня пересекамся и приходится решать конфликты. люди наши работают по-разному: кто коммитает небольшие изменения по 1-3 файлам. а кто-то накапливает за несколько дней и потом пуляет сразу десятками.

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

[identity profile] sergiej.livejournal.com 2010-04-26 07:35 am (UTC)(link)
Для команды больше 10 человек считаю рабочей схему: индивидуальные форки (кто любит каждую стоку коммитить) - транк - ветка для системных тестов - релизная ветка.
Всё что идёт в транк должно компайлится - иначе закомитевшему по голове. Из транка в тест идут те релизы, которые прошли юнит тесты - мержит в тестовую ветку уже тестер. Из тестов в релиз идёт то что прошло тесты. Оперировать довольно просто - девелопер посылает набор номеров релизов, которые должны пойти в тест - тестер замержил - не скомпайлилось - откат. Тестер посылает ответственному за главный билд аналогичный список того, что прошло тесты. Работает как часы даже у раздолбайской команды.