Почему я должен использовать теги против релизов/бета-ветвей для управления версиями?

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

Должно быть много хороших причин для пометки, а не для ветвления, но я хотел бы знать, каковы эти преимущества.

Ответ 1

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

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

Изменить: Здесь - отличный способ использовать git, который я использую для всех моих проектов.

Ответ 2

Тег неизменный.

В то время как вы можете создать ветку с именем "1.0.0" - вы или кто-либо с правами фиксации также можете просто нажать на эту ветку (намеренно или нет) и изменить то, что означает 1.0.0.

Вы не можете сделать это с помощью тега, как только вы создадите тег - это он; Тег 1.0.0 означает именно это и не может быть изменен *.

То, что основное практическое различие между тегом и веткой

* Вы можете удалить и воссоздать тег, тем самым изменив тег, но, конечно, не случайно.

Ответ 3

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

Здесь хорошая запись в этом типе рабочего процесса: http://nvie.com/posts/a-successful-git-branching-model/

Ответ 4

Ветвь и тег - это одно и то же (указатель на коммит, он же. "ref"), за исключением того, что ветвь автоматически перемещается к следующему коммиту, в то время как тег остается навсегда 1 при одном и том же коммите.

При создании релиза вы, как правило, хотите пометить "снимок" кода, из которого был создан этот выпуск, и вы хотите, чтобы он оставался отмеченным таким образом, даже если вы продолжаете развивать код, поэтому вы будете использовать тег.

Если вы попытаетесь использовать для этого ветку, она может непреднамеренно перейти к другой фиксации, из которой релиз не был собран.


1 Если, конечно, вы не удалите тег.

ПРИМЕЧАНИЕ: я понимаю, что это старый вопрос, но я чувствовал, что сходство (и одно существенное различие) между ветвями и тегами не было отражено в других ответах так ясно, как могло бы быть.

Ответ 5

Вы используете теги, чтобы отметить важные фиксации в истории. "Это была точная фиксация, которую мы использовали для этой версии в этот дождливый четверг, когда сервер сборки сломался". Если вы используете ветку вместо тега, вы никогда не узнаете, какую именно фиксацию вы использовали. Вы знаете только "Мы выпустили версию 1.1.0 где-то на этой ветке", если вы не вручную записываете точный хэш для этого коммита, поэтому вы используете теги в первую очередь:)

Ответ 6

В дополнение к другим ответам, здесь мои 2 цента. Я считаю, что использование тегов для версионного релиза лучше, чем использование веток. Просто оторвитесь от тегового коммита и, как только вы закончите работу над этой веткой (скорее всего веткой исправлений), создайте новый тег в начале этой новой ветки с новой версией. Затем объедините эту ветку обратно с master/development, потому что вам действительно не следует менять версию выпуска, если только это исправление, которое, вероятно, должно быть объединено с вашим исходным кодом. Затем удалите эту ветку, так как она больше не нужна. Если вам нужно применить другое исправление к этой новой версии, повторите те же действия.

Обратитесь к разделу следующей статьи, который показывает, как объединить исправление с авторским рабочим процессом Git - https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2