استفاده از Git برای ردگیری فایل‌های پروژه

چنان‌که در فصل ۱۷ گفتیم گیت یک برنامه‌ی کنترل نسخه است که به شما ا184 مکان می‌دهد هر بار که ویژگی جدیدی را با موفقیّت پیاده می‌کنید تصویری لحظه‌ای از کد بگیرید. اگر هر مشکلی پیش آمد می‌توانید به آخرین تصویری که کار می‌کرده برگردید؛ برای مثال اگر هنگام کار کردن روی ویژگی جدید به طور اتّفاقی ایرادی ایجاد کردید. به هر کدام از این تصویرها یک سپارش می‌گویند.

به کمک گیت می‌توانید بدون نگرانی از خراب شدن پروژه‌ی خود، پیاده‌سازی ویژگی‌های جدید را امتحان کنید. زمانی که برنامه‌ای را در سرور در حال کار مستقر می‌کنید باید مطمئن باشید که یک نسخه‌ی عملیّاتی از پروژه‌ی خود را استقرار می‌دهید. برای کسب اطّلاعات بیشتر درباره‌ی گیت و کنترل نسخه به پیوست ت مراجعه کنید.

نصب کردن گیت

ممکن است گیت قبلاً روی سیستم شما نصب شده باشد. برای دریافتن این موضوع یک پنجره‌ی ترمینال جدید باز کنید و دستور git --version را وارد کنید:

1
2
(ll_env)learning_log$ git --version
git version 2.17.0

اگر به دلایلی با پیام خطا مواجه شدید، دستورالعمل نصب گیت را در پیوست ت ببینید.

پیکربندی گیت

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

1
2
3
(ll_env)learning_log$ git config --global user.name "ehmatthes"

(ll_env)learning_log$ git config --global user.email eric@example.com

اگر این گام را فراموش کنید، هنگام انجام اوّلین سپارش گیت این اطّلاعات را از شما خواهد پرسید.

نادیده گرفتن فایل‌ها

ما نیازی نداریم که گیت تمام فایل‌های پروژه را ردگیری کند بنابراین از آن می‌خواهیم که از برخی فایل‌ها صرف نظر کند. فایلی به نام .gitignore در پوشه‌ای که حاوی manage.py است بسازید. توجّه کنید که نام فایل با یک نقطه آغاز می‌شود و پسوند ندارد. این کدی است که در .gitignore قرار می‌گیرد:

ll_env/
__pycache__/
*.sqlite3

به گیت می‌گوییم که کل پوشه‌ی ll_env را نادیده بگیرد زیرا می‌توانیم آن را هر زمان به طور خودکار بازتولید کنیم. همچنین نمی‌خواهیم که پوشه‌ی __pycache__ را دنبال کنید چون فایل‌های .pyc است که جانگو هنگام اجرای فایل‌های .py به طور خودکار می‌سازد. ما تغییرات اعمالی در پایگاه داده‌ی محلّی را هم دنبال نمی‌کنیم زیرا این کار عادت بدی است: اگر از SQLite روی یک سرور استفاده می‌کنید، ممکن است هنگام ارسال پروژه‌ی خود به آن، به طور تصادفی پایگاه داده‌ی آزمایشی محلّی خود را جایگزین پایگاه داده‌ی در حال کار کنید. علامت ستاره در *.sqlite3 به گیت می‌گوید که هر فایلی با پسوند .sqlite3 را نادیده بگیرد.

نکته
اگر از macOS استفاده می‌کنید .DS_Store را به فایل .gitignore خود اضافه کنید. این فایلی است که اطّلاعاتی در مورد تنظیمات پوشه در macOS را دربرمی‌گیرد و هیچ ربطی به پروژه‌ی ما ندارد.

هویدا کردن فایل‌های پنهان

بیشتر سیستم‌عامل‌ها فایل و پوشه‌هایی را که با نقطه آغاز می‌شوند پنهان می‌کنند، مانند .gitignore. اگر از مرورگر فایل یا برنامه‌هایی مانند Sublime Text برای باز کردن آن‌ها استفاده کنید، این نوع فایل‌ها را به صورت پیش‌فرض نمی‌بینید. امّا به عنوان یک برنامه‌نویس باید بتوانید آن‌ها را ببینید. این روش هویدا کردن این فایل‌هاست بسته به این که از چه سیستم عاملی استفاده کنید:

  • در ویندوز Windows Explorer را باز کنید و سپس پوشه‌ای مانند میز کار را باز کنید. روی برگه‌ی Tab بزنید و مطمئن شوید که File name extensions و Hidden items علامت خورده باشند.
  • در macOS می‌توانید دکمه‌های SHIFT-. را در پنجره‌ی هر مرورگر فایلی بزنید تا فایل و پوشه‌های پنهان را ببینید.
  • در سیستم‌های لینوکسی مانند اوبونتو، با فشار دادن CTRL-H در هر مرورگر فایل می‌توانید فایل‌ها و پوشه‌های پنهان را ببینید. برای این که این تنظیمات را دائمی کنید مرورگر فایلی مانند Nautilus را باز کنید و روی برگه‌ی گزینه‌ها (که با سه خط نشان داده شده) کلیک کنید. گزینه‌ی Show Hidden Files را انتخاب کنید.

سپارش پروژه

ما باید برای Learning Log یک مخزن گیت راه بینداز185 یم، تمام فایل‌های لازم را به آن اضافه کنیم و وضعّیت اوّلیّه‌ی پروژه را برون‌سپاری کنیم. این روش انجام این کار است:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
(ll_env)learning_log$ git init
Initialized empty Git repository in /home/ehmatthes/pcc/learning_log/.git/

(ll_env)learning_log$ git add .

(ll_env)learning_log$ git commit -am "Ready for deployment to heroku."
[master (root-commit) 79fef72] Ready for deployment to heroku.
  create mode 100644 users/views.py

(ll_env)learning_log$ git status
On branch master
nothing to commit, working tree clean

(ll_env)learning_log$

در ۱ فرمان git init را برای راه‌اندازی یک مخزن خالی در پوشه‌ی حاوی Learning Log صادر می‌کنیم. در ۲ از git add . استفاده می‌کنیم که تمام فایل‌هایی را که نادیده گرفته نشده‌اند، به مخزن اضافه می‌کند. (نقطه را فراموش نکنید.) در ۳ فرمان git commit -am commit message را صادر می‌کنیم: پرچم -a به گیت می‌گوید که تمام فایل‌های تغییریافته را هنگام سپارش در نظر بگیر و پرچم -m یک پیام پیگیری را درخواست می‌کند.

صدور فرمان git status در ۴ نشان می‌دهد که در شاخه‌ی master هستیم و درخت کاری ما تمیز است. این وضعیّتی است که پس از هر بار ارسال پروژه به هروکو می‌خواهید ببینید.