Наведіть кілька прикладів часто використовуваних методів назви гілок git? [зачинено]


1121

Я вже декілька місяців використовую локальне сховище git, взаємодіючи зі сховищем CVS моєї групи. Я зробив майже невротичну кількість гілок, більшість з яких вдячно злилися назад у мій стовбур. Але називання починає ставати проблемою. Якщо у мене є завдання, яке легко назвати простою міткою, але я виконую це на трьох етапах, кожен з яких включає власну гілку та ситуацію злиття, то я можу повторювати назву гілки кожен раз, але це робить історію трохи заплутаною. Якщо я отримаю більш конкретні в іменах, з окремим описом для кожного етапу, то імена гілок починають отримувати довгі та громіздкі.

Я навчився переглядати тут старі теми, що я можу почати називати гілки з / в імені, тобто темі / завданням чи щось подібне. Я можу почати це робити і побачити, чи це допомагає краще організувати справи.

Назвіть кілька найкращих практик назви гілок git?

Редагувати: Ніхто фактично не пропонував жодних угод про іменування. Я видаляю гілки, коли закінчу з ними. Мені просто трапляється кілька людей завдяки тому, що менеджмент постійно коригує свої пріоритети. :) Як приклад того, чому мені може знадобитися більше однієї гілки для завдання, припустимо, мені потрібно зробити перший дискретний етап у завданні для сховища CVS групи. У той момент, через мою недосконалу взаємодію з CVS, я би виконав цю фіксацію, а потім убив цю гілку. (Я бачив занадто багато дивацтва, що взаємодіє з CVS, якщо я намагаюся продовжувати використовувати ту саму гілку в цей момент.)


Так - напевно, добре не тримати навколо себе і не натискати гілки, які не корисні після того, як ви закінчите з ними. Якщо немає вагомих причин зберегти галузь теми (наприклад, для подальшої консультації з нею), не існує проблеми з її видаленням. Git полегшує розгалуження, а наслідком є ​​те, що ви можете закінчити безліч дрібницьких гілок, які можуть бути очищені без особливих чарівностей.
Ерік Уокер

14
Дивіться також github.com/agis-/git-style-guide
Агіс


18
Для таких питань у мережі StackExchange має бути місце. Дуже страшно дратує, коли хтось задає такий хороший запитання, а потім закривається за не дотримання правил. Якщо це все-таки відбувається, це, мабуть, означатиме необхідність якось підтримувати подібні питання. Тільки вони, ймовірно, повинні бути реалізовані на веб-сайті Overflow, оскільки вони настільки тісно пов'язані з питаннями типу програмування. Для мене переповнення не є "об'єктивно відповідальними питаннями" (занадто специфічними), це "питаннями програмування".
Нік Рез

@Wim Ми використовуємо ключі видачі jira в поєднанні з коротким заголовком, наприклад:KEY-1234/allow-users-to-do-smart-stuff
RobAu

Відповіді:


937

Ось деякі угоди про іменування галузей, які я використовую, та причини їх використання

Конвенції про іменування гілок

  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". Це може заплутати нових користувачів.

Не використовуйте голі номери

Не використовуйте голові номери (або шістнадцяткові номери) як частину схеми іменування вашої гілки. Всередині вкладки-розширення посилального імені 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'.


156
Один недолік використання поєднання форм , як bug/20574/frabnotz-finderі в bug/20424тому , що як тільки ви починаєте без суб-маркер, ви не можете додати один пізніше і навпаки. EG: Якщо ви створюєте bug/20424відділення, ви не можете створити bug/20424/additional-fixingгілку пізніше (якщо ви не видалите bug/20424гілку). Так само, якщо bug/20574/frabnotz-finderце вже філія, ви не можете створити bug/20574гілку. Я схильний або використовувати роздільник, що не містить суб-лексеми, у таких випадках (наприклад bug/20574_frabnotz-finder), або вибирати ім'я субтокена (наприклад bug/20424/main) за замовчуванням .
Сліпп Д. Томпсон,

5
Це також має перевагу спонукання деяких інструментів на основі Git GUI, щоб дозволити згортання токенів поділів, як перегляд списку каталогів. У наведеному вище прикладі, ви б побачити featureгрупу і bugгрупа, що розширюється , щоб показати foo, barтег для колишніх і 20574, 20592груп і 20424, 21334тегів для останнього.
Сліп Д. Томпсон

47
Я збираюся розпочати кампанію, щоб ніколи не використовувати косої риси в іменуванні гілок гіта. Причиною цього є те, що якщо, наприклад, на CI, ви хочете посилатися на ім'я гілки, наприклад, при упаковці коду, ви хочете посилатися на ім'я гілки під час створення uri або PATH (наприклад), можливо, будуючи урі в баш-скрипті; у вас виникнуть проблеми зі створенням урі через додавання косої частини URL-адреси. Так, це можливо замінити косу рису, але це займе у мене багато часу, щоб розібратися.
Адам Спенс

13
Чи проблема в тому, що косої риски в деяких випадках мають значення для git? Наприклад, у відповідь на git branch -aта отримання remotes/origin/masterтощо. Коли я бачу, як git розповідає мені про гілку, я не використовую косої риски вперед і тому, коли я бачу її, я знаю, що це "особлива" посилання.
Dogweather

11
Чи можете ви використати кілька прикладів замість foo та bar?
Варто7

329

Вдала модель розгалуження Git Вінсента Дріссена має хороші пропозиції. Малюнок нижче. Якщо ця модель розгалуження подобається вам, ви можете розглянути розширення потоку на git . Інші прокоментували потік

Модель Дріссена включає

  • Основна гілка, використовується лише для випуску. Типова назва master.

  • "Розробити" гілку цієї гілки. Це той, який використовується для більшості основних робіт. Поширена назва develop.

  • Кілька ознак відгалуження розвивається гілки. Ім'я на основі назви функції. Вони будуть об'єднані назад у розробку, а не в ведучу чи звільну гілки.

  • Випустіть відділення, щоб проводити випуск кандидатів, лише виправлення помилок та відсутність нових функцій. Типова назва rc1.1.

Виправлення - це недовговічні гілки для змін, які надходять від головного і перейдуть у головний, не включаючи гілки розвитку.

введіть тут опис зображення


129
За винятком того, що він справді не вирішує питання, оскільки він залишає купу конвенцій іменування користувачеві, особливо для функціональних гілок (вони можуть бути "будь-чим, крім майстра, розробки, випуску чи виправлення "
Брайан

1
@Brian У чому може допомогти конвенція про іменування в контексті проблем, які вирішує модель? В даний час я не бачу, як дійсно допомагає зробити подальший розрізнення у функціях. Можливо, майбутнє проти наступного випуску, але це договірно, і тому воно не повинно бути частиною назви. Для читабельності може бути достатньо лише попереднього попередження їх за допомогою функції *. Ти кілька разів проголосував, тому мені просто цікаво почути твій роздум ...
Nick Res

2
Хоча гарна інформація, ця відповідь стосується питання потоку, а не називання конвенції. Я думаю, що ОП хотіла б знати, які фактичні слова вживати (іменники проти дієслів),
розділові знаки, відмінки

6
У книзі «Безперервна доставка» (стор. 36) стверджується, що ця модель є якоюсь антитетичною для постійної інтеграції, ... по суті, вона насправді не «спритна».
Маркон

Це насправді не відповідає на поставлене запитання. Це пропонує розуміння інтеграції конкретного робочого процесу git у загальний графік розробки та випуску, проте, спеціаліст шукає поради щодо конвенцій щодо того, як насправді викликати гілки.
Уїлер

56

Моє особисте вподобання - видалити ім'я гілки після того, як я закінчую тему.

Замість того, щоб намагатися використовувати ім'я гілки для пояснення значення гілки, я запускаю рядок теми повідомлення про фіксацію в першій послідовності на цій гілці з "Відділення:" і включаю подальші пояснення в тіло повідомлення, якщо тема не дає мені достатньо місця.

Ім'я гілки в моєму використанні - це суто ручка для посилання на галузь теми під час роботи над нею. Після того, як робота над галуззю теми закінчилася, я позбавляюся від назви гілки, іноді позначаючи комісію для подальшого ознайомлення.

Це також робить git branchкориснішим результат: він містить лише перелік довготривалих гілок та галузей активних тем, а не всіх галузей.


53

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

назва / особливість / номер випуску-трекера / короткий опис

що перекладається на:

Майк / блоги / RSSI-12 / виправлення логотипу

Частини розділені косою рисою вперед, тому що їх інтерпретують як папки в SourceTree для легкої організації. Ми використовуємо Джиру для відстеження випусків, тому включення номера полегшує пошук у системі. Включення цього номера також робить його пошуковим при спробі знайти цю проблему всередині Github при спробі подати запит на витяг.


Я такий самий, за винятком помилки / номера функції у повідомленні фіксації (для GitHub -> Pivotal Tracker інтеграції).
Лев

Мені цікаво, що означає RSSI.
Реншукі

@renshuki - це просто загальний ключ проекту Jira. Який би трекер ви не використовували, вставте ID квитка
MikeG

@MikeG дякую за точність!
Реншукі

3
Я використовую те саме, за винятком я передаю номер випуску разом з описом:name/feature/issue-tracker-number-short-description
lephleg

22

Чому для кожного завдання потрібно три гілки / злиття? Чи можете ви пояснити більше про це?

Якщо ви використовуєте систему відстеження помилок, ви можете використовувати номер помилки як частину назви гілки. Це дозволить зберегти унікальні назви гілок, і ви можете встановити їх за допомогою короткого та описового слова чи двох, щоб вони могли читатись людьми, як "ResizeWindow-43523". Це також допомагає полегшити ситуацію, коли ви збираєтеся прибирати гілки, оскільки ви можете шукати пов’язані помилки. Саме так я зазвичай називаю свої гілки.

Оскільки ці гілки з часом об'єднуються у головний майстер, вам слід безпечно видалити їх після об'єднання. Якщо ви не злиєтеся з вами --squash, вся історія філії все ще буде існувати, якщо вам це буде потрібно.


12

Зауважте, як проілюстровано у комітеті e703d7 або посилання b6c2a0d (березень 2014 р.), Який зараз є частиною Git 2.0, ви знайдете ще одну умову іменування (яку ви можете застосувати до гілок).

"Коли вам потрібно використовувати пробіл, використовуйте тире" - це дивний спосіб сказати, що ви не повинні використовувати пробіл.
Оскільки в описах командного рядка частіше використовувати штрихові багатослівні слова, ви навіть не хочете використовувати пробіли в цих місцях.

У назві гілки не може бути місця (див. " Які символи є незаконними у назві гілки? " Та на git check-ref-formatсторінці " man" ).

Тож для кожної назви гілки, яка була б представлена ​​багатословним виразом, використання " -" (тире) як роздільника є хорошою ідеєю.


7

Слідкуючи за пропозицією farktronix, ми використовували номери квитків Jira для подібних у меркуріалі, і я планую продовжувати використовувати їх для гілок git. Але я думаю, що номер квитка сам по собі, мабуть, досить унікальний. Хоча може бути корисним, щоб у назві гілки було описане слово, як зазначалося farktronix, якщо ви перемикаєтесь між гілками досить часто, ви, мабуть, хочете менше вводити текст. Тоді, якщо вам потрібно знати назву філії, шукайте в Джирі відповідні ключові слова в квитку, якщо ви цього не знаєте. Крім того, слід вказати номер квитка в кожному коментарі.

Якщо ваша філія представляє версію, виявляється, що загальною умовою є використання формату xxx (наприклад: "1.0.0") для імен гілок та vx.xx (приклад "v1.0.0") для імен тегів (щоб уникнути конфлікту) . Дивіться також: є-там-стандарт-іменування-конвенція-для-git-тегів


1
Чи є проблема з конфліктами? Якщо ціль полягає в тому, v1.2.4щоб гілка в кінцевому підсумку призвела до кінцевої точки з v1.2.4тегом (чи я правильно вважаю, що це ситуація, коли ви іменуєте гілки та теги після версії) , то це має значення? До тегу все ще можна дістатись за адресою refs/tags/v1.2.4та гілкою refs/heads/v1.2.4, і, схоже, Git надасть перевагу імені тегу, коли це неоднозначно (з попередженням).
Сліпп Д. Томпсон,

1
Для прикладу версії, як я згадував у своїй відповіді, пропонована практика - префікс "v" для імен тегів, а не гілок. Уникайте неоднозначностей, якщо ви можете уникнути неправильної комунікації та тому, що це може спричинити проблеми в дорозі, що переходять на будь-який наступний останній і найбільший VCS.
Гері С. Вівер

2
Нещодавно я працював з репо, де ми обмежували кожну гілку версії тегом з такою ж назвою. Це спрацювало значно добре, тому що двозначності немає (тег вказує на останнє введення у відповідну гілку у більшості випадків), і коли це може бути, Git "робить все правильно" (з попередженням). Я вважаю за краще, тому що якщо хтось зробить помилкову помилку і вчинить далі до обмеженої гілки, Git продовжить вибирати тег, який є наміром. Неоднозначність може спростити справи, коли система має все під контролем, а наміри зрозумілі.
Сліп Д. Томпсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.