Названные ответвления по сравнению с несколькими репозиториями

Вы можете переключать N классов одновременно

$(/* selector */).toggleClass('classA classB classC');
.
130
задан Micha Wiedenmann 7 February 2019 в 09:54
поделиться

4 ответа

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

Это означает, что клоны отлично подходят для быстрых экспериментов, когда вы не хотите записывать имя ветки, а именованные ветки подходит для долгосрочных ветвей («1.x», «2.x» и подобных).

Обратите внимание, что в одном репозитории можно легко разместить несколько легких ветвей в Mercurial. Такие ветки в репозитории можно добавить в закладки, чтобы вы могли легко найти их снова. Допустим, вы клонировали репозиторий компании, когда он выглядел так:

[a] --- [b]

Вы взламываете и делаете [x] и [y] :

[a] --- [b] --- [x] --- [y]

Среднее, пока кто-то ставит [c] и [d ] в репозиторий, поэтому, когда вы вытаскиваете, вы получаете такой график истории:

            [x] --- [y]
           /
[a] --- [b] --- [c] --- [d]

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

% hg parents

Допустим, он сообщает [y] . Вы можете увидеть головы с

% hg heads

, и это будет сообщать [y] и [d] . Если вы хотите обновить свой репозиторий до чистой проверки [d] , просто выполните (замените [d] номером версии на [d] ):

% hg update --clean [d]

Затем вы увидите, что hg родители сообщают о [d] . Это означает, что ваша следующая фиксация будет иметь родительский объект [d] . Таким образом, вы можете исправить обнаруженную вами ошибку в основной ветке и создать набор изменений [e] :

            [x] --- [y]
           /
[a] --- [b] --- [c] --- [d] --- [e]

Чтобы отправить только набор изменений [e] , вам нужно сделать

% hg push -r [e]

] где [e] - хеш набора изменений. По умолчанию hg push просто сравнит репозитории и увидит, что [x] , [y] и [e] отсутствуют , но вы, возможно, пока не захотите делиться [x] и [y] .

Если исправление также влияет на вас, вы хотите объединить его со своей веткой функций:

% hg update [y]
% hg merge

В результате граф вашего репозитория будет выглядеть следующим образом:

            [x] --- [y] ----------- [z]
           /                       /
[a] --- [b] --- [c] --- [d] --- [e]

, где [z] - это слияние между [y] и [e] . Вы также могли бы выбросить ветку:

% hg strip [x]

Моя основная мысль этой истории такова: один клон может легко представлять несколько путей развития. Это всегда было верно для "plain hg" без использования каких-либо расширений. Тем не менее, расширение закладок очень помогает. Это позволит вам назначать имена (закладки) для наборов изменений. В приведенном выше случае вам понадобится закладка на голове разработчика и одна на исходной. Закладки можно нажимать и извлекать с помощью Mercurial 1.6, и они стали встроенной функцией в Mercurial 1.8.

Если бы вы выбрали создание двух клонов, ваш разрабатываемый клон выглядел бы так после создания [x] и [y] :

[a] --- [b] --- [x] --- [y]

И ваш восходящий клон будет содержать:

[a] --- [b] --- [c] --- [d]

Теперь вы заметили ошибку и исправили ее. Здесь вам не нужно hg update , поскольку исходный клон готов к использованию. Вы фиксируете и создаете [e] :

[a] --- [b] --- [c] --- [d] --- [e]

Чтобы включить исправление ошибки в свой клон разработки, вы вставляете его туда:

[a] --- [b] --- [x] --- [y]
           \
            [c] --- [d] --- [e]

и объединяете:

[a] --- [b] --- [x] --- [y] --- [z]
           \                   /
            [c] --- [d] --- [e]

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

Именованные ветви на самом деле не фигурировали здесь, потому что они совершенно необязательны. Сам Mercurial был разработан с использованием двух клонов в течение многих лет, прежде чем мы перешли на использование именованных ветвей. Мы поддерживаем ветку под названием «стабильная» в дополнение к «стандартной» ветке и делаем наши выпуски на основе «стабильной» ветки. См. стандартную страницу ветвления в вики для описания рекомендуемого рабочего процесса.

129
ответ дан 24 November 2019 в 00:25
поделиться

Основное различие, поскольку Насколько я знаю, вы уже сказали, что named разветвленные находятся в одном репозитории. Именованные ветки имеют все под рукой в ​​одном месте. Отдельные репозитории меньше по размеру, и их легко перемещать. Причина, по которой на этот счет существуют две точки зрения, заключается в том, что явного победителя нет. Аргументы той стороны, которые вам кажутся наиболее разумными, вероятно, именно те, на которые вы должны пойти,

5
ответ дан 24 November 2019 в 00:25
поделиться

Я думаю, вам нужна вся история в одном репо. Создание краткосрочного репо предназначено для краткосрочных экспериментов, а не для крупных событий, таких как релизы.

Одно из разочарований Mercurial заключается в том, что, похоже, нет простого способа создать краткосрочную ветку, поиграйте с ней, откажитесь от этого и соберите мусор. Филиалы навсегда. Я сочувствую тому, чтобы никогда не отказываться от истории, но сверхдешевые одноразовые ветки - это функция git , которую я бы очень хотел увидеть в hg .

29
ответ дан 24 November 2019 в 00:25
поделиться

Я думаю, что это явно прагматическое решение, зависящее от текущей ситуации, например, размера функции / изменения дизайна. Я думаю, что форки действительно хороши для участников с ролями, которые еще не коммитируют, чтобы присоединиться к команде разработчиков, доказав свои способности с незначительными техническими накладными расходами.

2
ответ дан 24 November 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: