Я не использую Mercurial, но я бы хотел начать, поэтому я читаю об этом. Единственной системой SCM, которую я широко использовал, является CVS. Большая часть того, что я читал о Mercurial, имеет смысл и звучит хорошо. Но я чересчур шокирован и озадачен тем, что это теги.Как я могу узнать обо всех тегах в Mercurial?
Тег - это просто прозвище для набора изменений (и «changeet» мы действительно имеем в виду состояние, вызванное набором изменений). Круто. Отображение от тегов к идентификаторам наборов изменений хранится в файле .hgtags
. Также круто. Файл .hgtags
имеет версию.
Что?
У этого есть много контринтуитивных последствий. Например, если я совершу набор изменений, который я хочу пометить (скажем, код, который будет формировать выпуск 1.0), я должен снова зафиксировать после тегов, чтобы поместить обновленный файл тега в репозиторий. И если я потом обновляю этот тегированный набор изменений позже, рабочая копия не будет содержать никаких знаний об этом теге. Если я выполняю некоторую работу, создав новую ветку (скажем, для исправлений, заголовок в направлении 1.1), эта ветка не будет знать тег, из которого она выросла. Если я не скопирую его вручную, то есть.
И поскольку разработка продолжается как на исходном багажнике, так и на моей новой ветке с созданием тегов для маркировки важных наборов изменений (выпуск 2.0 на багажнике, выпуски исправлений 1.1 и 1.2 на ветке), обе ветки будут продолжены незнание тегов другой ветви. Итак, если я закончу работу над одной ветвью и хочу переключиться на какой-то конкретный набор изменений на другой (скажем, я заканчиваю выпуск 1.2 bugfix, но теперь вам нужно начать с исправления 2.1, основанного на 2.0), теперь я набит. Мой текущий набор изменений не знает о 2.0!
Что я могу сделать?
- Я могу спросить кого-то, кто работает с веткой 2.x, чтобы прочитать фактический идентификатор набора изменений для 2.0 и использовать это явно, но это ужасно.
- Я могу назвать свои ветви, а также использовать теги, чтобы я мог перепрыгнуть через голову ветки 2.x, узнав о новых тегах, а затем перейдем к тегу 2.0. Предполагая, что ветви, в отличие от тегов, повсеместно видны - это так? Даже если это так, это кажется неуклюжим.
- Я мог бы сохранить один глобальный файл
hgtags
за пределами репозитория и использовать пару крючков, чтобы вытащить копию на обновление, перезаписать локальную копию и скопировать любые изменения в фиксации. Я не уверен, как это будет работать в многопользовательской среде, где разработчики нажимают изменения в общий репозиторий; Мне может понадобиться отдельный репозиторий только для файлаhgtags
. - Я мог бы использовать локальные теги, которые стоят вне механизма управления версиями, и поэтому избегайте всей проблемы. Как и в случае с общими глобальными тегами, мне нужно будет создать механизм для синхронизации файла
localtags
между разработчиками.
Ни одно из этих решений не кажется отличным. Что мне делать?
Предполагается, что я управляю ветвями, использующими именованные ветви в одном репозитории, а не в репозитории для каждой ветви. Будет ли ситуация лучше, если я сделаю последнее?
@SilentGhost: Я удалил тег «hg», так как метка «mercurial» намного более используется. Но может быть, это была ошибка? –