Какая разница между hg-тегом и закладкой hg?

Какая разница между tag и bookmark в Mercurial? Кажется, я не знаю, как они отличаются друг от друга.

Ответ 1

Давайте рассмотрим ваш репозиторий как "выбрать ваши собственные книги приключений" с разными точками зрения.

  • Тег похож на штамп, который редактор наложил на вашу рукопись, чтобы сказать "хорошо, мы сохраняем след вашей текущей работы, в случае, если это происходит".
  • A named branch будет главой. Вы должны выбрать в какой-то момент, какую главу вам нужно написать, и они там, чтобы остаться. Некоторые сольются, некоторые кончатся (извините, вы умерли.)
  • Значок - это, ну, закладка. Это следует за вами, пока вы читаете (совершают) книгу. Это помогает вам отслеживать "то, что вы читали в то время", поэтому вы можете удалить их, переместить их в другую "главу". Когда вы делитесь книгой (push), вы обычно не делитесь своими закладками, если вы явно не хотите. Поэтому вы обычно используете их в анонимных ветвях, потому что их жизненный цикл короче названных ветвей.

Ответ 2

Закладки используются, когда вы хотите, чтобы мнемоника (foo_feature) указывала на изменяющийся идентификатор фиксации по мере продвижения вашей работы. Они более легкие, чем обычные ветки Mercurial, и несколько похожи на ветки git.

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

Ответ 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