Ответ 3
На самом деле существует пять концепций:
- теги
- локальные теги
- закладки
- легкие ветки
- названные ветки
Легкие ветки - это то, что происходит, если вы просто используете меркурий. История вашего хранилища вилки и иногда сливается, когда вы меняете вещи и перемещаете свою историю.
Другие четыре - это способы аннотации легких ветвей и наборов изменений, которые их создают.
названные ветки и теги - это концепции, основанные на меркуриальных принципах, где имена ветвей и теги фактически записываются в репозиторий, делая больше коммитов в репозиторий. Они будут распространяться на другие репозитории способами, которые не обязательно очевидны.
локальные теги и закладки намного больше похожи на то, что git вызывает теги и ветки. Это метаданные, а не смешивание с версиями объектов. Поэтому они не представлены как часть истории хранилища. Они, как правило, являются локальными для вашего репозитория и не будут распространяться, если вы не будете их распространять намеренно.
По крайней мере, я думаю, что все они работают. Примерно через двенадцать месяцев с использованием ртутной ежедневной я не смог справиться с ее моделью. Если кто-то знает лучше меня, тогда не стесняйтесь редактировать этот ответ, чтобы он исправился.
Как я фактически использую эти вещи на практике.
Я работаю над одним общим хранилищем с примерно 20 другими людьми. Я делаю много экспериментов и легких ветвей в моем собственном репозитории, которые никогда не попадают в наш основной центральный репозиторий. Иногда, как только эксперимент сработал, я модифицирую основную строку и нажимаю набор изменений в центральный репозиторий, из которого он найдет свой путь для всех остальных машин.
Иногда я буду подталкивать некоторые ревизии к сотруднику, если они являются одним из тех, кто умеет работать с Mercurial. Но несколько человек немного боятся этого и предпочитают, если я отправлю им diffs, которые они могут применить с патчем.
Для экспериментов я ожидаю, что буду недолговечным и частным, я просто позволяю светлым ветвям, где они могут, и помнить, что происходит. Если я чувствую, что моя память скользит вокруг ветки, которая была вокруг немного, я добавляю ее в закладки.
Я использую локальные теги, чтобы отмечать ревизии. Возможно, мне захотелось вернуться к одному дню. Они облегчают поиск интересных прошлых состояний.
Я сам почти никогда не делаю нелокальные теги или названные ветки (кроме случайно, и я их уничтожаю, если я это делаю). Но наши люди выпускают. Наши выпущенные основные версии имеют свои собственные ветки с названиями, а второстепенные версии - теги на этих ветвях. Это гарантирует, что эти важные ветки и теги выглядят одинаково для всех.
Опять же, я понятия не имею, так ли это, как предполагается, использовать mercurial, но, похоже, это модель, которая хорошо работает для нашего размера команды.
Если три или четыре из нас хотели сотрудничать в эксперименте, это, вероятно, стоило бы названной ветки, которую мы, вероятно, разделили бы между собой, но не надавили на центральное репо. Я не знаю, как хорошо это сработает!
Ответ 4
Самое большое различие заключается в том, что закладка автоматически перемещается вперед, когда вы совершаете фиксацию. Вот пример:
hg init
..edit a file..
hg commit -m 'my commit' # creates revision 0
hg tag -r 0 mytag # creates revision 1
hg bookmark -r 0 mybookmark # doesn't create a revision
hg update 0 # get back to r0
..edit a file..
hg commit -m 'another commit' # creates revision 2
В этот момент mytag все еще указывает на ревизию 0, а mybookmark теперь указывает на ревизию 2. Также теги создавали набор изменений, а закладка не выполнялась.
Кроме того, конечно, закладка создала revisio