>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
JavaScript

Generowanie znaczących wiadomości commit z diffów za pomocą OpenCommit

OpenCommit logo

Wszyscy to znamy: koniec dnia pracy, tuzin zmian w pięciu różnych plikach, zmęczenie się nakłada i jeszcze jedno arcydzieło typu git commit -m "fix", wip 2 lub refactor trafia do historii repozytorium. Potem kilka miesięcy później otwierasz git log próbując zrozumieć, dlaczego autoryzacja przestała działać, a widzisz tylko ścianę jednolinijkowych commitów.

Autor OpenCommit postanowił zautomatyzować tę rutynę. Projekt pobiera twoje staged changes (staged changes), analizuje diff kodu za pomocą modelu językowego i tworzy właściwy, jasny opis zgodny ze standardem Conventional Commits.

OpenCommit example

Jak to działa w praktyce

Narzędzie instaluje się jako globalny pakiet CLI przez npm. Wprowadzasz zmiany w projekcie i zamiast zwykłego polecenia commit wywołujesz oco:

npm install -g opencommit

Następnie musisz ustawić klucz API. Domyślnie narzędzie jest skonfigurowane dla modeli OpenAI (na przykład gpt-4o-mini):

oco config set OCO_API_KEY=sk-...

Po tym proces upraszcza się do maksimum. Wprowadzasz zmiany w plikach i uruchamiasz:

git add .
oco

Polecenie oco samo wywoła model, przekaże diff zmian i zasugeruje gotowy tekst. Jeśli wszystko wygląda dobrze, naciskasz Enter i commit zostaje utworzony. Jeśli chcesz pominąć ręczne potwierdzenie, jest flaga oco --yes.

Praca bez wysyłania kodu do chmury

Wielu programistów nie może wysyłać kodu źródłowego na serwery stron trzecich ze względu na wymagania bezpieczeństwa lub polityki korporacyjne. OpenCommit ma integrację z lokalnymi runnerami do tego.

Narzędzie może komunikować się z Ollama i llama.cpp. Do pracy lokalnej wystarczy uruchomić Ollama z wymaganym modelem (na przykład Llama 3 lub Mistral) i przełączyć konfigurację:

oco config set OCO_AI_PROVIDER='ollama' OCO_MODEL='llama3:8b'

Jeśli serwer GPU znajduje się na osobnej maszynie w sieci lokalnej, wystarczy podać adres endpoint:

oco config set OCO_API_URL='http://192.168.1.10:11434/api/chat'

Ten sam schemat działa dla llama.cpp poprzez uruchomienie wbudowanego serwera HTTP llama-server.

Konfiguracja pod standardy zespołu

OpenCommit ma kilka przydatnych ustawień, które sprawiają, że generowane wiadomości są odpowiednie dla prawdziwego rozwoju zespołowego.

Conventional Commits i commitlint

Out of the box narzędzie generuje wiadomości w formacie Conventional Commits (feat: ..., fix: ..., chore: ...). Jeśli twoje repozytorium ma już skonfigurowany @commitlint, możesz przełączyć narzędzie na używanie lokalnych reguł lint:

oco config set OCO_PROMPT_MODULE=@commitlint

Przy pierwszym uruchomieniu polecenie utworzy lokalny plik .opencommit-commitlint, z którego model pobierze przykłady i ograniczenia do generowania tekstu.

Ignorowanie zbędnych plików

Wysyłanie tysięcy linii zmienionych plików lock do prompta jest bezcelowe i kosztowne pod względem tokenów. Pliki *.lock i *-lock.* są wykluczane automatycznie, a dla innych możesz utworzyć .opencommitignore:

path/to/large-asset.zip **/*.jpg dist/**

Szablony z numerami ticketów

Często trzeba dołączyć numer zadania z Jiry lub GitHub Issues na początku wiadomości. Do tego jest obsługa szablonów przez placeholder $msg:

oco '#1042: $msg'

Narzędzie podstawi wygenerowany opis w miejsce $msg, pozostawiając prefiks zadania bez zmian.

Integracja z Git Hook

Najwygodniejszym sposobem pracy z OpenCommit jest podpięcie go pod hook prepare-commit-msg. Wtedy nie będziesz nawet musiał pamiętać o poleceniu oco.

Hook włącza się za pomocą:

oco hook set

Teraz gdy wywołujesz git commit (lub naciskasz przycisk commit w interfejsie VS Code / WebStorm), OpenCommit automatycznie wygeneruje tekst i wstawi go do okna wprowadzania w edytorze. Będziesz mógł od razu dostosować sformułowanie, jeśli model pominął ważny szczegół.

Niuansy i ograniczenia

Przy korzystaniu z narzędzia trzeba pamiętać o kilku rzeczach:

  1. Rozmiar diffa. Jeśli zmieniłeś setki plików na raz, żądanie może przekroczyć limit kontekstu modelu lub wygenerować zbyt ogólny opis. OpenCommit działa najlepiej z małymi, atomowymi commitami.
  2. GitHub Action. Repozytorium ma gotową akcję do automatycznego naprawiania commitów przy pushu do branch. Musisz być ostrożny: akcja wykonuje interaktywny rebase, przepisując SHA commitów. Ten scenariusz nie może być używany dla współdzielonych branchy (main, dev).

Kto znajdzie to przydatne

OpenCommit rozwiązuje problem niechlujnego zarządzania historią commitów w projektach hobbystycznych i małych zespołach. Jeśli jesteś zbyt leniwy, żeby ręcznie formatować commity zgodnie z wytycznymi, narzędzie oszczędza masę czasu.

Najłatwiejszym sposobem na rozpoczęcie jest globalna instalacja i lokalny Ollama: w ten sposób możesz od razu przetestować jakość generowania na swoich repozytoriach bez wydawania na tokeny.

Powiązane projekty