Conventional Branch 1.1.0
Podsumowanie
Conventional Branch odnosi się do uporządkowanej i ustandaryzowanej konwencji nazewnictwa gałęzi Git, której celem jest uczynienie gałęzi bardziej czytelnymi i wykonalnymi. Zaproponowaliśmy kilka prefiksów gałęzi, które możesz chcieć używać, ale możesz także określić własną konwencję nazewnictwa. Spójna konwencja nazewnictwa ułatwia identyfikację gałęzi według typu.
Kluczowe punkty
- Nazwy gałęzi zorientowane na cel: Każda nazwa gałęzi jasno wskazuje jej cel, ułatwiając wszystkim programistom zrozumienie, do czego służy gałąź.
- Integracja z CI/CD: Używając spójnych nazw gałęzi, można pomóc zautomatyzowanym systemom (takim jak potoki Continuous Integration/Continuous Deployment) w wyzwalaniu określonych działań na podstawie typu gałęzi (np. automatyczne wdrożenie z gałęzi wydania).
- Współpraca zespołowa: Zachęca do współpracy w zespołach poprzez wyjaśnienie celu gałęzi, zmniejszenie nieporozumień i ułatwienie członkom zespołu przełączania się między zadaniami bez zamieszania.
Specyfikacja
Prefiksy nazw gałęzi
Specyfikacja gałęzi obsługuje następujące prefiksy i powinna być zorganizowana jako:
<typ>/<opis>
Prefiksy celu — opisują intencję pracy:
feature/(lubfeat/): Dla nowych funkcji (np.feature/add-login-page,feat/add-login-page)bugfix/(lubfix/): Dla poprawek błędów (np.bugfix/fix-header-bug,fix/header-bug)hotfix/: Dla pilnych poprawek (np.hotfix/security-patch)release/: Dla gałęzi przygotowujących wydanie (np.release/v1.2.0)chore/: Dla zadań niezwiązanych z kodem, takich jak zależności, aktualizacje dokumentacji (np.chore/update-dependencies)
Prefiksy źródła agenta AI — identyfikują gałęzie generowane przez agentów kodujących AI:
| Prefiks | Agent | Dostawca | Od wersji |
|---|---|---|---|
ai/ |
Dowolny agent AI | — | v1.1.0 |
claude/ |
Claude Code | Anthropic | v1.1.0 |
codex/ |
OpenAI Codex | OpenAI | v1.1.0 |
copilot/ |
GitHub Copilot | GitHub | v1.1.0 |
cursor/ |
Cursor | Anysphere | v1.1.0 |
Gałęzie główne (main, master, develop) nie używają prefiksu.
Podstawowe zasady
- Używaj małych liter, cyfr, myślników i kropek: Zawsze używaj małych liter (
a-z), cyfr (0-9) i myślników (-) do oddzielania słów. Unikaj znaków specjalnych, podkreśleń lub spacji. Kropki (.) są dozwolone w każdym opisie, zwykle w numerach wersji (np.release/v1.2.0,chore/upgrade-node-v20.11). - Bez następujących po sobie, wiodących lub końcowych myślników lub kropek: Upewnij się, że myślniki i kropki nie pojawiają się kolejno po sobie (np.
feature/new--login,release/v1.-2.0), ani na początku czy końcu opisu (np.feature/-new-login,release/v1.2.0.). - Zachowaj jasność i zwięzłość: Nazwa gałęzi powinna być opisowa, ale zwięzła, jasno wskazująca cel pracy.
- Dołącz numery biletów: Jeśli to możliwe, dołącz numer biletu z narzędzia zarządzania projektami, aby ułatwić śledzenie. Na przykład, dla biletu
issue-123, nazwa gałęzi mogłaby byćfeature/issue-123-new-login.
Formalna gramatyka
Poniższa gramatyka ABNF (Augmented Backus-Naur Form) formalnie definiuje prawidłowe nazwy gałęzi:
branch-name = trunk-branch / prefixed-branch
trunk-branch = "main" / "master" / "develop"
prefixed-branch = type "/" description
type = "feature" / "feat" / "bugfix" / "fix"
/ "hotfix" / "release" / "chore"
/ "ai" / "copilot" / "cursor"
/ "claude" / "codex"
description = desc-segment *("-" desc-segment)
desc-segment = 1*(ALPHA / DIGIT) *("." 1*(ALPHA / DIGIT))
ALPHA = %x61-7A ; małe litery a-z
DIGIT = %x30-39 ; cyfry 0-9
Uwaga: Kolejne myślniki lub kropki oraz myślniki lub kropki na początku lub końcu opisu nie są dozwolone.
Przykłady
| Nazwa gałęzi | Prawidłowa | Uwagi |
|---|---|---|
main |
✅ | Gałąź główna |
master |
✅ | Gałąź główna |
develop |
✅ | Gałąź główna |
feature/add-login-page |
✅ | Nowa funkcja |
feat/add-login-page |
✅ | Krótki alias dla feature |
bugfix/fix-header-bug |
✅ | Naprawa błędu |
fix/header-bug |
✅ | Krótki alias dla bugfix |
hotfix/security-patch |
✅ | Pilna naprawa |
release/v1.2.0 |
✅ | Wydanie z numerem wersji |
chore/upgrade-node-v20.11 |
✅ | Kropki poza gałęzią wydania |
chore/update-dependencies |
✅ | Zadanie niezwiązane z kodem |
feature/issue-123-new-login |
✅ | Funkcja z numerem biletu |
Feature/Add-Login |
❌ | Wielkie litery są niedozwolone |
feature/new--login |
❌ | Kolejne myślniki są niedozwolone |
feature/-new-login |
❌ | Opis nie może zaczynać się myślnikiem |
feature/new-login- |
❌ | Opis nie może kończyć się myślnikiem |
release/v1.-2.0 |
❌ | Myślnik obok kropki jest niedozwolony |
fix/header bug |
❌ | Spacje są niedozwolone |
fix/header_bug |
❌ | Podkreślenia są niedozwolone |
ai/refactor-auth-flow |
✅ | Generyczny prefiks agenta AI |
copilot/add-login-page |
✅ | GitHub Copilot |
cursor/fix-header-bug |
✅ | Cursor |
claude/security-patch |
✅ | Claude Code od Anthropic |
codex/optimize-query |
✅ | OpenAI Codex |
unknown/some-task |
❌ | Nieznany typ prefiksu |
Wnioski
- Jasna komunikacja: Sama nazwa gałęzi zapewnia jasne zrozumienie jej celu i zmiany kodu.
- Przyjazna dla automatyzacji: Łatwo integruje się z procesami automatyzacji (np. różne przepływy pracy dla
feature,release, itp.). - Skalowalność: Dobrze sprawdza się w dużych zespołach, gdzie wielu programistów pracuje jednocześnie nad różnymi zadaniami.
Podsumowując, conventional branch został zaprojektowany w celu poprawy organizacji projektu, komunikacji i automatyzacji w przepływach pracy Git.
Narzędzia
Użyj tych narzędzi, aby wdrożyć i egzekwować Conventional Branch w swoim projekcie:
- commit-check: Lokalnie sprawdza nazwy gałęzi, komunikaty commitów i powiązane metadane Git.
- commit-check-action: Automatycznie weryfikuje nazwy galezi w GitHub Actions.
- Conventional Branch Skill: Uczy asystentów programistycznych AI tworzenia poprawnych nazw Conventional Branch.
Zainstaluj skill poleceniem:
npx skills add conventional-branch/conventional-branch --skill conventional-branch
FAQ
Czym jest nazwa gałęzi?
Nazwa gałęzi to etykieta, którą Git nadaje linii rozwoju, na przykład main lub feature/add-login-page; Git przechowuje ją jako referencję (ref) w refs/heads/. Git akceptuje bardzo różne nazwy, więc sama nazwa gałęzi nie mówi nic pewnego o pracy, która się na niej odbywa. Conventional Branch nadaje jej strukturę <typ>/<opis>: typ, który mówi, czemu służy praca, a po nim krótki opis małymi literami, ze słowami oddzielonymi myślnikami. Na przykład:
feature/add-login-pagebugfix/fix-header-bugrelease/v1.2.0
Gałęzie główne (main, master, develop) nie używają prefiksu.
Jak nazwać gałąź feature?
Zacznij ją od feature/ lub krótkiego aliasu feat/ i opisz funkcję po ukośniku. Jeśli praca ma bilet w twoim narzędziu zarządzania projektami, dołącz jego numer. Na przykład:
feature/add-login-pagefeat/add-login-pagefeature/issue-123-new-login
Czym jest gałąź chore?
Gałąź chore/ służy do zadań niezwiązanych z kodem, takich jak aktualizacja zależności lub dokumentacji. Typów gałęzi jest celowo mniej niż typów Conventional Commits (zobacz niżej), więc tego rodzaju prace utrzymaniowe trafiają do chore/. Na przykład:
chore/update-dependencieschore/upgrade-node-v20.11chore/update-generated-files
Niektóre boty aktualizujące zależności, takie jak Renovate, również można skonfigurować tak, aby używały tego prefiksu; zobacz Boty i automatyzacja.
Jak nazwać gałąź release?
Użyj release/, a po nim tego, co gałąź przygotowuje, zwykle numeru wersji. Kropki są dozwolone, ale nie na początku ani na końcu opisu i nie obok myślnika:
release/v1.2.0— prawidłowarelease/v1.2.0.— nieprawidłowa: kropka na końcurelease/v1.-2.0— nieprawidłowa: myślnik obok kropki
Spójny prefiks pozwala też potokowi reagować na release/*, na przykład automatycznie wdrażać z gałęzi wydania.
Jak nazwać gałąź hotfix?
Użyj hotfix/ dla pilnej poprawki, a bugfix/ (lub fix/) dla poprawki, która nie jest pilna. Opisz, co jest poprawiane, i dołącz numer biletu, jeśli istnieje. Na przykład:
hotfix/security-patchhotfix/issue-123-security-patchbugfix/fix-header-bug— dla poprawki, która nie jest pilna
Jak Conventional Branch ma się do Conventional Commits?
Conventional Branch jest zainspirowany przez Conventional Commits i podąża za podobną filozofią: wprowadzenie struktury czytelnej dla ludzi i maszyn do metadanych Git. Podczas gdy Conventional Commits standaryzuje wiadomości commitów, Conventional Branch standaryzuje nazwy gałęzi. Obie specyfikacje naturalnie się uzupełniają.
Czy Conventional Branch wymyśliło te prefiksy?
Nie. Prefiksy takie jak feature/, hotfix/ i release/ spopularyzowało około 2010 roku narzędzie git-flow; są też domyślne w narzędziach takich jak model gałęzi Bitbucket. Conventional Branch opiera się na tej praktyce, zamiast ją zastępować. Dodaje precyzyjną definicję, którą mogą współdzielić ludzie i narzędzia: stały zestaw typów, formalną gramatykę, wyrażenie regularne do walidacji opublikowane w spec.json oraz przypadki zgodności, dzięki czemu każdy walidator akceptuje dokładnie te same nazwy.
Dlaczego typy gałęzi nie są tak szczegółowe jak w Conventional Commits (np. build, ci, docs, style, refactor)?
Gałęzie różnią się od commitów — są tymczasowe i używane głównie do momentu scalenia. Wprowadzenie zbyt wielu typów dla gałęzi byłoby niepotrzebne i utrudniłoby ich zarządzanie oraz zapamiętywanie.
Czy mogę zdefiniować własne typy gałęzi poza wymienionymi?
Tak, jako rozszerzenie na poziomie zespołu. Typy w gramatyce to te, które akceptuje każde zgodne narzędzie, dlatego gałąź taka jak unknown/some-task jest nieprawidłowa według samej specyfikacji. Zespół, który potrzebuje dodatkowych typów (np. experiment/), powinien jawnie dodać je do swojego walidatora (na przykład w allow_branch_types w commit-check) i opisać je w dokumentacji, aby członkowie zespołu i zautomatyzowane narzędzia działali zgodnie. Na przykład repozytorium samej specyfikacji dodaje w swojej konfiguracji commit-check typ dependabot/ dla gałęzi tworzonych przez Dependabot.
Dlaczego nazwy gałęzi muszą być pisane małymi literami?
Z dwóch powodów. Po pierwsze, Git zwykle przechowuje referencje gałęzi jako pliki w .git/refs/heads/, a domyślne systemy plików macOS i Windows nie rozróżniają wielkości liter: Feature/login i feature/login wskazują tam tę samą ścieżkę, a w Linuksie są dwiema różnymi gałęziami. Repozytorium, które dopuszcza obie formy, może więc zachowywać się różnie w zależności od klonu. Po drugie, jedna pisownia jest łatwiejsza do wpisania, wyszukania i dopasowania: narzędzie uruchamiane dla release/* nie musi uwzględniać także Release/*.
Jakie są główne różnice między v1.1.0 a v1.0.0?
v1.1.0 dodaje Prefiksy źródła agenta AI jako główną nową funkcję (dlaczego je wprowadzono, wyjaśnia następne pytanie w FAQ). Oferuje również witrynę z wersjonowaniem z przełącznikiem wersji, umożliwiającym użytkownikom przeglądanie specyfikacji v1.0.0 i v1.1.0. Wszystkie istniejące nazwy gałęzi v1.0.0 pozostają w pełni ważne — bez zmian łamiących zgodność.
Dlaczego dodać prefiksy źródła agenta AI?
Agenci kodujący AI (GitHub Copilot, Cursor, Claude Code, OpenAI Codex itp.) są coraz częściej używani do generowania kodu i tworzenia pull requestów. Każdy agent używa własnego prefiksu gałęzi (np. copilot/, cursor/). Poprzez standaryzację tych prefiksów w specyfikacji Conventional Branch, umożliwiamy:
- Szybką identyfikację — recenzenci i narzędzia mogą natychmiast rozpoznać PRy generowane przez AI
- Walidację narzędziową — narzędzia takie jak commit-check mogą walidować gałęzie agentów AI względem specyfikacji
- Standard rejestracji — nowi agenci AI mogą przyjąć udokumentowany prefiks zamiast wymyślać tymczasowe wzorce
Generyczny prefiks ai/ jest dostępny dla każdego agenta AI bez dedykowanego prefiksu lub dla zespołów, które preferują neutralnego dostawcę. To kluczowa nowa funkcja wydana w v1.1.0 — pełne podsumowanie zmian między wersjami znajduje się w powyższym pytaniu FAQ.
Jak radzić sobie z długo żyjącymi gałęziami, takimi jak develop lub staging?
Długo żyjące gałęzie integracyjne lub środowiskowe (np. develop, staging, production) są w praktyce często traktowane jak gałęzie główne i nie wymagają prefiksu, o ile w danym projekcie zostanie to jasno ustalone. Formalna gramatyka ABNF definiuje jednak gałąź główną (trunk-branch) jedynie jako main, master lub develop, a dodatkowe nazwy (takie jak staging czy production) są opcjonalnymi konwencjami specyficznymi dla projektu, które należy odpowiednio udokumentować i skonfigurować w narzędziach.
Jakich narzędzi można użyć, aby automatycznie sprawdzić, czy członek zespołu nie spełnia tej specyfikacji?
Możesz użyć commit-check do sprawdzania specyfikacji gałęzi lub commit-check-action, jeśli twój kod jest hostowany na GitHub.