![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Одной вещи в меркуриале я в принципе понять не могу.
Я меняю файл А, делаю commit и push, потом я меняю дома файл Б и делаю commit, а на попытку push меня посылаютфпень делать pull/merge/commit.
Вопрос - почему бы независимые изменения в разных папках не мержить автоматом, как это сделано в svn?
PS: А теперь рассмотрим, как это положено делать:
1) дерево исходников представляет собой граф, узлы которого - каталоги и блобы с файлами, а связи - связь между каталогом и расположенными в нем подкаталогами и файлами.
2) пользователь 1 меняет файл с путем A
3) пользователь 2 меняет другой файл с путем B.
4) Друг другу они в принципе никак не мешают - структура графа не меняется, меняются два независимых узла.
5) операции коммутируют - т.е. вне зависимости от порядка применения операций, результат будет одним и тем же.
6) для коммутирующих операций merge должен делаться, очевидно, автоматически.
Я меняю файл А, делаю commit и push, потом я меняю дома файл Б и делаю commit, а на попытку push меня посылают
Вопрос - почему бы независимые изменения в разных папках не мержить автоматом, как это сделано в svn?
PS: А теперь рассмотрим, как это положено делать:
1) дерево исходников представляет собой граф, узлы которого - каталоги и блобы с файлами, а связи - связь между каталогом и расположенными в нем подкаталогами и файлами.
2) пользователь 1 меняет файл с путем A
3) пользователь 2 меняет другой файл с путем B.
4) Друг другу они в принципе никак не мешают - структура графа не меняется, меняются два независимых узла.
5) операции коммутируют - т.е. вне зависимости от порядка применения операций, результат будет одним и тем же.
6) для коммутирующих операций merge должен делаться, очевидно, автоматически.
no subject
Date: 2012-11-10 06:57 pm (UTC)no subject
Date: 2012-11-10 07:10 pm (UTC)(no subject)
From:no subject
Date: 2012-11-10 07:04 pm (UTC)no subject
Date: 2012-11-10 07:11 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-11 05:27 am (UTC)А то я коммит-пуш только так делаю; а пулл-ребейс по настроению.
no subject
Date: 2012-11-10 08:21 pm (UTC)Ты упускаешь важную часть графа. Про mercurial не скажу, в git оно выглядит так: есть четыре вида объектов: blob, tree, commit, tag. Все объекты адресуются по содержимому -- хэш от содержимого.
Что содежит blob понятно. tree -- список ссылок на blob'ы и другие деревья. Таким образом строится иерархия. commit -- ссылка на корневое дерево проекта, commit message + нуль или более ссылок на parent commit (больше 1 для merge commit). tag -- ссылка любой объект, чаще всего commit.
Из вышесказанного очевидно, что изменение одного blob'а повлечёт к изменению всех объектов выше по стеку: blob -> tree -> commit -> tag.
Т.е. операции не коммутирующие. И это сделано намеряно. Для distributed scm критически важно лёгкое отслеживание целостности, дабы избежать code injection и прочие проблемы с безопастностью.
no subject
Date: 2012-11-10 08:35 pm (UTC)4/5 - ломает, ломает порядок коммитов: будет ломать ребейс. Будет появляться лишний merge сщььше на C которого нет ни на A ни на B
(no subject)
From:no subject
Date: 2012-11-10 08:39 pm (UTC)Смержит он сам, достаточно pull+push.
no subject
Date: 2012-11-11 05:31 am (UTC)no subject
Date: 2012-11-10 09:27 pm (UTC)Обычно это делается так: пользователь A заводит merge request, потом пользователь B делает review изменений и заставляет A исправить ошибки. Потом специальный человек, когда у него дойдут руки (примерно раз в несколько дней), собирает эти реквесты и мержит (или ребейзит) их в мастер, при необходимости дёргая A чтобы он поправил конфликт.
А вы, ну я не знаю, смиритесь наверное. Или наколхозьте автомержилку на сервере.
no subject
Date: 2012-11-10 09:46 pm (UTC)no subject
Date: 2012-11-13 05:40 pm (UTC)Свнщики, мать их так…
(no subject)
From:no subject
Date: 2012-11-11 02:34 am (UTC)Пришёл домой, сделал пул, вспомнил, что во второй папке написал херню, поправил и запушил всё сразу.
Я так понимаю.
no subject
Date: 2012-11-11 02:43 am (UTC)не обязательно. hg push -f не посылает. Очень полезно в случаях, когда мержить должен не тот, кто пушит.
Кроме того, вроде где-то видел хрень (то ли настройка, то ли расширение), которое то ли команду добавляет, то ли опцию к push, вызывающую автоматический pull + merge + commit + push, или же rebase, не помню. (кстати, "hg rebase" таки существует.)
Остальное сказали.
Ну и да, merge сделается почти автоматически -- без конфликтов.
no subject
Date: 2012-11-11 06:37 am (UTC)(no subject)
From:no subject
Date: 2012-11-11 06:59 am (UTC)no subject
Date: 2012-11-11 07:32 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-11 08:00 am (UTC)оно при неконфликтующих коммитах автоматический мердж будет делать.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-11 07:43 am (UTC)оопс, его уже выше успели предложить.
no subject
Date: 2012-11-11 10:18 am (UTC)Это не факт.
no subject
Date: 2012-11-11 10:22 am (UTC)Правильный подход либо mercurial - держать два head, либо git - запрещать push с outdated head
no subject
Date: 2012-11-11 10:45 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-11 10:55 am (UTC)Изменения в коммите 1 могут быть идеологически конфликтными с изменениями в коммите 2, даже если они совершенно разные вещи затрагивают.
Поэтому перед пушем коммита 2 надо сделать проверку.
no subject
Date: 2012-11-11 04:43 pm (UTC)no subject
Date: 2012-11-11 04:48 pm (UTC)pull - update - commit - push. с любого рабочего места. всё. какие еще файлы? какая коммутация-мастурбация? вы чего тут?
no subject
Date: 2012-11-11 05:05 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-11-11 05:40 pm (UTC)no subject
Date: 2012-11-11 06:49 pm (UTC)