metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-11-10 09:41 pm

Меркуриал

Одной вещи в меркуриале я в принципе понять не могу.
Я меняю файл А, делаю commit и push, потом я меняю дома файл Б и делаю commit, а на попытку push меня посылают фпень делать pull/merge/commit.
Вопрос - почему бы независимые изменения в разных папках не мержить автоматом, как это сделано в svn?

PS: А теперь рассмотрим, как это положено делать:
1) дерево исходников представляет собой граф, узлы которого - каталоги и блобы с файлами, а связи - связь между каталогом и расположенными в нем подкаталогами и файлами.
2) пользователь 1 меняет файл с путем A
3) пользователь 2 меняет другой файл с путем B.
4) Друг другу они в принципе никак не мешают - структура графа не меняется, меняются два независимых узла.
5) операции коммутируют - т.е. вне зависимости от порядка применения операций, результат будет одним и тем же.
6) для коммутирующих операций merge должен делаться, очевидно, автоматически.

[identity profile] cottidianus.livejournal.com 2012-11-11 12:42 am (UTC)(link)
браво

[identity profile] berezovsky.livejournal.com 2012-11-11 02:34 am (UTC)(link)
Ну это ты знаешь, что они независимые. А он не знает.
Пришёл домой, сделал пул, вспомнил, что во второй папке написал херню, поправил и запушил всё сразу.
Я так понимаю.

[identity profile] gds.livejournal.com 2012-11-11 02:43 am (UTC)(link)
> а на попытку push меня посылают делать pull/merge/commit.

не обязательно. hg push -f не посылает. Очень полезно в случаях, когда мержить должен не тот, кто пушит.
Кроме того, вроде где-то видел хрень (то ли настройка, то ли расширение), которое то ли команду добавляет, то ли опцию к push, вызывающую автоматический pull + merge + commit + push, или же rebase, не помню. (кстати, "hg rebase" таки существует.)

Остальное сказали.

Ну и да, merge сделается почти автоматически -- без конфликтов.

[identity profile] juan-gandhi.livejournal.com 2012-11-11 05:27 am (UTC)(link)
Можно и мне на пальцах?

А то я коммит-пуш только так делаю; а пулл-ребейс по настроению.

[identity profile] molnij.livejournal.com 2012-11-11 05:31 am (UTC)(link)
+1

[identity profile] gds.livejournal.com 2012-11-11 06:43 am (UTC)(link)
во, похоже на то. Буду использовать.

[identity profile] vp.livejournal.com 2012-11-11 06:59 am (UTC)(link)
Почитал комменты и ничего не понял, что делать.

[identity profile] jek-hor.livejournal.com 2012-11-11 07:32 am (UTC)(link)
Мержить самостоятельно. Как выше правильно написали, только человек может гарантировать целостность кода, даже если он в разных директориях менялся в каждом коммите.

[identity profile] x-den.livejournal.com 2012-11-11 07:43 am (UTC)(link)
если проблема в лишних движениях, то поможет hg fetch (FetchExtension), он pull/merge/commit делает автоматически, и если нет конфликтов, то вмешательства в это дело не требуется.

оопс, его уже выше успели предложить.
Edited 2012-11-11 07:44 (UTC)

[identity profile] vaddimka.livejournal.com 2012-11-11 07:44 am (UTC)(link)
там таки есть какая-то черная магия, если хочется чтобы изменения были видны в том же гиториусе не как мержи, а именно как коммиты
фактически получается что надо заребейзиться на remote HEAD, и тогда локальные изменения допишутся "в конец" (т.е. станут straight-forward, или как их там)

[identity profile] metaclass.livejournal.com 2012-11-11 07:50 am (UTC)(link)
Интересно, умеет ли rebase меркуриал. Потому что меня слом линейности и merge коммиты бесят больше, чем необходимость этот merge делать.

[identity profile] gds.livejournal.com 2012-11-11 07:57 am (UTC)(link)
умеет.
Зря merge бесят, однако.

[identity profile] metaclass.livejournal.com 2012-11-11 08:00 am (UTC)(link)
расширение hg fetch
оно при неконфликтующих коммитах автоматический мердж будет делать.

[identity profile] vit-r.livejournal.com 2012-11-11 10:18 am (UTC)(link)
Друг другу они в принципе никак не мешают

Это не факт.

[identity profile] zamotivator.livejournal.com 2012-11-11 10:22 am (UTC)(link)
Плохая идея. Изменения могут быть в разных файлах, а результатом автоматического мёржа - неработающая программа.

Правильный подход либо mercurial - держать два head, либо git - запрещать push с outdated head

[identity profile] insanegigolo.livejournal.com 2012-11-11 10:45 am (UTC)(link)
разве за неработающую программу не должна отвечать билд система, а не система контроля версий?

[identity profile] zamotivator.livejournal.com 2012-11-11 10:47 am (UTC)(link)
Система контроля версий эти вопросами не заведует.
Мне кажется разумным запрещать любую автоматику для подобных ситуаций, и требовать от пользователя осознанного решения по мёржу. Чтобы был ответственный за решение слияния, банально

[identity profile] insanegigolo.livejournal.com 2012-11-11 10:49 am (UTC)(link)
Ну как не заведует если автоматический мерж, тем плох что может сделать неработающую программу. В остальном то автоматический мерж - хорош?

[identity profile] zamotivator.livejournal.com 2012-11-11 10:52 am (UTC)(link)
Нет у него плюсов. Совсем.

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

Да и вообще, нафига вам DVCS - одна задача - один бранч. А мёржит их пусть переходящая роль branch integrator

[identity profile] levgem.livejournal.com 2012-11-11 10:55 am (UTC)(link)
Это нормально.

Изменения в коммите 1 могут быть идеологически конфликтными с изменениями в коммите 2, даже если они совершенно разные вещи затрагивают.
Поэтому перед пушем коммита 2 надо сделать проверку.

[identity profile] metaclass.livejournal.com 2012-11-11 10:56 am (UTC)(link)
От неработающей программы странные запреты в системе контроля версий, не знающей ничего ни про сборку, ни про тестирование, все равно не спасут. А вот геморроя создают изрядно.

[identity profile] zamotivator.livejournal.com 2012-11-11 10:57 am (UTC)(link)
ещё как спасут. Если есть сомнения в работоспособности - человек проверит до коммита мёржа.

И да, нормальный процесс - это когда все пушат свои бранчи на review, и перед коммитом мёржа прогоняют CI тесты на помёрженную версию.

Запрет системы контроля версий на мёрж спасает от ошибки и race condition.

[identity profile] insanegigolo.livejournal.com 2012-11-11 11:05 am (UTC)(link)
Мне оно потому что с ним иногда приходится работать.

Человек ленив всегда настолько насколько можно, получив это сообщение он просто сделает мерж руками.

[identity profile] gds.livejournal.com 2012-11-11 11:06 am (UTC)(link)
> mercurial - держать два head

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

Page 2 of 4