watashiwa_darede... писал(а): ↑26.09.2011 12:03
А опыт подсказывает мне, что merge надо делать насколько возможно раньше
почему? пусть будет, не вижу причин сразу всё мержить, что только можно...
>Так что, ключевой вопрос: зачем откладывать merge и накапливать [возможно] несовместимые изменения, которые потом надо будет мержить?
потому-что изменения будут в большинстве своём совместимые, ибо разные кодеры работают над разными частями проекта. нестыковки конечно возможны, но согласитесь - довольно редки. Нестыковки могут возникнуть лишь если один из кодеров поменяет под себя какую-то абстракцию низкого(или наоборот - высокого) уровня, да ещё и так, что эта абстракция ВНЕЗАПНО станет несовместимой с другим кодом. Но это порушит не только наш новый код, но и множество старого кода. Если наш новый код совместим со старым, и код другого кодера - тоже, то в большинстве случаев наши модули будут совместимы друг с другом, ну и слияние соответственно будет нужно лишь при подготовке релиза, когда все наши модули станут работать в продакшене.
watashiwa_darede... писал(а): ↑26.09.2011 12:03
я сделаю сначала pull, а потом посмотрю, что-же это за новые ревизии, и стоит-ли делать мне merge
А, post-code-review уже после того, как код в центральном репозитории… И что Вы сделаете, если не сто́ит? Будете создавать змеев горынычей в общем репозитории?
это не "post", а "pre" - змей горыныч посл pull будет в моём локальном репозитории, и в большинстве случаев, вторая чужая голова мне не будет мешать, а просто будет висеть в ознакомительных целях, что-бы я писал код, который когда-нибудь без проблем автоматически сольётся с чужим.
watashiwa_darede... писал(а): ↑26.09.2011 12:03
Так вот, в приведенной статье как раз описана автоматизация update. При публикации в «рабочий репозиторий» запускаются хуки, которые обновляют и перезапускают всё, что нужно.
как-то там всё слишком запутанно... если честно - мало что понял.
>В хранении репозитория объектов. У меня, например, есть репозитории, которые я использую для обмена между своими репозиториями на разных машинах, в этих репозиториях я никогда непосредственно не работаю, поэтому рабочий каталог мне в них не нужен.
в hg такое можно и не делать - оно получается само по себе.
ни pull, ни push не затрагивают содержимое рабочего каталога, но тем не менее позволяют как вытягивать, так и заталкивать изменения. А в каталоге можно всё удалить.
в принципе в этом есть смысл, особенно если у разработчиков инет есть от случая к случаю, а на bare инет есть 24/7/365.
это Linux позволяет - удалите все файлы кроме ./.hg, и поставьте на каталог права 0555 - команда update не сможет выполниться, т.к. в таком каталоге нельзя создавать файлы.
может и по другому можно. в принципе, можно попросту запретить доступ на этот сервер иначе, кроме как через mercurial..
watashiwa_darede... писал(а): ↑26.09.2011 12:24
Да, но почему вариант второго кодера захламляет мою ветку лишними головами? Почему при pull'е варианта второго кодера перемещается tip моей ветки, хотя я еще даже не решил, буду ли его мержить и как? Почему третий разработчик при взгляде на эту ветку впадает в ступор, не зная какую голову этого змея горыныча нужно сейчас рубить?
В git'е мне, по крайней мере, всё понятно: коммиты второго кодера имеются и помечены отдельной меткой, так что понятно, как до них добраться в случае нужды. Моя ветка, HEAD и рабочий каталог остаются нетронутыми, пока я сам их не трону. Третий разработчик, который смотрит на мою ветку, видит ее голову (одну и только одну), и у третьего разработчика не возникает сомнений, в каком положении находится разработка и откуда можно и нужно ветвить свои изменения.
тогда вам необходимо использовать именованные ветки. А если вы вдвоём пилите одну и ту-же ветку - то что тут странного?
К тому-же, если вы выполняете только pull в процессе работы, то ваши ревизии никто кроме вас не видит, и когда вы закончите, вы можете сделать наконец pull+merge, и слить свою ветку с маинстримом. Причём сольёте вы её _локально_, чего никто тоже не увидит. И если всё хорошо, вы можете смело запушить свою работу. В принципе, pull вы можете сделать и раньше, и не один раз, это никак не повлияет на маинстрим. В маинстриме появятся ваши изменения только после push'а.
ну не такая уж и временная.
>и даже при этом, имя ссылается на один и только один файл. Тут же получается две абсолютно неразличимые (для треьего разработчика) головы у одной ветки.
почему "неразличимые"? они от разных авторов. И опять повторю - если вы сливаете ветки локально, то для третьего разработчика будет одна ветка, которая _когда-то_ разделилась, а _потом_ опять соединилась. Если вы, или второй разработчик сможете решить свои разногласия (причём решать их вовсе не обязательно в главном репозитории, вполне можно в вашем, или в репозитории второго кодера, а третий этого и не увидит, он увидит, что конфликт был, но успешно разрешился).
>При том, что удалять ревизии в hg нельзя, и клеймо раба метка ветки пожизненная, вообще непонятно, что с этой ситуацией делать, если я, например, не хочу мержить.
ну вот метку ветки можно и сменить. И ветку можно закрыть, чтоб не маячила в списке веток. Ну будет у вас тупик, ну и что?
sash-kan писал(а): ↑26.09.2011 13:04
вот здесь сказано иное:
QUOTE
If there are multiple heads in a repository, only one of them is the tip.
внесу ясность: действительно, tag tip только один. Это такая голова, которая заканчивает текущую ветку. Однако, если вы переключитесь не другую ветку, tip станет другим.
Т.о. вы можете вытянуть (hg pull) ревизии с другого репозитория, и tip у вас будет стоять на другой ветке, однако, если вы закоммитете изменения, то tip перескочит на вашу ветку. Текущее состояние рабочего каталога (точнее, то, которое было на последнем _вашем_ коммите) обозначено символом @, а вот tip на самом деле может и не совпадать с @.
И при коммите изменения отсчитываются вовсе не от tip'а, а от @, которая может лежать на другой ветке. Короче - у каждой ветки свой tip. Причём hg update tip обнавляет до последнего tip'а который и показывается, а вот hg update обновляет до того tip'а, который может не совпадать с тегом tip, если тег tip не на текущей ветке.
Все эти сложности возникают только с именованными ветками.
sash-kan писал(а): ↑26.09.2011 13:04
1. в каждом репозитории может быть несколько branch·
2. в каждом branch можте быть несколько head·
3. только один из head может быть tip-ом·
4. так сколько же в репозитории может быть tip? один? или их количество равно количеству branch?
1. да
2. да
3. да. С оговоркой: один из тех, кто на этой ветке.
4. tip'ов ровно столько, сколько именованных веток. Однако тег tip присвоен только последнему из tip'ов. Он может не совпадать с tip'ом текущей ветки (который обозначен собакой @ )