Убивать хромых коммитов с помощью ИИ??
Все коммиты в этом репозитории созданы OpenCommit — посмотрите коммиты, чтобы узнать, как работает OpenCommit. Смайлики и длинные описания коммитов настраиваются, да и вообще всё.
Вы можете использовать OpenCommit, просто запустив его через CLI, как показано здесь oco
. 2 секунды, и ваши поэтапные изменения будут зафиксированы со значимым сообщением.
Установите OpenCommit глобально для использования в любом репозитории:
npm install -g opencommit
Получите ключ API от OpenAI или других поддерживаемых поставщиков LLM (мы поддерживаем их всех). Обязательно добавьте платежные реквизиты OpenAI в свою учетную запись, чтобы API работал.
Установите ключ для конфигурации OpenCommit:
oco config set OCO_API_KEY= < your_api_key >
Ваш ключ API хранится локально в файле конфигурации ~/.opencommit
.
Вы можете вызвать OpenCommit с помощью команды oco
, чтобы сгенерировать сообщение о фиксации для ваших поэтапных изменений:
git add < files... >
oco
Запускать git add
необязательно, oco
сделает это за вас.
Вы также можете запустить его с локальной моделью через ollama:
ollama run mistral
(сделайте это только один раз, чтобы вытащить модель)git add < files... >
oco config set OCO_AI_PROVIDER= ' ollama ' OCO_MODEL= ' llama3:8b '
Базовая модель - mistral
.
Если у вас есть ollama, настроенная в docker/ на другом компьютере с графическими процессорами (не локально), вы можете изменить URL-адрес конечной точки по умолчанию.
Вы можете сделать это, установив переменную среды OCO_API_URL
следующим образом:
oco config set OCO_API_URL= ' http://192.168.1.10:11434/api/chat '
где 192.168.1.10 — это пример URL-адреса конечной точки, где у вас настроена оллама.
С командой oco
можно использовать несколько дополнительных флагов:
Ссылка на спецификацию GitMoji: https://gitmoji.dev/
Этот флаг можно использовать только в том случае, если для элемента конфигурации OCO_EMOJI
установлено значение true
. Этот флаг позволяет пользователям использовать все смайлы из спецификации GitMoji. По умолчанию для полной спецификации GitMoji установлено значение false
, которое включает только 10 смайлов (? ✅♻️⬆️?).
Это связано с ограничением количества токенов, отправляемых в каждом запросе. Однако, если вы хотите использовать полную спецификацию GitMoji, вы можете использовать флаг --fgm
.
oco --fgm
Этот флаг позволяет пользователям автоматически фиксировать изменения без необходимости вручную подтверждать сообщение о фиксации. Это полезно для пользователей, которые хотят упростить процесс фиксации и избежать дополнительных шагов. Чтобы использовать этот флаг, вы можете запустить следующую команду:
oco --yes
Создайте файл .env
и добавьте туда переменные конфигурации OpenCommit следующим образом:
...
OCO_AI_PROVIDER = <openai (default), anthropic, azure, ollama, gemini, flowise>
OCO_API_KEY = <your OpenAI API token> // or other LLM provider API token
OCO_API_URL = <may be used to set proxy path to OpenAI api>
OCO_TOKENS_MAX_INPUT = <max model token limit (default: 4096)>
OCO_TOKENS_MAX_OUTPUT = <max response tokens (default: 500)>
OCO_DESCRIPTION = <postface a message with ~3 sentences description of the changes>
OCO_EMOJI = <boolean, add GitMoji>
OCO_MODEL = <either 'gpt-4o', 'gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo' (default), 'gpt-3.5-turbo-0125', 'gpt-4-1106-preview', 'gpt-4-turbo-preview' or 'gpt-4-0125-preview' or any Anthropic or Ollama model or any string basically, but it should be a valid model name>
OCO_LANGUAGE = <locale, scroll to the bottom to see options>
OCO_MESSAGE_TEMPLATE_PLACEHOLDER = <message template placeholder, default: ' $msg '>
OCO_PROMPT_MODULE = <either conventional-commit or @commitlint, default: conventional-commit>
OCO_ONE_LINE_COMMIT = <one line commit message, default: false>
Глобальные конфигурации аналогичны локальным, но они хранятся в глобальном файле конфигурации ~/.opencommit
и устанавливаются с помощью команды oco config set
, например oco config set OCO_MODEL=gpt-4o
.
Локальная конфигурация по-прежнему имеет больший приоритет, чем глобальная конфигурация, но вы можете установить OCO_MODEL
и OCO_LOCALE
глобально и установить локальные конфигурации для OCO_EMOJI
и OCO_DESCRIPTION
для каждого репозитория, что более удобно.
Просто установите любую из перечисленных выше переменных следующим образом:
oco config set OCO_MODEL=gpt-4o-mini
Настройте GitMoji для добавления предисловия к сообщению.
oco config set OCO_EMOJI=true
Чтобы удалить предисловие смайлов:
oco config set OCO_EMOJI=false
Другие параметры конфигурации ведут себя так же.
Вы можете установить для конфигурации OCO_WHY
значение true
, чтобы OpenCommit выдавал краткое описание ПОЧЕМУ изменения были сделаны после сообщения о фиксации. По умолчанию — false
.
Чтобы это работало точно, мы должны хранить «что делают файлы» в каком-то индексе или внедрении и выполнять поиск (что-то вроде RAG) для точного сообщения о фиксации git. Если вам хочется оставить этот комментарий к этому билету № 398, давайте вместе продолжим.
oco config set OCO_WHY=true
По умолчанию OpenCommit использует модель gpt-4o-mini
.
Вы можете перейти на gpt-4o, который работает лучше, но стоит дороже?
oco config set OCO_MODEL=gpt-4o
или как более дешевый вариант:
oco config set OCO_MODEL=gpt-3.5-turbo
По умолчанию OpenCommit использует OpenAI.
Вы можете переключиться на службу Azure OpenAI, Flowise или Ollama.
oco config set OCO_AI_PROVIDER=azure OCO_API_KEY= < your_azure_api_key > OCO_API_URL= < your_azure_endpoint >
oco config set OCO_AI_PROVIDER=flowise OCO_API_KEY= < your_flowise_api_key > OCO_API_URL= < your_flowise_endpoint >
oco config set OCO_AI_PROVIDER=ollama OCO_API_KEY= < your_ollama_api_key > OCO_API_URL= < your_ollama_endpoint >
Чтобы глобально указать язык, используемый для генерации сообщений о фиксации:
# de, German, Deutsch
oco config set OCO_LANGUAGE=de
oco config set OCO_LANGUAGE=German
oco config set OCO_LANGUAGE=Deutsch
# fr, French, française
oco config set OCO_LANGUAGE=fr
oco config set OCO_LANGUAGE=French
oco config set OCO_LANGUAGE=française
Язык по умолчанию — английский. Все доступные языки в настоящее время перечислены в папке i18n.
Запрос на отправку в git включен по умолчанию, но если вы хотите отключить его, просто используйте:
oco config set OCO_GITPUSH=false
и он выйдет сразу после подтверждения фиксации, не спрашивая, хотите ли вы отправить его на удаленный компьютер.
@commitlint
OpenCommit позволяет вам выбрать модуль приглашения, используемый для генерации сообщений о фиксации. По умолчанию OpenCommit использует генератор сообщений обычной фиксации. Однако при желании вы можете переключиться на использование модуля приглашения @commitlint
. Эта опция позволяет генерировать сообщения о фиксации в соответствии с локальной конфигурацией.
Вы можете установить эту опцию, выполнив следующую команду:
oco config set OCO_PROMPT_MODULE= < module >
Замените <module>
на conventional-commit
или @commitlint
.
Чтобы переключиться на использование модуля приглашения '@commitlint
, запустите:
oco config set OCO_PROMPT_MODULE=@commitlint
Чтобы вернуться к генератору сообщений обычной фиксации по умолчанию, запустите:
oco config set OCO_PROMPT_MODULE=conventional-commit
@commitlint
Интеграция между @commitlint
и OpenCommit выполняется автоматически при первом запуске OpenCommit с OCO_PROMPT_MODULE
, установленным в @commitlint
. Однако если вам нужно принудительно установить или сбросить конфигурацию @commitlint
, вы можете запустить следующую команду:
oco commitlint force
Чтобы просмотреть сгенерированную конфигурацию @commitlint
, вы можете использовать эту команду:
oco commitlint get
Это позволит вам убедиться в том, что конфигурация настроена по желанию.
Кроме того, при интеграции создается файл с именем .opencommit-commitlint
, который содержит запросы, используемые для локальной конфигурации @commitlint
. Вы можете изменить этот файл, чтобы уточнить пример сообщения о фиксации, сгенерированного OpenAI. Это дает вам возможность вносить коррективы в соответствии с вашими предпочтениями или рекомендациями проекта.
OpenCommit создает файл с именем .opencommit-commitlint
в каталоге вашего проекта, который содержит запросы, используемые для локальной конфигурации @commitlint
. Вы можете изменить этот файл, чтобы уточнить пример сообщения о фиксации, сгенерированного OpenAI. Если локальная конфигурация @commitlint
изменится, этот файл будет обновлен при следующем запуске OpenCommit.
Это дает вам больший контроль над сгенерированными сообщениями о фиксации, позволяя настраивать их в соответствии с соглашениями вашего проекта.
Вместо команды git commit -m "${generatedMessage}"
можно использовать команды opencommit
или oco
. Это означает, что любые обычные флаги, используемые с командой git commit
также будут применяться при использовании opencommit
или oco
.
oco --no-verify
переводится на:
git commit -m " ${generatedMessage} " --no-verify
Чтобы включить сообщение в сгенерированное сообщение, вы можете использовать функцию шаблона, например:
oco ' #205: $msg’
opencommit проверяет заполнители в параметрах, позволяя вам добавлять дополнительную информацию до и после заполнителей, например соответствующую проблему или запрос на включение. Аналогичным образом у вас есть возможность настроить элемент конфигурации OCO_MESSAGE_TEMPLATE_PLACEHOLDER, например, упростив его до $m!"
Функция OCO_MESSAGE_TEMPLATE_PLACEHOLDER
в инструменте opencommit
позволяет пользователям встраивать собственное сообщение в сгенерированное сообщение о фиксации с помощью функции шаблона. Эта конфигурация предназначена для повышения гибкости и настраиваемости сообщений о фиксации, упрощая пользователям включение соответствующей информации непосредственно в свои фиксации.
В нашей кодовой базе реализацию этой функции можно найти в следующем сегменте:
commitMessage = messageTemplate . replace (
config . OCO_MESSAGE_TEMPLATE_PLACEHOLDER ,
commitMessage
) ;
Эта строка отвечает за замену заполнителя в messageTemplate
фактическим commitMessage
.
Например, используя команду oco '$msg #205'
, пользователи могут использовать эту функцию. Предоставленный код представляет собой серверную механику таких команд, гарантируя, что заполнитель будет заменен соответствующим сообщением фиксации.
После того как пользователи сгенерировали желаемое сообщение о фиксации, они могут приступить к фиксации, используя сгенерированное сообщение. Понимая весь потенциал этой функции и детали ее реализации, пользователи могут с уверенностью использовать сгенерированные сообщения для своих коммитов.
Вы можете запретить отправку файлов в OpenAI, создав файл .opencommitignore
. Например:
path/to/large-asset.zip
**/*.jpg
Это помогает предотвратить загрузку артефактов и больших файлов opencommit.
По умолчанию opencommit игнорирует совпадения файлов: *-lock.*
и *.lock
Вы можете установить OpenCommit как перехватчик Git prepare-commit-msg
. Hook интегрируется с вашей системой управления версиями IDE и позволяет редактировать сообщение перед его фиксацией.
Чтобы установить крючок:
oco hook set
Чтобы отключить крючок:
oco hook unset
Чтобы использовать крючок:
git add < files... >
git commit
Или следуйте процессу вашей функции управления исходным кодом IDE, когда она вызывает команду git commit
— OpenCommit интегрируется в поток.
OpenCommit теперь доступен как действие GitHub, которое автоматически улучшает все новые сообщения о коммитах при удаленной отправке!
Это здорово, если вы хотите убедиться, что все коммиты во всех ветках вашего репозитория осмысленны, а не банальны, как fix1
или done2
.
Создайте файл .github/workflows/opencommit.yml
со следующим содержимым:
name : ' OpenCommit Action '
on :
push :
# this list of branches is often enough,
# but you may still ignore other public branches
branches-ignore : [main master dev development release]
jobs :
opencommit :
timeout-minutes : 10
name : OpenCommit
runs-on : ubuntu-latest
permissions : write-all
steps :
- name : Setup Node.js Environment
uses : actions/setup-node@v2
with :
node-version : ' 16 '
- uses : actions/checkout@v3
with :
fetch-depth : 0
- uses : di-sukharev/[email protected]
with :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
env :
# set openAI api key in repo actions secrets,
# for openAI keys go to: https://platform.openai.com/account/api-keys
# for repo secret go to: <your_repo_url>/settings/secrets/actions
OCO_API_KEY : ${{ secrets.OCO_API_KEY }}
# customization
OCO_TOKENS_MAX_INPUT : 4096
OCO_TOKENS_MAX_OUTPUT : 500
OCO_OPENAI_BASE_PATH : ' '
OCO_DESCRIPTION : false
OCO_EMOJI : false
OCO_MODEL : gpt-4o
OCO_LANGUAGE : en
OCO_PROMPT_MODULE : conventional-commit
Вот и все. Теперь, когда вы переходите к любой ветке вашего репозитория — все НОВЫЕ коммиты улучшаются вашим неутомимым ИИ.
Убедитесь, что вы исключили ветки публичного сотрудничества ( main
, dev
etc
) в branches-ignore
, чтобы OpenCommit не переустанавливал там коммиты при улучшении сообщений.
Интерактивная перезагрузка ( rebase -i
) изменяет SHA коммитов, поэтому история коммитов в удаленном режиме становится отличной от истории вашей локальной ветки. Это нормально, если вы работаете над веткой в одиночку, но может быть неудобно для других сотрудников.
Вы оплачиваете свои запросы к OpenAI API самостоятельно.
OpenCommit хранит ваш ключ локально.
OpenCommit по умолчанию использует модель 3,5-турбо, она не должна превышать 0,10 доллара за обычный рабочий день.
Можно перейти на gpt-4, это лучше, но дороже.