Вы можете переключать N классов одновременно
$(/* selector */).toggleClass('classA classB classC');
. Самая большая разница в том, как имена веток записываются в историю. С именованными ветвями имя ветки встроено в каждый набор изменений и, таким образом, станет неизменной частью истории. В случае клонов не будет постоянной записи о том, откуда пришел конкретный набор изменений.
Это означает, что клоны отлично подходят для быстрых экспериментов, когда вы не хотите записывать имя ветки, а именованные ветки подходит для долгосрочных ветвей («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 был разработан с использованием двух клонов в течение многих лет, прежде чем мы перешли на использование именованных ветвей. Мы поддерживаем ветку под названием «стабильная» в дополнение к «стандартной» ветке и делаем наши выпуски на основе «стабильной» ветки. См. стандартную страницу ветвления в вики для описания рекомендуемого рабочего процесса.
Основное различие, поскольку Насколько я знаю, вы уже сказали, что named разветвленные находятся в одном репозитории. Именованные ветки имеют все под рукой в одном месте. Отдельные репозитории меньше по размеру, и их легко перемещать. Причина, по которой на этот счет существуют две точки зрения, заключается в том, что явного победителя нет. Аргументы той стороны, которые вам кажутся наиболее разумными, вероятно, именно те, на которые вы должны пойти,
Я думаю, вам нужна вся история в одном репо. Создание краткосрочного репо предназначено для краткосрочных экспериментов, а не для крупных событий, таких как релизы.
Одно из разочарований Mercurial заключается в том, что, похоже, нет простого способа создать краткосрочную ветку, поиграйте с ней, откажитесь от этого и соберите мусор. Филиалы навсегда. Я сочувствую тому, чтобы никогда не отказываться от истории, но сверхдешевые одноразовые ветки - это функция git
, которую я бы очень хотел увидеть в hg
.
Я думаю, что это явно прагматическое решение, зависящее от текущей ситуации, например, размера функции / изменения дизайна. Я думаю, что форки действительно хороши для участников с ролями, которые еще не коммитируют, чтобы присоединиться к команде разработчиков, доказав свои способности с незначительными техническими накладными расходами.