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] 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, к примеру).