๐ŸŒ AIๆœ็ดข & ไปฃ็† ไธป้กต
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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

72 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

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