Как тег отличается от ветки в Git? Что я должен использовать здесь?



У меня возникли некоторые трудности с пониманием, как использовать теги и отделения на git.



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

1026   11  

11 ответов:

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

обычно вы помечаете определенную версию, чтобы вы могли ее воссоздать, например, это версия, которую мы отправили в XYZ Corp. филиал-это скорее стратегия для обеспечения текущих обновлений на конкретной версии кода, продолжая делать разработку на нем. Вы создадите ветку поставляемой версии, продолжите разработку на главной линии, но исправите ошибки в ветке, которая представляет поставляемую версию. В конце концов, вы объедините эти исправления ошибок обратно в основную линию. Часто вы будете использовать как ветвление, так и пометку вместе. Вы будете иметь различные теги, которые могут применяться как к основной линии, так и к ее филиалам, помечая определенные версии (те, которые доставляются клиентам, например) вдоль каждой ветви, которую вы можете воссоздать - для доставки, диагностики ошибок и т. д.

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

С теоретической точки зрения:

  • теги являются символическими именами для данного редакция. Они всегда указывают на один и тот же объект (обычно: на одну и ту же ревизию); они не меняются.
  • отделения являются символическими именами для линия развития. Новые коммиты создаются поверх ветки. Указатель ветви естественно продвигается, указывая на все новые и новые совершает.

С технические точки зрения:

  • теги проживают в refs/tags/ пространство имен, и может указывать объекты теге (аннотированные и необязательно подписанные теги GPG) или непосредственно в commit object (меньше используется легкий тег для локальных имен), или в очень редких случаях даже дерево или объект blob (например, GPG подпись.)
  • отделения проживают в refs/heads/ пространство имен, и может указывать только совершить объектов. Элемент HEAD указатель должен ссылаться на ветвь (символическая ссылка) или непосредственно на фиксацию (отсоединенная головка или неназванная ветвь).
  • удаленные ветки проживают в refs/remotes/<remote>/ пространство имен, и следуйте обычным ветвям в удаленном репозитории <remote>.

см. также gitglossary странице:

филиала

"ветка" - это активная линия развития. Самая последняя фиксация на ветке называется кончиком этой ветви. На кончик ветви ссылается головка ветви, которая движется вперед по мере того, как дополнительная разработка выполняется на ветви. Один репозиторий git может отслеживать произвольное количество ветвей, но ваше рабочее дерево связано только с одним из них ("текущий" или " проверенный out " ветвь), и голова указывает на эту ветвь.

tag

ссылка, указывающая на тег или объект фиксации. В отличие от head, тег не изменяется фиксацией. Теги (не объекты тегов) хранятся в $GIT_DIR/refs/tags/. [...]. Тег обычно используется для обозначения определенной точки в цепочке предков фиксации.

тег Object

объект, содержащий ссылка указывает на другой объект, который может содержать сообщение так же, как объект фиксации. Он также может содержать подпись (PGP), в этом случае он называется "подписанный объект тега".

Если вы думаете о своем репозитории как о книге, которая фиксирует прогресс вашего проекта...

отделения

Вы можете думать о ветке как один из тех липких закладки:

enter image description here

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

кроме того, вы всегда можете переместить закладку на другую страницу книги (с помощью git-reset, например); точки интереса, как правило, меняются с течением времени.

Теги

вы можете думать о тегах как разделы.

bookmarks

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

что вам нужно понять, исходя из CVS, это то, что вы больше не создаете каталоги при создании филиала.
Больше нет " липкого тега "(который может быть применен только к одному файлу) или"тега ветви".
Отделения и теги-это два разных объекта в Git, и они всегда относятся к все РЕПО.

вам больше не придется (на этот раз с SVN) явно структурировать свой репозиторий с помощью:

branches
   myFirstBranch
     myProject
       mySubDirs
   mySecondBranch
     ...
tags
   myFirstTag
     myProject
       mySubDirs
   mySecondTag
   ...

эта структура исходит из дело в том, что CVS-это система пересмотра и не версия системы (см. управление версиями и контроль версий?).
Это означает, что ветви эмулируются через теги для CVS, копии каталогов для SVN.

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

в Git история ревизий представляет собой серию коммитов, образующих график.
Ветвь-это один путь этого графа

x--x--x--x--x # one branch
    \ 
     --y----y # another branch
       1.1
        ^
        |
        # a tag pointing to a commit
  • если вы проверяете тег, вам нужно будет создать ветку, чтобы начать работать с ним.
  • если вы проверяете ветку, вы сразу увидите последнюю фиксацию('HEAD') этой ветви.

посмотреть ответ Якуба Нарембского для всех тонкостей, но честно говоря, на данный момент вам не нужны (пока) все детали ;)

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


в вашем случае каждый разработчик работает над определенной функцией:

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

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

ветви сделаны из дерева и растут из ствола дерева. Бирки сделаны из бумаги (производной древесины) и висят как рождественские украшения от различных мест в дереве.

ваш проект-это дерево, и ваша функция, которая будет добавлена в проект будет расти на ветке. Ответ-ветвь.

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

The Git Притча объясняет, как создается типичный DVCS и почему их создатели сделали то, что они сделали. Кроме того, вы можете взглянуть на Git для компьютерного ученого; Он объясняет, что делает каждый тип объекта в Git, включая ветви и теги.

теги могут быть либо signed или unsigned; ветви никогда не подписываются.

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

ветви могут не только перейти к другому фиксации, но и ожидается чтобы сделать так. Вы должны использовать филиал для вашего локального проекта развития. Оно не совсем имеет смысл фиксировать работу в репозитории Git "на теге".

тег используется для обозначения версии, более конкретно он ссылается на момент времени на ветке. Ветвь обычно используется для добавления объектов в проект.

просто:

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

Руководство Пользователя 'Git'

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

филиала: будет копия кода, полученного из определенной точки в магистрали, которая используется для применения основных изменений в коде в то время как сохранение целостности кода в магистрали. Если основные изменения работают в соответствии с планом, они обычно объединяются обратно в ствол.

Tag : будет момент времени на стволе или ветке, которые вы хотите сохранить. Две основные причины сохранения будут заключаться в том, что либо это крупный релиз программного обеспечения, будь то альфа, бета, RC или RTM, или это самая стабильная точка программного обеспечения до основные изменения на стволе были применены.

Comments

    Ничего не найдено.