Страдают ли крупные ртутные хранилища от «гонок толчка»?

9

Прочитав несколько «Почему DVCS лучше», вы получите ответы на несколько вопросов о программистах. Все они, похоже, говорят, что в целом DVCS лучше, так как у вас нет гонки коммитов в больших проектах, IE коммит, устарел, так обновить, зафиксировать, снова устареть, зафиксировать, все еще устареть и т.д.

DVCS ограничивают это концепцией толчка. Однако в очень крупных проектах не будет «гонка толчка», особенно в конце дня? Я знаю, что в Git это несколько исправлено постоянным ветвлением для всего, но в Mercurial вы не ветвитесь, вы создаете новую голову.

Я вижу проблему

  1. Пользователь пытается нажать
  2. Устаревший (Mercurial не позволит вам выдвинуть, если ваш локальный репо устарел), поэтому вы извлекаете и объединяете локальные изменения
  3. Пользователь пытается нажать еще раз, но когда он сливался, кто-то другой нажал, поэтому он снова устарел
  4. Потяните и снова объедините
  5. Все еще устарел
  6. Повторение

Звучит знакомо?

Это реальная проблема с очень большими и популярными ртутными репозиториями? Как насчет внутри компании, когда каждый делает свой последний толчок дня?

TheLQ
источник
кто не разветвляется в Mercurial? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Карсон Майерс
@Carson В Git ветки дешевы. В ртути они гораздо более постоянны. Обычно я слышал, что в git вы переходите к функции, в mercurial вы создаете новую голову или клонируете в другой каталог.
TheLQ
хорошо, вы можете добавить --close-branchпри фиксации - и у mercurial есть названные ветки, вам не нужно клонировать новый каталог
Carson Myers
@Carson Я не говорю, что вы не можете или что это невозможно, я просто говорю, что я всегда слышал, что условием было клонировать или создать новую голову, а не ветвь. У большинства ртутных репозиториев, которые я видел, есть только несколько веток, в то время как у git репо обычно много
TheLQ
Я не уверен, я никогда не использовал мерзавца
Карсон Майерс

Ответы:

8

Насколько мне известно, большинство крупных проектов с открытым исходным кодом, использующих DVCS, используют «выталкивающие запросы» вместо «толкающих», то есть пользователь запрашивает, чтобы проект извлекал данные из своей ветви, и проект может выполнить эти пул-запросы в любом порядке. , если вообще. Это устраняет необходимость в «гонке толчка», как вы ее назвали.

В других компаниях я не могу поручиться за процесс, но там, где я работаю, это не проблема.

Видите ли, когда вы работаете над делом, вы работаете над веткой всего репо, поэтому ваши push-запросы отправляются в удаленную версию основной ствола. Когда вы хотите интегрировать свое (законченное) изменение в ствол, вы загружаете ствол, тянете, объединяете, толкаете.

Время от времени ( очень редко) два человека пытаются сделать это одновременно (обычно из-за некоторого недопонимания). В этом случае тот, кто «проигрывает», просто должен будет снова потянуть, объединить, подтолкнуть. Поскольку в 17:00 нет спешки для фиксации в центральном репозитории, описанная вами проблема на самом деле отсутствует.

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

РЕДАКТИРОВАТЬ

О, я только что заметил ваш комментарий "В Mercurial вы не разветвляетесь ...": Да, вы делаете. Вы не должны этого делать, но так как это легко сделать, а выгоды от этого перевешивают, если не делать этого очень сильно, вы, как правило, часто просто разветвляете репо.

Эд Джеймс
источник
Я всегда слышал, что вы работаете над экспериментальными функциями, а не над веткой. Большинство причин, которые я слышал, заключается в том, что в ртутных ветвях они гораздо более постоянны, чем в Git. Однако я могу ошибаться
TheLQ
В том, что касается mercurial, клон - это ветвь, вы все равно можете делать практически все, что можете, со стандартной «головой» (и еще некоторыми вещами!), Но у вас есть дополнительная роскошь тяги / толкать уровень расстояния от багажника. Я не уверен, что вы имеете в виду о постоянстве, когда вы закончите со своим клоном, вы можете просто удалить его.
Эд Джеймс
Как получилось, что нет 5 вечера толчка?
Джем Катиккас
Как я уже сказал, большую часть времени все работают над своей собственной веткой (очень маловероятно, что вы работаете над той же проблемой, что и другой человек), поэтому, в конце концов, все работают в разных ветках. Кроме того, на моей работе у нас гибкое время, так что это скорее пик с 16:00 до 18:00;)
Эд Джеймс
1

Нет, нет гонок на пуш, потому что работа ведется в тематических ветках . Мастер слияния управляет (относительно меньшей) сложностью объединения ветвей в интеграционную ветвь . Обычно это делается непрерывно. Для получения дополнительной информации о распределенных рабочих процессах управления версиями, то первый источник будет рот лошади: man gitworkflows, онлайн здесь . Mercurial рабочие процессы делают использование ветвление , несмотря на ваши требования и методы аналогичны.

Рейн Хенрикс
источник
ОП здесь делает различие между git и hg, но ваш ответ нацелен на git (например, первая ссылка очень ориентирована на git). Это правильный ответ (так как первоначальная неправильная интерпретация OP ветвления в hg приводит к самому вопросу), но стоит отметить, что для hg то же самое.
Эд Джеймс
@Ed Хороший вопрос, обновлен, чтобы уточнить, что ответ относится как к git, так и к mercurial.
Рейн Хенрикс
посмотрите репозиторий git.git, это хороший пример объединения с использованием DVCS. Есть много точек слияния. Может быть более 10 временных веток одновременно, прежде чем окончательно слиться с основной веткой.
Linquize