قتل الأعرج يرتكب مع الذكاء الاصطناعي ؟؟
جميع الالتزامات في هذا الريبو من تأليف OpenCommit - انظر إلى الالتزامات لترى كيف يعمل OpenCommit. الرموز التعبيرية وأوصاف الالتزام الطويلة قابلة للتكوين، وكل شيء قابل للتكوين بشكل أساسي.
يمكنك استخدام OpenCommit ببساطة عن طريق تشغيله عبر واجهة سطر الأوامر (CLI) مثل هذا oco
. ثانيتان وستكون التغييرات المرحلية ملتزمة برسالة ذات معنى.
قم بتثبيت OpenCommit عالميًا لاستخدامه في أي مستودع:
npm install -g opencommit
احصل على مفتاح API الخاص بك من OpenAI أو موفري LLM المدعومين الآخرين (نحن ندعمهم جميعًا). تأكد من إضافة تفاصيل دفع OpenAI إلى حسابك، حتى تعمل واجهة برمجة التطبيقات.
اضبط المفتاح على تكوين 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 لنقطة النهاية، حيث قمت بإعداد ollama.
هناك العديد من العلامات الاختيارية التي يمكن استخدامها مع الأمر 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
.
لجعل هذا الأداء دقيقًا، يجب علينا تخزين "ما تفعله الملفات" في نوع ما من الفهرس أو التضمين وإجراء بحث (kinda 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.
يوفر لك هذا تحكمًا أكبر في رسائل الالتزام التي تم إنشاؤها، مما يسمح بالتخصيص الذي يتماشى مع اتفاقيات مشروعك.
يمكن استخدام الأمر opencommit
أو oco
بدلاً من الأمر git commit -m "${generatedMessage}"
. هذا يعني أن أي إشارات عادية تُستخدم مع أمر 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 الملفات المطابقة: *-lock.*
و *.lock
يمكنك تعيين OpenCommit كخطاف Git prepare-commit-msg
. يتكامل الخطاف مع التحكم في مصدر 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 التفاعلي ( rebase -i
) SHA الخاص بالالتزامات، لذلك يصبح سجل الالتزام في جهاز التحكم عن بعد مختلفًا عن سجل الفرع المحلي لديك. لا بأس بذلك إذا كنت تعمل في الفرع بمفردك، ولكنه قد يكون غير مناسب للمتعاونين الآخرين.
أنت تدفع مقابل طلباتك إلى OpenAI API بنفسك.
يقوم OpenCommit بتخزين مفتاحك محليًا.
يستخدم OpenCommit بشكل افتراضي نموذج 3.5 توربو، ويجب ألا يتجاوز 0.10 دولارًا لكل يوم عمل غير رسمي.
يمكنك التبديل إلى gpt-4 فهو أفضل ولكنه أكثر تكلفة.