metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-08-06 01:10 pm

Меркуриал

В сабжевой DVCS все хорошо, но есть один слабо понятный мне момент. А именно, merge. Если ребе [livejournal.com profile] belnetmon сделает push в центральный репозиторий и я после этого хочу сделать тоже push, то даже если у нас никак не пересекающиеся изменения - оно этого сделать не даст, нужно сначала сделать hg pull, потом hg merge, потом hg commit и только после этого получится сделать hg push.
Может, я чего не так делаю?

[identity profile] berezovsky.livejournal.com 2010-08-06 01:13 pm (UTC)(link)
переходите на Microsoft Visual SourceSafe

[identity profile] kong-en-ge.livejournal.com 2010-08-06 02:14 pm (UTC)(link)
за что вы так ненавидите этих двух трудоголиков?! :)
(deleted comment)

[identity profile] aamonster.livejournal.com 2010-08-06 05:18 pm (UTC)(link)
Но ведь ещё пахнет, пахнет! Сегодня чекинил код.
(deleted comment)

[identity profile] aamonster.livejournal.com 2010-08-06 05:50 pm (UTC)(link)
На самом деле SS приводит меня в восхищение. С такой убойной архитектурой, с доступом на запись для всех клиентов - и годами работает!
Работа svn (через апач или svnserve) или тем более mercurial - естественна. Работа SS - чудо. Да, он древнее, чем говно мамонта, и так же устарел - но сделан на совесть.

[identity profile] aamonster.livejournal.com 2010-08-06 01:22 pm (UTC)(link)
hg push -f, и пусть мержит кто-то другой =).

[identity profile] metaclass.livejournal.com 2010-08-06 01:23 pm (UTC)(link)
Две heads в головной репе тогда появлятся?

[identity profile] aamonster.livejournal.com 2010-08-06 01:27 pm (UTC)(link)
Ага, ниже написал, как без этого.

[identity profile] zamotivator.livejournal.com 2010-08-06 06:12 pm (UTC)(link)
Нет, он такое запрещает (ругнётся ошибкой)

[identity profile] gds.livejournal.com 2010-08-06 07:21 pm (UTC)(link)
"-f" как раз для того, чтобы сказать "ребяты, вот вам ещё одна голова, и делайте с ней что хотите". ругаться будет, но ненавязчиво.

[identity profile] aamonster.livejournal.com 2010-08-06 01:27 pm (UTC)(link)
А так - смержить-то можно только локально (иначе кто проконтролирует корректность?), так что без pull не обойтись.

Варианты:
hg fetch - разом сделает pull-merge-push (если не возникнет конфликтов)
hg pull --rebase - сделает pull и воткнёт твои изменения после него (получится примерно как при работе с SVN - линейная история)

[identity profile] metaclass.livejournal.com 2010-08-06 01:28 pm (UTC)(link)
fetch это случаем не расширение какое нибудь?

[identity profile] graynm.livejournal.com 2010-08-06 01:37 pm (UTC)(link)
Вообще говоря - расширение, но оно сейчас идёт в базовом комплекте.

[identity profile] aamonster.livejournal.com 2010-08-06 05:27 pm (UTC)(link)
У hg есть такой изврат - встроенные расширения. Они в основном коде, но для использования их надо разрешать в конфиге.
Для винды - в Mercurial.rc, секция extensions, раскомментить/вписать строки
fetch =
graphlog =
mq =
rebase =
ну и прочие по вкусу

[personal profile] alll 2010-08-06 02:38 pm (UTC)(link)
А в случае конфликта двух коммитов что с этим --rebase произойдёт?

[identity profile] antilamer.livejournal.com 2010-08-06 03:19 pm (UTC)(link)
Пожалуется и попросит зарезолвить вручную.

[identity profile] aamonster.livejournal.com 2010-08-06 05:17 pm (UTC)(link)
Честно говоря, не пробовал, работаю по старинке - pull-merge-push (благо, merge на порядок удобнее, чем в subversion). Принцип: создавать новые ветки могут все, а вливать их в основную должен кто-то один. Хотя, конечно, для текущей работы это overkill.

Но навскидку - должно или создать файл для разрешения конфликтов, или запустить утилиту для их разрешения, прописанную в конфиге (kdiff3, к примеру).

[identity profile] theiced.livejournal.com 2010-08-06 01:23 pm (UTC)(link)
есть такая чтука как автомерж. а автоматом эти дейстивя проделает.

[identity profile] vp.livejournal.com 2010-08-06 01:34 pm (UTC)(link)
но согласись, что это какие-то издержки меркуриала? Логики ведь за этим никакой нет.

[identity profile] theiced.livejournal.com 2010-08-06 01:38 pm (UTC)(link)
есть. все коммиты в одной ветке идут последовательно. (авто)мерж-коммит позволит глянуть чо и как смержилось в случае факапа.

[identity profile] blacklion.livejournal.com 2010-08-06 01:43 pm (UTC)(link)
Есть за этим логика. У git та же фигня и у любой changset-based VCS тоже самое. Это издержки того, что мы храним именно изменения группированные, а не состояния (снепшоты).
И, да, это как раз сильно упрощает merge, хотя и делает его обязательным.

[identity profile] morozov.livejournal.com 2010-08-06 02:51 pm (UTC)(link)
По идее это правильное поведение, хотя и неудобно-раздражающее. Даже если вы с коллегой не правили одни и те же файлы, нет гарантии того, что его правки не поломали ваш код и наоборот. Поэтому вас и заставляют сначала слить свои правки с его, протестировать, а уже потом пушить изменения в более основной репозиторий.

[identity profile] blacklion.livejournal.com 2010-08-06 01:31 pm (UTC)(link)
Всё так делаешь. Это издержки changset-based VCS (в противовес snapshot-based, таких как CVS и subverson).
(deleted comment)

[identity profile] theiced.livejournal.com 2010-08-06 03:10 pm (UTC)(link)
каменный век уже пару лет как кончился.
(deleted comment)

[identity profile] zamotivator.livejournal.com 2010-08-06 06:13 pm (UTC)(link)
Эти две VSC умерли, и давно.
(deleted comment)

[identity profile] zamotivator.livejournal.com 2010-08-06 06:34 pm (UTC)(link)
TFS вообще мертворождённая.
Этим пиздецом пользоваться просто невозможно.
(deleted comment)

[identity profile] theiced.livejournal.com 2010-08-06 09:12 pm (UTC)(link)
subversion тоже умер. ага.

[identity profile] dmzlj.livejournal.com 2010-08-07 04:55 am (UTC)(link)
эти три VSC

[identity profile] blacklion.livejournal.com 2010-08-06 03:36 pm (UTC)(link)
После этих и СVS полюбишь...

[identity profile] zamotivator.livejournal.com 2010-08-06 06:13 pm (UTC)(link)
Эти две действительно ад.
Но subversion тоже не торт.

[identity profile] max630.livejournal.com 2010-08-06 10:08 pm (UTC)(link)
скажем так, это просто нечто другое чем git/hg, со своими минусами, против их минусов, тоже не маленьких

[identity profile] dmitry-vk.livejournal.com 2010-08-06 03:43 pm (UTC)(link)
Хм, а мне казалось, что основная фича Git'а и Hg в том, что они как раз хранят снэпшоты, а не изменения.

[identity profile] blacklion.livejournal.com 2010-08-06 03:50 pm (UTC)(link)
Они хранят последовательность изменений (changesets).

[identity profile] max630.livejournal.com 2010-08-06 10:04 pm (UTC)(link)
а в svn разве не надо делать update перед commit? вот тут то же самое

(disclaimer: дальше про git, возможно в hg что-то не так)

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

Следующий шаг - вообще выкинуть центральный репозиторий и расшарить свои рабочие.

Где-то было эпическое видео Линуса, где в свойственной ему манере (What do you use here? Perforce? I'm ... I'm sorry) он подробно рассказывает, как они работают с git.

[identity profile] dmzlj.livejournal.com 2010-08-07 04:52 am (UTC)(link)
вы случайно не бранч хотите там сделать?