در مسیر یادگیری هوش مصنوعی و برنامهنویسی، پروژهها به سرعت از یک فایل ساده به صدها اسکریپت، آزمایش و چکپوینت تبدیل میشوند. اگر از همان نقطهٔ آغاز ابزاری برای ردیابی این تغییرات نداشته باشید، یک ویرایش اشتباه میتواند ساعتها تلاش را از بین ببرد. استفاده از سیستمهای کنترل نسخه دقیقاً این مشکل را حل میکند و اجازه میدهد روند توسعه را بدون استرس خرابشدن فایلها پیش ببرید.
در این درس نیازی به درگیر شدن با مفاهیم پیچیده و پیشرفتهٔ Git ندارید؛ هدف تسلط بر جریان کاری روزمره است تا بتوانید تغییرات را ثبت کنید، ایدههای جدید را روی شاخههای جداگانه بیازمایید و پروژهتان را روی مخزن اختصاصی در GitHub همگام نگه دارید.
سیستم کنترل نسخه (Version Control) اختیاری نیست. تکتک آزمایشها، مدلها و درسهایی که در اینجا میسازید ردیابی و ثبت میشوند.
اهداف یادگیری
- پیکربندی هویت در Git و بهکارگیری جریان کاری روزمرهی add، commit و push
- ساخت و merge کردن branchها برای انجام آزمایشهای ایزوله بدون دستخوردن main
- نوشتن فایل
.gitignoreبرای نادیده گرفتن چکپوینتهای مدل و فایلهای باینری حجیم - مرور تاریخچهی commitها با
git logبرای درک روند تکامل پروژه
صورتمسئله
قرار است در طول 20 فاز، صدها فایل کد بنویسید. بدون سیستم کنترل نسخه، کارهایتان از دست میرود، تغییراتی ایجاد میکنید که امکان بازگشت از آنها را ندارید و هیچ راهی هم برای همکاری با دیگران نخواهید داشت.
ابزار کار Git است و کدها روی GitHub نگهداری میشوند. این درس دقیقاً همان مواردی را پوشش میدهد که برای این دوره نیاز دارید، نه چیزی بیشتر.
مفاهیم پایه
سه نکتهی کلیدی که باید به خاطر بسپارید:
- مرتب ذخیره کنید (
git commit) - تغییرات را روی سرور بفرستید (
git push) - برای آزمایشها branch بسازید (
git checkout -b experiment)
پیادهسازی گامبهگام
گام 1: پیکربندی Git
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
گام 2: جریان کاری روزمره
git status
git add file.py
git commit -m "Add perceptron implementation"
git push origin main
گام 3: ساخت branch برای آزمایشها
git checkout -b experiment/new-optimizer
# ... اعمال تغییرات، commit ...
git checkout main
git merge experiment/new-optimizer
گام 4: کار با مخزن این دوره
امکان push مستقیم روی مخزن اصلی این دوره را ندارید؛ فقط نگهدارندگان دسترسی نوشتن دارند. ابتدا آن را در GitHub (با دکمهی Fork در بالا سمت راست) fork کنید تا origin به نسخهی اختصاصی خودتان اشاره کند:
git clone https://github.com/YOUR-USERNAME/ai-engineering-from-scratch.git
cd ai-engineering-from-scratch
git checkout -b my-progress
# درسها را پیش ببرید، کدهای خود را commit کنید
git push origin my-progress
استفاده در عمل
برای این دوره، دقیقاً به همین دستورها نیاز دارید:
| دستور | چه زمانی |
|---|---|
git clone |
دریافت مخزن دوره |
git add + git commit |
ذخیرهی کار |
git push |
پشتیبانگیری روی GitHub |
git checkout -b |
آزمودن ایدهها بدون دستخوردن main |
git log --oneline |
مرور کارهای انجامشده |
همین و بس. برای این دوره نیازی به rebase، cherry-pick یا submoduleها ندارید.
تمرینها
- این مخزن را fork کنید، نسخهی fork خودتان را clone کنید، یک branch به نام
my-progressبسازید، فایلی ایجاد کنید، آن را commit کنید و سپس push کنید. - یک فایل
.gitignoreبسازید که فایلهای چکپوینت مدل (.pt،.pth،.safetensors) را نادیده بگیرد. - تاریخچهی commitهای این مخزن را با
git log --onelineمرور کنید و نحوه اضافه شدن درسها را بخوانید.
راهنماییها
تمرین 1. در GitHub روی Fork کلیک کنید، سپس URL مربوط به fork اختصاصی خودتان را git clone کنید. پس از اجرای git push -u origin my-progress، صفحهی fork خود را در GitHub باز کنید و مطمئن شوید در فهرست branchها، my-progress همراه با فایل جدیدتان دیده میشود.
تمرین 2. برای هر پسوند یک الگو، مثل *.pt، درون فایل .gitignore در ریشهی مخزن قرار دهید. با هر پسوند یک فایل خالی بسازید و git status را اجرا کنید؛ هیچکدام نباید در فهرست فایلهای untracked ظاهر شوند.
تمرین 3. ابتدا دستور git log --oneline و سپس دستور git log --oneline -- phases/00-setup-and-tooling را اجرا کنید تا فقط commitهایی نمایش داده شوند که این فاز را تغییر دادهاند. یکی از commitها را انتخاب کنید و با اجرای git show --stat <hash> ببینید چه فایلهایی از درسها را اضافه کرده است.
اصطلاحات کلیدی
| اصطلاح | در گفتوگوهای عامیانه | معنای دقیق فنی |
|---|---|---|
| Commit | «ذخیره کردن» | یک تصویر لحظهای (Snapshot) از کل پروژه در نقطهای مشخص از زمان |
| Branch | «یک کپی» | اشارهگری به یک commit که با جلو رفتن کار شما به جلو حرکت میکند |
| Merge | «ترکیب کد» | گرفتن تغییرات از یک branch و اعمال آنها روی یک branch دیگر |
| Remote | «فضای ابری» | نسخهای از مخزن شما که در جای دیگری (مثل GitHub یا GitLab) میزبانی میشود |
