Skip to content

Version Control ​

23.1. GitHub Flow Branch Strategy ​

23.1.1. Core Principles ​

  • The main branch must always remain in a deployable state.
  • All work must be performed on feature branches created from main.
  • Upon completion, a Pull Request must be created and merged into main after review.

23.1.2. Branch Naming ​

PrefixPurposeExample
feature/New feature developmentfeature/user-registration
fix/Bug fixfix/login-redirect-error
hotfix/Production emergency fixhotfix/payment-null-check
chore/Build, configuration, dependency, and other non-functional taskschore/update-spring-boot
docs/Documentation workdocs/api-specification
refactor/Refactoringrefactor/user-service-cleanup

23.1.3. Branch Naming Rules ​

  • Only lowercase letters and hyphens (-) must be used.
  • Slashes (/) must only be used for prefix separation.
  • Branch names must concisely describe the task.
  • If an issue number exists, it should be included: feature/123-user-registration

23.1.4. Workflow ​


23.2. Commit Message Conventions ​

23.2.1. Conventional Commits ​

All commit messages must follow the Conventional Commits format.

<type>: <description>

[optional body]

23.2.2. Type List ​

TypeDescriptionExample
featNew featurefeat: add user profile retrieval API
fixBug fixfix: resolve login redirect error
docsDocumentation changesdocs: update API specification
styleCode formatting (no behavior change)style: sort imports
refactorRefactoring (no behavior change)refactor: extract UserService methods
testAdd/modify teststest: add UserService unit tests
choreBuild, configuration changeschore: update Spring Boot to 3.4.3
perfPerformance improvementsperf: optimize user list query
ciCI configuration changesci: add CircleCI cache configuration

23.2.3. Commit Message Rules ​

  • The subject line must be kept within 50 characters.
  • The subject must be written in imperative mood. ("Added" X -> "Add" O)
  • The subject must not end with a period.
  • If a body is needed, it must be separated from the subject by a blank line.
  • Korean or English must be used consistently on a per-project basis.

23.3. Pull Request Rules ​

23.3.1. PR Requirements ​

ItemCriteria
ReviewersApproval from at least 1 reviewer
CIAll checks passed (lint, build, test)
ConflictsAll merge conflicts resolved
BranchUp to date with main

23.3.2. PR Template ​

The project must include .github/pull_request_template.md.

markdown
## Changes
<!-- Briefly describe the changes in this PR -->

## Reason for Change
<!-- Explain why this change is necessary -->

## Testing
- [ ] Unit tests added/modified
- [ ] Verified locally

## Related Issues
<!-- Related issue number (e.g., #123) -->

23.3.3. Merge Strategy ​

  • Squash and Merge must be used as the default strategy.
  • After merging, the feature branch must be automatically deleted.

23.4. .gitignore Standards ​

23.4.1. Unified .gitignore Example ​

txt
# Java / Maven
target/
*.class
*.jar
*.war

# Spring Boot
*.log

# IDE
.idea/
*.iml
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json

# Node.js
node_modules/
dist/

# Environment Variables
.env.local
.env.*.local

# OS
.DS_Store
Thumbs.db

23.4.2. Principles ​

  • Build artifacts (target/, dist/) must not be tracked.
  • Among IDE settings, only team-shared settings (.vscode/settings.json) must be tracked.
  • Local environment variables (.env.local) must not be tracked.

23.5. Version Tagging ​

23.5.1. Semantic Versioning ​

All releases must follow Semantic Versioning (SemVer) rules.

MAJOR.MINOR.PATCH
ComponentWhen to IncrementExample
MAJORBreaking changes that break backward compatibility1.0.0 -> 2.0.0
MINORBackward-compatible feature additions1.0.0 -> 1.1.0
PATCHBackward-compatible bug fixes1.0.0 -> 1.0.1

23.5.2. Tag Format ​

  • Git tag format: v{MAJOR}.{MINOR}.{PATCH}
  • Example: v1.0.0, v1.2.3
bash
git tag -a v1.0.0 -m "v1.0.0 release"
git push origin v1.0.0

23.5.3. Release Notes ​

Release notes describing all changes must be written for every release. Changes must be grouped by commit message type.

TIENIPIA QUALIFIED STANDARD