У меня возникли трудности с пониманием того, как использовать теги по сравнению с ветками вмерзавец,
Я только что переместил текущую версию нашего кода из резюме в мерзавеци теперь я собираюсь работать над подмножеством этого кода для конкретной функции. Несколько других разработчиков будут работать над этим, но не все разработчики в нашей группе будут заботиться об этой функции. Должен ли я создавать ветку или тег? В каких ситуациях я должен использовать одно против другого?
git
version-control
branch
git-branch
git-tag
Bialecki
источник
источник
Ответы:
Тег представляет собой версию той или иной отрасли в момент времени. Ветвь представляет собой отдельный поток развития , которые могут работать одновременно с другими усилиями в области развития на той же кодовой базе. Изменения в ветке могут быть в конечном итоге объединены в другую ветвь, чтобы объединить их.
Обычно вы будете помечать определенную версию , так что вы можете воссоздать его, например, это версия , которую мы погружены в XYZ Corp . филиалэто скорее стратегия для предоставления текущих обновлений для конкретной версии кода, при этом продолжая разрабатывать его. Вы создадите ветку доставленной версии, продолжите разработку на основной линии, но исправите ошибки в ветке, которая представляет доставленную версию. В конце концов, вы объедините эти исправления ошибок с основной строкой. Часто вы будете использовать как ветвление, так и тегирование вместе. У вас будут различные теги, которые могут применяться как к основной линии, так и к ее ветвям, отмечая конкретные версии (например, доставленные клиентам) вдоль каждой ветви, которую вы можете захотеть воссоздать - для доставки, диагностики ошибок и т. Д.
Это на самом деле сложнее, чем это - или так сложно, как вы хотите это сделать - но эти примеры должны дать вам представление о различиях.
источник
git checkout 88c9f229f
вы можете сделать что-то вроде этого,git checkout your_tag
и вы извлечете коммит, который был добавлен тегом.С теоретической точки зрения:
С технической точки зрения:
refs/tags/
пространстве имен и могут указывать на объекты тегов (аннотированные и, возможно, подписанные теги GPG) или непосредственно на фиксацию объекта (менее используемый легкий тег для локальных имен), или в очень редких случаях даже на объект дерева или объект BLOB (например, подпись GPG). ).refs/heads/
пространстве имен и могут указывать только на фиксацию объектов .HEAD
Указатель должен относиться к ветви (символический отсчет) или непосредственно к фиксации (отдельно ГОЛОВКА или неименованный филиал).refs/remotes/<remote>/
пространстве имен и следуют за обычными ветками в удаленном хранилище<remote>
.Смотрите также страницу руководства gitglossary :
источник
git checkout <tag>
» сгенерирует анонимную безымянную ветвь (так называемый «отсоединенный HEAD») и выберет состояние тега. Создание нового коммита делает это в этой безымянной ветви и не меняет то, на что указывает тег.git checkout -b <branch name> <tag name>
Если вы думаете о своем хранилище как о книге, в которой рассказывается о прогрессе в вашем проекте ...
ветви
Вы можете думать о ветке как об одной из этих липких закладок :
В новом репозитории есть только один из них (который называется
master
), который автоматически переходит на последнюю страницу (например, коммит ), которую вы написали. Тем не менее, вы можете создавать и использовать больше закладок, чтобы отмечать другие интересные места в книге, чтобы вы могли быстро вернуться к ним.Кроме того, вы всегда можете переместить определенную закладку на другую страницу книги (
git-reset
например, с помощью); достопримечательности обычно меняются со временем.Теги
Вы можете думать о тегах как заголовки глав .
Он может содержать заголовок (думаю, аннотированные теги ) или нет. Тег похож на ветку и отличается от нее тем, что отмечает исторический интерес в книге. Чтобы сохранить его исторический аспект, после того, как вы поделились тегом (то есть перенесли его на общий пульт), вы не должны перемещать его в другое место в книге.
источник
Что нужно понять из CVS, так это то, что вы больше не создаете каталоги при настройке ветки.
Нет больше «липкой метки» (которую можно применить только к одному файлу) или «ветки метки».
Ветка и теги - это два разных объекта в Git, и они всегда применяются ко всему репо.
Вам больше не нужно (с SVN на этот раз) явно структурировать ваш репозиторий с помощью:
Эта структура проистекает из того факта, что CVS является системой ревизий, а не системой версий (см. Контроль версий или Контроль версий ? ).
Это означает, что ветви эмулируются с помощью тегов для CVS, копий каталогов для SVN.
Ваш вопрос имеет смысл, если вы привыкли извлекать тег и начать работать с ним .
Что вы не должны;)
Предполагается, что тег представляет собой неизменяемый контент, используемый только для доступа к нему с гарантией получения одного и того же контента каждый раз.
В Git история ревизий представляет собой серию коммитов, образующих граф.
Ветвь - один путь этого графа
См . Ответ Якуба Наренбского для всех технических деталей , но, честно говоря, на данный момент вам не нужны (пока) все детали;)
Суть в том, что тег, являющийся простым указателем на коммит, никогда не сможет изменить его содержимое. Вам нужна ветка.
В вашем случае каждый разработчик работает над определенной функцией:
Вместо непосредственного отслеживания ветвей ваших коллег, вы можете отслеживать только ветку одного «официального» центрального репозитория, в который каждый направляет свою работу, чтобы интегрировать и делиться работой каждого для этой конкретной функции.
источник
Ветви сделаны из дерева и растут из ствола дерева. Метки сделаны из бумаги (производная от дерева) и висят, как рождественские украшения из разных мест на дереве.
Ваш проект - это дерево, и ваша функция, которая будет добавлена в проект, будет расти на ветке. Ответ отраслевой.
источник
Похоже, лучший способ объяснить, что теги действуют как ветви только для чтения. Вы можете использовать ветку в качестве тега, но можете непреднамеренно обновить ее новыми коммитами. Теги гарантированно указывают на один и тот же коммит, пока они существуют.
источник
git tag -f
.Теги могут быть подписаны или не подписаны ; филиалы никогда не подписываются.
Подписанные теги никогда не могут перемещаться, потому что они криптографически связаны (с подписью) с определенным коммитом. Теги без знака не связаны, и их можно перемещать (но перемещение тегов не является нормальным вариантом использования).
Ветви могут не только перейти на другой коммит, но и должны это сделать. Вы должны использовать ветку для вашего местного проекта развития. Не имеет смысла фиксировать работу с Git-репозиторием «по тегу».
источник
Мне нравится думать о ветвях как о том, куда вы идете , о тегах, как о том, где вы были .
Тег ощущается как закладка определенного важного момента в прошлом, такого как выпуск версии.
В то время как ветвь - это конкретный путь, по которому идет проект, и, таким образом, маркер ветки продвигается вместе с вами. Когда вы закончите, вы объедините / удалите ветку (т.е. маркер). Конечно, в этот момент вы можете пометить этот коммит.
источник
Git Притча объясняет , как типичный DVCS получает создан и почему их создатели сделали то , что они сделали. Также вы можете взглянуть на Git for Computer Scientist ; он объясняет, что делает каждый тип объекта в Git, включая ветви и теги.
источник
Тег используется для обозначения версии, более конкретно, он ссылается на момент времени на ветви. Ветвь обычно используется для добавления функций в проект.
источник
просто:
Руководство пользователя Git
источник
простой ответ:
но
источник