فاز 0 · درس 2

آموزش Git و همکاری تیمی در پروژه‌های یادگیری ماشین

نوع
مفهومی
زمان
حدود 30 دقیقه
زبان‌ها
--
یک طناب ضخیم چندلایه که به شاخه‌های مختلف تقسیم شده و در گره‌هایی منظم به یکدیگر متصل می‌شوند
فهرست مطالب
  1. اهداف یادگیری
  2. صورت‌مسئله
  3. مفاهیم پایه
  4. پیاده‌سازی گام‌به‌گام
  5. گام 1: پیکربندی Git
  6. گام 2: جریان کاری روزمره
  7. گام 3: ساخت branch برای آزمایش‌ها
  8. گام 4: کار با مخزن این دوره
  9. استفاده در عمل
  10. تمرین‌ها
  11. راهنمایی‌ها
  12. اصطلاحات کلیدی

در مسیر یادگیری هوش مصنوعی و برنامه‌نویسی، پروژه‌ها به سرعت از یک فایل ساده به صدها اسکریپت، آزمایش و چک‌پوینت تبدیل می‌شوند. اگر از همان نقطهٔ آغاز ابزاری برای ردیابی این تغییرات نداشته باشید، یک ویرایش اشتباه می‌تواند ساعت‌ها تلاش را از بین ببرد. استفاده از سیستم‌های کنترل نسخه دقیقاً این مشکل را حل می‌کند و اجازه می‌دهد روند توسعه را بدون استرس خراب‌شدن فایل‌ها پیش ببرید.

در این درس نیازی به درگیر شدن با مفاهیم پیچیده و پیشرفتهٔ Git ندارید؛ هدف تسلط بر جریان کاری روزمره است تا بتوانید تغییرات را ثبت کنید، ایده‌های جدید را روی شاخه‌های جداگانه بیازمایید و پروژه‌تان را روی مخزن اختصاصی در GitHub همگام نگه دارید.

سیستم کنترل نسخه (Version Control) اختیاری نیست. تک‌تک آزمایش‌ها، مدل‌ها و درس‌هایی که در اینجا می‌سازید ردیابی و ثبت می‌شوند.

اهداف یادگیری

  • پیکربندی هویت در Git و به‌کارگیری جریان کاری روزمره‌ی add، commit و push
  • ساخت و merge کردن branchها برای انجام آزمایش‌های ایزوله بدون دست‌خوردن main
  • نوشتن فایل .gitignore برای نادیده گرفتن چک‌پوینت‌های مدل و فایل‌های باینری حجیم
  • مرور تاریخچه‌ی commitها با git log برای درک روند تکامل پروژه

صورت‌مسئله

قرار است در طول 20 فاز، صدها فایل کد بنویسید. بدون سیستم کنترل نسخه، کارهایتان از دست می‌رود، تغییراتی ایجاد می‌کنید که امکان بازگشت از آن‌ها را ندارید و هیچ راهی هم برای همکاری با دیگران نخواهید داشت.

ابزار کار Git است و کدها روی GitHub نگهداری می‌شوند. این درس دقیقاً همان مواردی را پوشش می‌دهد که برای این دوره نیاز دارید، نه چیزی بیشتر.

مفاهیم پایه

مخزن ریموت (GitHub)مخزن محلیمحیط آماده‌سازی (Staging)دایرکتوری کاریمخزن ریموت (GitHub)مخزن محلیمحیط آماده‌سازی (Staging)دایرکتوری کاریgit addgit commitgit pushgit fetchgit pull

سه نکته‌ی کلیدی که باید به خاطر بسپارید:

  1. مرتب ذخیره کنید (git commit)
  2. تغییرات را روی سرور بفرستید (git push)
  3. برای آزمایش‌ها branch بسازید (git checkout -b experiment)
DAG مربوط به COMMITmain جلو می‌رود، در حالی که یک branch جدا شده و سپس مجدداً merge می‌شود
COMMIT DAGEvery commit points at its parent, so history is a graph, not a list. A branch is just a diverging path of commits: main keeps moving while the experiment grows on its own line, and the merge commit joins both parents. This is why you can try a risky change without ever touching main.mainfeature/lr-sweepmerge commitروی یک branch آزمایش کنید، وقتی نتیجه داد merge کنید
هر commit به والد خود اشاره می‌کند، بنابراین تاریخچه یک گراف است، نه یک لیست. یک branch صرفاً مسیری انشعابی از commitهاست: main به حرکت خود ادامه می‌دهد در حالی که آزمایش روی خط اختصاصی خود پیش می‌رود، و merge commit هر دو والد را به هم پیوند می‌دهد. به همین دلیل می‌توانید یک تغییر پرریسک را بدون دست زدن به main امتحان کنید.

پیاده‌سازی گام‌به‌گام

گام 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ها ندارید.

تمرین‌ها

  1. این مخزن را fork کنید، نسخه‌ی fork خودتان را clone کنید، یک branch به نام my-progress بسازید، فایلی ایجاد کنید، آن را commit کنید و سپس push کنید.
  2. یک فایل .gitignore بسازید که فایل‌های چک‌پوینت مدل (.pt، .pth، .safetensors) را نادیده بگیرد.
  3. تاریخچه‌ی 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) میزبانی می‌شود

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درس«کنترل نسخه» (Version Control) اساساً در انجام چه کاری به شما کمک می‌کند؟
  2. پیش از درسمنظور از «مخزن» (Repository) در زمینه توسعه نرم‌افزار چیست؟
  3. پس از درستوالی درست برای ذخیره و پشتیبان‌گیری از کار خود در git کدام است؟
  4. پس از درسدستور `git checkout -b experiment/new-optimizer` چه کاری انجام می‌دهد؟
  5. پس از درسچرا باید `.pt`، `.pth` و `.safetensors` را به فایل .gitignore خود اضافه کنید؟

سؤالات متداول

برای دنبال کردن پروژه‌های این دوره چه دستوراتی از Git کافی است؟

تنها به پنج دستور کلیدی شامل git clone، ترکیب git add و git commit، دستور git push، دستور git checkout -b برای شاخه‌بندی، و git log --oneline برای بررسی تاریخچه نیاز دارید.

چرا نباید فایل‌های چک‌پوینت مدل را در مخزن Git ذخیره کرد؟

فایل‌های چک‌پوینت وزن مدل (مثل pt، pth و safetensors) حجم باینری بسیار بالایی دارند و باعث سنگین‌شدن و کندی مخزن می‌شوند؛ به همین دلیل این فایل‌ها باید در gitignore قرار بگیرند.

چرا به جای push مستقیم، باید مخزن دوره را fork کنیم؟

چون دسترسی مستقیم نوشتن روی مخزن اصلی برای دانشجویان فعال نیست؛ با fork کردن یک نسخه مستقل روی اکانت گیت‌هاب شما ساخته می‌شود که مدیریت کامل آن با خودتان است.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.