Zurück zur Übersicht

Wissen, 12. Februar 2025

AI-Commit: KI-generierte Commit-Messages

KI greift in immer mehr Gebiete ein, und es gibt sicherlich auch kritische Stimmen zu diesen Gebieten, aber gut ist die KI bei Aufgaben, die leicht sind, aber doch den meisten Menschen schwerfallen. Hier betrachte ich solch einen Fall.

Das Hilfstool AI-Commit

Eine kleine Sache, die in der Entwicklung ständig vorkommt, ist das Kommentieren der Commits. Commit-Messages sollen erklären, was die Quintessenz des Commits ist, also was soll der nächste Entwickler erfahren, um den Commit einzuschätzen. Vielleicht weil sich ein Fehler eingeschlichen hat und man erfahren möchte, wann es ungefähr passiert sein könnte. Dann nutzt man die Commit-Message, anderenfalls interessiert sie nicht. 

Trotzdem fällt es vielen Entwicklern schwer eine gute, aussagekräftige Commit-Message zu verfassen. Hier greift AI-Commit ein. Es wird ein Vorschlag generiert, den der Entwickler nur noch bestätigen muss. So kann man eventuell noch Änderungen herbeiführen, aber es ist eben einfacher einen bestehenden Text zu ändern, als einen ganz neuen zu erschaffen.

AI-Commit ist in JavaScript geschrieben und baut auf node.js auf. Ansonsten benutzt es Git, d. h. es wird das Git-Kommando commit mit dem Vorschlag aus der KI aufgerufen.

Welche KI?

Die erste Version von AI-Commit baute auf Open-AI auf. Da diese aber nicht frei verfügbar ist, und jeder Aufruf bezahlt werden muss, wurde eine weitere Version entwickelt, die auf Ollama [1] basiert.

Es ist leicht AI-Commit mit weiteren KIs zu verbinden, so dass AI-Commit die für das Unternehmen richtige KI verwendet.

AI-Commit mit Branch-Name

Innerhalb von AI-Commit wird die Anfrage an die KI generiert (siehe Code-Block unten).  Dabei kann die Sprache mittels „language“ geändert werden, so dass die AI-Commit auch andere Sprachen als Englisch als Commit-Message vorschlagen kann.

return (
  `Write a professional git commit message based on the diff below in ${language} language` (commitType ? ` with commit type '${commitType}'. ` : ". ") +
  "Do not preface the commit with anything, use the present tense, return the full sentence, and use the conventional commits specification (<type in lowercase>: <subject>)" +
  `${customMessageConvention ? `. Additionally apply these JSON formatted rules to your response, even though they might be against previous mentioned rules ${customMessageConvention}: ` : ': '}` +
  '\n\n' +
  diff
);

Viele Entwickler stellen ihren Commit-Messages das Jira-Ticket voran. Da das Jira-Ticket in vielen Firmen auch als Name des Git-Branches fungiert, muss der obige Text nur leicht angepasst werden, damit der Branch-Name als Teil der Commit-Message erscheint. Hierzu muss man den Satz

Do not preface the commit with anything

durch folgenden ersetzen:

Preface the commit with branch name

Es könnten auch weitere Wünsche in die KI-Abfrage eingepflegt werden, so dass sie zur Firmenphilosophie passt.

Derivate von AI-Commit

Der Einsatz von KI bei AI-Commit ist nur ein kleiner Teil der Möglichkeiten, schließlich hat unterdessen auch IntelliJ ein KI-Plugin. Es scheint, dass es nun immer mehr Einsatzgebiete geben wird. Auch ist bei Git meiner Meinung das Ende noch nicht erreicht. Es gibt noch weitere interessante Anwendungsbeispiele.

 Hier will ich noch einen Gedanken anhängen, der vielleicht auch bald Einzug hält in unser Entwicklerleben.

In den meisten Firmen werden auch jetzt schon Tools (wie Sonar) benutzt, um die Code-Qualität zu beurteilen, dass könnte man gut mit der modernen KI verbinden.

Sonar wird aufgerufen, wenn man versucht, einen Commit ins Git zu schieben. Ist Sonar nicht glücklich, gibt es eine Warnung und man wird gefragt, ob man nicht erst noch die Sonar-Warnungen beheben möchte. Aus dieser Perspektive könnte man auch noch weitere Dinge mit KI untersuchen und dem Entwickler eine Warnung geben, bevor er den Commit absendet.

Man könnte z. B. fragen, ob der Code gut genug dokumentiert ist. Und die KI würde dann ihre Einschätzung generieren.

Nun ist in den meisten Firmen das Dokumentieren verbannt worden, ganz nach den Prinzipien des modernen Entwickelns. Der Code soll sich selbst dokumentieren. Trotzdem gibt es einige Fälle, wo eine Dokumentation erwünscht ist. Z. B. die Swagger-Dokumentation an REST-Schnittstellen. Interessanterweise wird das leider oft nicht mit angepasst, wenn die REST-Schnittstelle ergänzt wird. Hier wäre ein guter Einsatz von einem Swagger-AI-Commit, das überprüft, ob es eine Swagger-Dokumentation gibt und ob sie vollständig ist.

Dazu müsste man nur analog zu Sonar vor dem Commit den Code überprüfen lassen.

 Linksammlung 

 

Autor:

Dietmar Schulze
Software-Entwickler
  • Java JEE, Java Spring

  • Software-Architekt

  • Backend-Spezialist

Auch spannend