Tech
August 11, 2024

Как зарядить git commit с помощью ИИ ?

Коротко о том, как можно генерировать простые commit messages с использованием локальной модели AI.

1. Установите зависимости

Мы не будем подробно останавливаться на этом пункте. Мы будем использовать Ollama и устанавливается она очень просто, я писал об этом здесь

И так, устанавливаем:

  • Ollama.app
  • git
  • jq

2. Создаём файл Modelfile

   FROM llama3.1
   PARAMETER temperature 1
   SYSTEM """
   Analyze the following git diff and generate a commit message.
   """

3. Создаём локальную модель gitdiff

ollama create gitdiff -f Modelfile

4. Создаём файл git-aicommit

#!/bin/bash

diff=$(git diff --cached | cat)
if [ -z "$diff" ]; then
	echo "No staged changes to commit."
	exit 1
fi

escaped_diff=$(echo "$diff" | jq -Rsa .)

data=$(jq -n --arg diff "$escaped_diff" '{
	"model": "gitdiff",
	"stream": false,
	"prompt": ("" + $diff)
}')

response=$(curl -s -X POST http://localhost:11434/api/generate -d "$data" -H "Content-Type: application/json")

commit_message=$(echo "$response" | jq -r '.response')

echo "$commit_message" > .git/COMMIT_EDITMSG

git commit -eF .git/COMMIT_EDITMSG

5. Разместите git-aicommit

Выберите директорию которую система использует для поиска исполняемых файлов. Если нужно можете получить список таких директорий так:

echo $PATH

Допустим мы выбрали ~/bin/, сделаем файл git-aicommit исполняемым

chmod +x ~/bin/git-aicommit

6. Запуск

Комманду git commit обычно выполняют после git add. В нашем случае нет исключения. Добавляем файлы под контроль и заодно сразу смотрим git status

git add . && git status

Используем наш git-aicommit

git aicommit

Откроется редактор по умолчанию для редактирования сообщения, в нашем случае это `vim`.

Вводим :wq! по классике и commit фиксируется

Проверяем

git log

✅ Готово