remove - git tag vs branch




git отрасль наименования лучших практик (5)

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

Соглашения об именах филиалов

  1. Используйте значки группировки (слова) в начале имен ваших филиалов.
  2. Определите и используйте короткие токены для того, чтобы дифференцировать ветви таким образом, который имеет смысл для вашего рабочего процесса.
  3. Используйте косые черты для разделения частей имен ваших филиалов.
  4. Не используйте голые числа в качестве ведущих деталей.
  5. Избегайте длинных описательных имен для долгоживущих ветвей.

Групповые жетоны

Используйте «группировать» токены перед именами ваших филиалов.

group1/foo
group2/foo
group1/bar
group2/bar
group3/bar
group1/baz

Группы могут быть названы так, как вам нравится, в соответствии с вашим рабочим процессом. Мне нравится использовать короткие существительные для моего. Читайте дальше для большей ясности.

Короткие четко определенные маркеры

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

wip       Works in progress; stuff I know won't be finished soon
feat      Feature I'm adding or expanding
bug       Bug fix or experiment
junk      Throwaway branch created to experiment

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

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

new/frabnotz
new/foo
new/bar
test/foo
test/frabnotz
ver/foo

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

$ git branch --list "test/*"
test/foo
test/frabnotz

$ git branch --list "*/foo"
new/foo
test/foo
ver/foo

$ gitk --branches="*/foo"

Используйте косые черты для разделения деталей

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

$ git push origin 'refs/heads/feature/*:refs/heads/phord/feat/*'
$ git push origin 'refs/heads/bug/*:refs/heads/review/bugfix/*'

Для меня косые черты также лучше работают для расширения вкладок (завершения команды) в моей оболочке. Способ, которым я настроен, я могу найти ветви с разными частями, введя первые символы части и нажав клавишу TAB. Затем Zsh дает мне список ветвей, которые соответствуют той части маркера, которую я набрал. Это работает как для предшествующих токенов, так и для встроенных.

$ git checkout new<TAB>
Menu:  new/frabnotz   new/foo   new/bar


$ git checkout foo<TAB>
Menu:  new/foo   test/foo   ver/foo

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

Он также позволяет искать ветви во многих командах git, например:

git branch --list "feature/*"
git log --graph --oneline --decorate --branches="feature/*" 
gitk --branches="feature/*" 

Предостережение. Как отмечает Слипп в комментариях, слэши могут вызвать проблемы. Поскольку ветви реализованы как пути, вы не можете иметь ветку с именем «foo» и другую ветвь с именем «foo / bar». Это может ввести в заблуждение для новых пользователей.

Не используйте голые цифры

Не используйте использование голых чисел (или шестнадцатеричных чисел) как часть схемы именования филиалов. Внутри tab-расширения ссылочного имени git может решить, что число является частью sha-1 вместо имени ветки. Например, моя проблема отслеживает имена ошибок с десятичными числами. Я называю свои родственные ветви CRnnnnn, а не просто nnnnn, чтобы избежать путаницы.

$ git checkout CR15032<TAB>
Menu:   fix/CR15032    test/CR15032

Если бы я попытался расширить только 15032, git не был бы уверен, хочу ли я искать имена SHA-1 или ветки, и мой выбор будет несколько ограниченным.

Избегайте длинных описательных имен

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

С другой стороны, длинные имена ветвей могут быть более полезными в «коммандах слияния», если вы их обычно не переписываете вручную. Сообщение об объединении слияния по умолчанию - Merge branch 'branch-name' . Возможно, вам будет полезно, чтобы сообщения о слиянии отображались как Merge branch 'fix/CR15032/crash-when-unformatted-disk-inserted' слиянии», а не только Merge branch 'fix/CR15032/crash-when-unformatted-disk-inserted' Merge branch 'fix/CR15032' .

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

Я изучил, просматривая старые темы здесь, что я мог бы начать именовать ветки с именем / в имени, то есть с темой / задачей или с чем-то подобным. Я могу начать делать это и видеть, помогает ли это лучше организовывать вещи.

Каковы некоторые рекомендации по наименованию ветвей git?

Изменить: Никто не предлагал никаких соглашений об именах. Я удаляю ветки, когда я с ними работаю. У меня просто бывает несколько факторов из-за того, что руководство постоянно корректирует мои приоритеты. :) В качестве примера того, почему мне может понадобиться несколько ветвей для задачи, предположим, что мне нужно перенести первую дискретную веху в задачу в репозиторий CVS группы. В этот момент, из-за моего несовершенного взаимодействия с CVS, я выполнил бы эту фиксацию, а затем убью эту ветку. (Я видел слишком много странностей, взаимодействующих с CVS, если я попытаюсь продолжать использовать ту же ветвь в этой точке.)


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

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

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

Это делает выход git branch более полезным: он отображает только долгоживущие ветви и активные ветви темы, а не все ветви.


Почему для каждой задачи требуется три ветви / слияния? Можете ли вы объяснить об этом больше?

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

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


Следуя предложению farktronix, мы использовали номера билетов Jira для аналогичных в mercurial, и я планирую продолжать использовать их для филиалов git. Но я думаю, что номер билета, вероятно, достаточно уникален. Хотя было бы полезно иметь описательное слово в названии ветки, как отметил farktronix, если вы часто переключаетесь между ветвями, вам, вероятно, нужно меньше вводить текст. Затем, если вам нужно знать имя филиала, посмотрите в Jira на соответствующие ключевые слова в билете, если вы этого не знаете. Кроме того, вы должны указать номер билета в каждом комментарии.

Если ваша ветка представляет собой версию, кажется, что общим соглашением является использование формата xxx (пример: «1.0.0») для имен ветвей и vx.xx (пример «v1.0.0») для имен тегов (во избежание конфликтов) , См. Также: is-there-an-standard-naming-convention-for-git-tags


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

имя / функция / проблемно-трекер номер / короткое описание

который переводится на:

микрофон / блоги / RSSI-12 / логотип затруднительного

Части разделяются с помощью косой черты, потому что они получают интерпретацию как папки в SourceTree для упрощения организации. Мы используем Jira для отслеживания проблем, поэтому включение номера упрощает поиск в системе. В том числе это число также делает его доступным для поиска при попытке найти эту проблему внутри Github при попытке отправить запрос на перенос.





branch