Skip to content

πŸš€ AI-powered Git commit analysis tool with PR generation, changelog creation, and GitHub template support

License

Notifications You must be signed in to change notification settings

hj4645/commit-chronicle

Repository files navigation

Commit Chronicle

JitPack License: MIT Kotlin GitHub Issues GitHub Stars CI

AIλ₯Ό ν™œμš©ν•œ Git 컀밋 뢄석 및 μš”μ•½ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. 컀밋 νžˆμŠ€ν† λ¦¬λ₯Ό λΆ„μ„ν•˜μ—¬ Pull Request μ΄ˆμ•ˆ, λ³€κ²½ 둜그, 컀밋 μš”μ•½μ„ μžλ™ μƒμ„±ν•©λ‹ˆλ‹€.

🌐 λ‹€κ΅­μ–΄ λ¬Έμ„œ

πŸš€ μ£Όμš” κΈ°λŠ₯

  • AI 기반 컀밋 뢄석: OpenAI, Claude, Gemini, Perplexity, DeepSeek 지원
  • PR μ΄ˆμ•ˆ μžλ™ 생성: 컀밋 νžˆμŠ€ν† λ¦¬ 기반 PR ν…œν”Œλ¦Ώ 생성
  • λ‹€κ΅­μ–΄ 지원: ν•œκ΅­μ–΄, μ˜μ–΄, 쀑ꡭ어, 일본어
  • GitHub ν…œν”Œλ¦Ώ 감지: κΈ°μ‘΄ PR ν…œν”Œλ¦Ώ μžλ™ 적용
  • CLI 도ꡬ: λͺ…λ Ήμ€„μ—μ„œ λ°”λ‘œ μ‚¬μš© κ°€λŠ₯

πŸ“¦ μ„€μΉ˜ 방법

Gradle

repositories {
    maven { url = uri("https://jitpack.io") }
}

dependencies {
    // νŠΉμ • 버전 μ‚¬μš©
    implementation("com.github.hj4645:commit-chronicle:1.0.0")
    
    // λ˜λŠ” μ΅œμ‹  버전 μžλ™ μ‚¬μš©
    implementation("com.github.hj4645:commit-chronicle")  // μ΅œμ‹  릴리슀
    // λ˜λŠ”
    implementation("com.github.hj4645:commit-chronicle:latest")  // μ΅œμ‹  릴리슀
}

Maven

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

<dependencies>
    <!-- νŠΉμ • 버전 μ‚¬μš© -->
    <dependency>
        <groupId>com.github.hj4645</groupId>
        <artifactId>commit-chronicle</artifactId>
        <version>1.0.0</version>
    </dependency>
    
    <!-- λ˜λŠ” μ΅œμ‹  버전 μžλ™ μ‚¬μš© -->
    <dependency>
        <groupId>com.github.hj4645</groupId>
        <artifactId>commit-chronicle</artifactId>
        <version>latest</version>  <!-- μ΅œμ‹  릴리슀 -->
    </dependency>
</dependencies>

πŸ› οΈ μ‚¬μš© 방법

1. 라이브러리 μ„€μΉ˜ ν›„ CLI μ‚¬μš©

라이브러리λ₯Ό dependency둜 μΆ”κ°€ν•œ ν›„, aliasλ₯Ό μ„€μ •ν•˜μ—¬ CLI둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸš€ κ°„νŽΈν•œ alias μ„€μ • 방법 (μžλ™ μ΅œμ‹  버전 탐지)

macOS/Linux:

# μžλ™ μ΅œμ‹  버전 탐지 alias (ꢌμž₯) - μƒˆ 버전이 λ‹€μš΄λ‘œλ“œλ˜λ©΄ μžλ™μœΌλ‘œ μ΅œμ‹  버전 μ‚¬μš©
echo "alias cch='java -jar \$(find ~/.gradle/caches -path \"*commit-chronicle*\" -name \"*.jar\" -type f -print0 | xargs -0 ls -t | head -1)'" >> ~/.zshrc && source ~/.zshrc

# λ˜λŠ” λ‹¨κ³„λ³„λ‘œ μ„€μ •
echo 'alias cch="java -jar \$(find ~/.gradle/caches -path \"*commit-chronicle*\" -name \"*.jar\" -type f -print0 | xargs -0 ls -t | head -1)"' >> ~/.zshrc
source ~/.zshrc

Windows (PowerShell):

# JAR 파일 경둜 찾기
$jarPath = Get-ChildItem -Path "$env:USERPROFILE\.gradle\caches" -Recurse -Name "*commit-chronicle*.jar" | Select-Object -First 1
$fullPath = Join-Path "$env:USERPROFILE\.gradle\caches" $jarPath

# alias μ„€μ •
echo "function cch { java -jar `"$fullPath`" @args }" >> $PROFILE
. $PROFILE

μˆ˜λ™ μ„€μ • 방법

JAR 파일 경둜 확인:

# macOS/Linux
find ~/.gradle/caches -name "*commit-chronicle*" -type f | grep "\.jar$"

# Windows (PowerShell)
Get-ChildItem -Path "$env:USERPROFILE\.gradle\caches" -Recurse -Name "*commit-chronicle*.jar"

alias μ„€μ •:

# macOS/Linux
alias cch="java -jar /μ‹€μ œ/jar/파일/경둜/commit-chronicle-1.0.0.jar"

# Windows (PowerShell)
function cch { java -jar "C:\μ‹€μ œ\jar\파일\경둜\commit-chronicle-1.0.0.jar" @args }

2. 초기 μ„€μ •

처음 μ‹€ν–‰ μ‹œ μΈν„°λž™ν‹°λΈŒ 섀정이 μ‹œμž‘λ©λ‹ˆλ‹€:

cch settings

μ„€μ • κ³Όμ •:

  1. μ–Έμ–΄ 선택

    • ν•œκ΅­μ–΄ (Korean)
    • English
    • δΈ­ζ–‡ (Chinese)
    • ζ—₯本θͺž (Japanese)
  2. AI λͺ¨λΈ 선택

    • OpenAI (gpt-4o, gpt-4o-mini, gpt-4-turbo)
    • Claude (claude-3-5-haiku-20241022, claude-3-haiku-20240307, claude-3-5-sonnet-20241022, claude-3-sonnet-20240229, claude-3-7-sonnet-20250219)
    • Gemini (gemini-2.5-pro, gemini-2.0-flash, gemini-2.5-flash)
    • Perplexity (llama-3.1-sonar-large-128k-online, llama-3.1-sonar-small-128k-online)
    • DeepSeek (deepseek-chat, deepseek-coder)
  3. API ν‚€ μž…λ ₯

    • μ„ νƒν•œ AI λͺ¨λΈμ˜ API ν‚€ μž…λ ₯
  4. 뢄석 μ„€μ •

    • κΈ°λ³Έ 뢄석 κΈ°κ°„ (일 λ‹¨μœ„, κΈ°λ³Έκ°’: 7일)
    • μ΅œλŒ€ 컀밋 수 (κΈ°λ³Έκ°’: 50개)

μ„€μ • μ˜ˆμ‹œ:

Update current settings

Select setting to update:
Selected: Language

Select language (current: en):
Selected: ν•œκ΅­μ–΄ (Korean)
Language updated to: ko (AI responses will use this language)

Select setting to update:
Selected: AI Provider

Select AI provider (current: openai):
Selected: OpenAI (API Key βœ“)

Select model for openai (current: gpt-4o):
Selected: GPT-4o (Latest)

API key for openai (current: ***):
Selected: Keep existing API key

Select setting to update:
Selected: Analysis Settings

Enter default days for analysis (current: 7, press Enter to keep current): 14

Enter default commit limit (current: 50, press Enter to keep current): 100
Analysis settings updated - Days: 14, Limit: 100

Select setting to update:
Selected: Done
Configuration saved successfully

3. CLI λͺ…λ Ήμ–΄ μ‚¬μš©

컀밋 μš”μ•½ 생성

# κΈ°λ³Έ μ„€μ • μ‚¬μš© (μ„€μ •λœ κΈ°κ°„κ³Ό 컀밋 수)
cch summarize

# μ˜΅μ…˜ μ§€μ •
cch summarize -d 14 -l 100           # 14일간, μ΅œλŒ€ 100개 컀밋
cch summarize --days 7 --limit 50    # 7일간, μ΅œλŒ€ 50개 컀밋
cch summarize --path /path/to/repo   # νŠΉμ • μ €μž₯μ†Œ 경둜

PR μ΄ˆμ•ˆ 생성

# ν˜„μž¬ 브랜치의 PR μ΄ˆμ•ˆ 생성
cch pr

# μ˜΅μ…˜ μ§€μ •
cch pr -d 7 -l 20                    # 7일간, μ΅œλŒ€ 20개 컀밋
cch pr --path /path/to/repo          # νŠΉμ • μ €μž₯μ†Œ 경둜

μ„€μ • 관리

# μ„€μ • λ³€κ²½ (μΈν„°λž™ν‹°λΈŒ 메뉴)
cch settings

# 도움말 보기
cch settings --help
cch --help

4. ν‚€λ³΄λ“œ λ°©ν–₯ν‚€ μ„€μ • 방법

μ„€μ • λ©”λ‰΄μ—μ„œλŠ” ν‚€λ³΄λ“œ λ°©ν–₯ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ˜΅μ…˜μ„ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€:

  • ↑/↓ ν™”μ‚΄ν‘œ: μ˜΅μ…˜ 선택
  • Enter: 선택 확인
  • Esc: 이전 λ©”λ‰΄λ‘œ λŒμ•„κ°€κΈ°

μ„€μ • 메뉴 ꡬ쑰:

Main Menu
β”œβ”€β”€ Language (μ–Έμ–΄ μ„€μ •)
β”œβ”€β”€ AI Provider (AI λͺ¨λΈ μ„€μ •)
β”‚   β”œβ”€β”€ Provider Selection
β”‚   β”œβ”€β”€ Model Selection  
β”‚   └── API Key Input
β”œβ”€β”€ Analysis Settings (뢄석 μ„€μ •)
β”‚   β”œβ”€β”€ Default Days
β”‚   └── Commit Limit
└── Done (μ™„λ£Œ)

πŸ”§ μ„€μ • 파일

섀정은 ~/.commit-chronicle/config.json에 둜컬 μ €μž₯λ©λ‹ˆλ‹€:

{
  "apiKey": "your-api-key",
  "providerType": "openai",
  "locale": "ko",
  "defaultDays": 7,
  "defaultLimit": 50
}

μ„€μ • 지속성:

  • ν•œ 번 μ„€μ •ν•˜λ©΄ 계속 μœ μ§€λ©λ‹ˆλ‹€
  • λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œλ„ λ™μΌν•œ μ„€μ • μ‚¬μš©
  • ν•„μš”μ‹œ cch settings둜 μ–Έμ œλ“  λ³€κ²½ κ°€λŠ₯

πŸ”§ GitHub ν…œν”Œλ¦Ώ μžλ™ 감지

μ§€μ›ν•˜λŠ” ν…œν”Œλ¦Ώ 경둜

PR ν…œν”Œλ¦Ώ (μš°μ„ μˆœμœ„ 순):

.github/pull_request_template_[locale].md    # λ‹€κ΅­μ–΄ 지원
.github/pull_request_template.md
.github/PULL_REQUEST_TEMPLATE.md
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
docs/pull_request_template.md
docs/PULL_REQUEST_TEMPLATE.md
pull_request_template.md
PULL_REQUEST_TEMPLATE.md

λ‹€κ΅­μ–΄ ν…œν”Œλ¦Ώ μ˜ˆμ‹œ:

  • .github/pull_request_template_ko.md (ν•œκ΅­μ–΄)
  • .github/pull_request_template_en.md (μ˜μ–΄)
  • .github/pull_request_template_zh.md (쀑ꡭ어)
  • .github/pull_request_template_ja.md (일본어)

ν…œν”Œλ¦Ώ 적용 방식

  1. μžλ™ 감지: μœ„ κ²½λ‘œμ—μ„œ ν…œν”Œλ¦Ώ νŒŒμΌμ„ μžλ™μœΌλ‘œ μ°ΎμŠ΅λ‹ˆλ‹€
  2. 언어별 μš°μ„ μˆœμœ„: μ„€μ •λœ 언어에 λ§žλŠ” ν…œν”Œλ¦Ώμ„ μš°μ„  적용
  3. 폴백 처리: ν•΄λ‹Ή μ–Έμ–΄ ν…œν”Œλ¦Ώμ΄ μ—†μœΌλ©΄ κΈ°λ³Έ ν…œν”Œλ¦Ώ μ‚¬μš©
  4. 동적 적용: AIκ°€ ν…œν”Œλ¦Ώ ꡬ쑰에 맞좰 λ‚΄μš©μ„ μžλ™ 생성

πŸ€– μ§€μ›ν•˜λŠ” AI λͺ¨λΈ

ν”„λ‘œλ°”μ΄λ” λͺ¨λΈ
OpenAI gpt-4o, gpt-4o-mini, gpt-4-turbo
Claude claude-3-5-haiku-20241022, claude-3-haiku-20240307, claude-3-5-sonnet-20241022, claude-3-sonnet-20240229, claude-3-7-sonnet-20250219
Gemini gemini-2.5-pro, gemini-2.0-flash, gemini-2.5-flash
Perplexity llama-3.1-sonar-large-128k-online, llama-3.1-sonar-small-128k-online
DeepSeek deepseek-chat, deepseek-coder

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

commit-chronicle/
β”œβ”€β”€ core/
β”‚   β”œβ”€β”€ api/           # μΈν„°νŽ˜μ΄μŠ€μ™€ λͺ¨λΈ
β”‚   └── impl/          # κ΅¬ν˜„μ²΄
β”œβ”€β”€ cli/               # CLI 도ꡬ
└── build.gradle.kts   # λΉŒλ“œ μ„€μ •

🌐 λ‹€κ΅­μ–΄ 지원

  • ν•œκ΅­μ–΄ (ko)
  • English (en)
  • δΈ­ζ–‡ (zh)
  • ζ—₯本θͺž (ja)

πŸ”’ λ³΄μ•ˆ

  • API ν‚€λŠ” μ‚¬μš©μž ν™ˆ 디렉토리에 μ•ˆμ „ν•˜κ²Œ μ €μž₯
  • JAR νŒŒμΌμ— λ―Όκ°ν•œ 정보 ν¬ν•¨λ˜μ§€ μ•ŠμŒ
  • μ‚¬μš©μžλ³„ 독립적인 μ„€μ • 관리

πŸ“„ λΌμ΄μ„ΌμŠ€

MIT License

🀝 κΈ°μ—¬

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ž 지원

About

πŸš€ AI-powered Git commit analysis tool with PR generation, changelog creation, and GitHub template support

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages