لوگوی Git

اگر شما یک برنامه نویس باشید، در یک پروژه میتوانید به دو نوع ایفای نقش کنید:

  1. مسئولیت تمام پروژه را به تنهایی به دوش بکشید.
  2. عضو یک تیم باشید و شما قسمتی از آن پروژه را انجام بدهید.

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

جامعه برنامه نویسان برای شما استفاده از یک نرم افزار کنترل نسخه را تجویز کرده اند!

 

البته مثالی که در بالا زده شد فقط یکی از حالت های کارایی برنامه های کنترل نسخه است ولی اصلی ترین وظیفه ی آن هاست که همه چیز را یادشان بماند و درصورت وجود مشکل یا تداخلی سریعا بتوان با آن ها مشکل را تشخیص داد.

گیت

گیت (یا Git) یک نرم افزار کنترل نسخه است.این نرم افزار رایگان است و توسط همان کسی ساخته شده که لینوکس را ساخت!

گیت بر روی لینوکس، ویندوز و مکینتاش نصب میشود و می تواند همه زبان های برنامه نویسی را ردیابی کند. گیت بصورت پیشفرض دارای رابط گرافیکی نیست و عموما از طریق خط فرمان کنترل میشود اما برنامه هایی موجود هستند که با نصب آن ها میتوانید عملیات اصلی Git را بواسطه رابط گرافیکی انجام بدهید. لیست آن ها را در اینجا مشاهده کنید.

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

 

منطق

در منطقِ گیت یک برنامه نویس (فرضا علی) می بایست شروع کننده پروژه باشد. علی چند روز کد مینویسد و موفق میشود تا برنامه اش را به فاز اجرایی برساند سپس او در پوشه اصلی پروژه اش با استفاده از گیت یک مخزن (Repository) جدید ایجاد میکند و تمام فایل های پروژه اش را در آن اضافه (Add) و محتوای تمام آن فایل ها را تحت عنوان یک نام ثبت (Commit) میکند. حالا علی یک کپی از این پوشه پروژه را به شما و همکارتان میدهد و میگوید که بر روی بخش های خاصی از پروژه کار کنید و خودش هم بر روی قسمت دیگری فعالیت میکند.

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

کاری که گیت انجام میدهد ساده است، از برنامه نویس میخواهد تا در هر مرحله از برنامه نویسی خود (مثلا بعد از پیاده سازی یک قابلیت خاص در  پروژه) فایل هایی که تغییر داده را معرفی و کل آن تغییرات را تحت یک عنوان مشترک ذخیره کند.

حالا زمانی که میخواهید مخزن خودتان را با مخزن همکارتان ادغام کند گیت خط به خطِ هر فایل از هر دو مخزن را با هم مقایسه میکند و با توجه به زمان تغییرات آن خطوطی که پاک شده اند را پاک میکند و خطوطی که اضافه یا ویرایش شده اند را نیز تغییر میدهد.

البته در گیت این قابلیت کلیدی وجود دارد که به جای این که مخازن از طریق روش سنتی کپی-پیست بین اعضای تیم منتقل شود، از یک سرور مرکزی استفاده شود.با این روش یک مخزن اصلی بر روی سروری که در دسترس همه اعضای تیم است قرار میگیرد و همه اعضا آخرین ورژن برنامه را از آن دریافت و تغییرات خود را بعد از ثبت در آن ذخیره میکنند تا بصورت فوری در اختیار بقیه اعضای تیم هم قرار بگیرد.

شیوه کار git

با توجه به این توضیحات چند قابلیت کلی در سیستم گیت به چشم میخورد:

  • هر کس که در پروژه تغییر ایجاد میکند دارای هویت است.
  • هر تغییر در فایل ها باید در سیستم با یک عنوان، زمان و یک هویت ذخیره شود.
  • فایل ها از در هم کنار قرار گرفتن تغییرات ایجاد میشوند.
  • شما میتوانید با باز کردن تاریخچه یک پروژه دقیقا متوجه بشوید که چه کسی در چه زمانی چه تغییراتی ایجاد کرده است.
  • شما میتوانید با مراجعه به تاریخچه یک فایل دقیقا متوجه شوید که هر خط از آن فایل را چه کسی نوشته.
  • درصورتی که در پروژه شما مشکلی بوجود آمد میتوانید با گیت تغییرات را به عقب برگردانید.
  • میتوانید پروژه تان را به شاخه های مختلف (Branch) تقسیم کنید و هر شاخه را بصورت مختلف ویرایش کنید.

 

گیت در عمل

استفاده گیت در واقعیت از تئوری آن هم آسانتر است!

گیت به راحتی نصب میشود. اگر از سیستم عامل ویندوز استفاده میکنید، فایل نصبی آن را از وب سایت رسمی گیت دانلود و نصب کنید.

اگر از لینوکس استفاده میکنید پس نصب آن بسیار آسانتر است،فقط لازم است که یکی از دو دستور زیر را اجرا کنید.

برای دبیان، ابونتو و مینت:

apt-get install git

برای Centos، Redhat و Fedora:

yum install git

قبل از هر کاری هویتتان را به گیت معرفی کنید، این کار با اجرای دو دستور زیر امکان پذیر است (به جای علی اصغری مشخصات خودتان را وارد کنید) که فقط یکبار انجام میپذیرد:

git config --global user.name "Ali Asgari"
git config --global user.email ali.asgari@yahoo.com

حالا از طریق ترمینال وارد پوشه پروژه بشوید و دستور زیر را برای تاسیس یک مخزن جدید وارد کنید:

git init

حالا کد بنویسید تا برنامه به نقطه ای برسد که بنظر شما یک تغییر خاص کرده.

دستور زیر را اجرا کنید تا git به شما بگوید که چه فایل هایی را ایجاد، حذف یا تغییر دادید:

git status

از لیست به نمایش داده شده آن فایل ها و پوشه هایی که مربوط به این تغییر شماست را انتخاب کنید و آن ها را اضافه کنید.

مثلا در تصویر زیر git به من لیستی از فایل های جدید و تغییر داده شده را به من میدهد.

دستور git status

فایل های جدید در قسمت Untracked files و فایل های تغییر داده شده در قسمت Change not staged for commit قرار گرفته.

فایل routing.json و پوشه controllers/panel/blog مربوط به تغییر مورد نظر من است و قصد ثبت آن ها را دارم؛ پس آن ها را معرفی میکنم:

git add routing.json controllers/panel/blog/

حالا اگر دوباره دستور git status را اجرا کنم آن ها را با رنگ سبز نشان میدهد:

دستور git status بعد از افزودن فایل

در نهایت دستور زیر را برای ثبت تغییرات اجرا خواهیم کرد:

git commit

از شما درخواست میشود تا یک عنوان برای تغییراتان وارد کنید. هرچیزی دلتان میخواد وارد کنید اما استاندارد هایی وجود که بهتر است رعایت کنید:

  • عنوان تغییر را تا میتوانید ساده، شفاف و خلاصه وارد کنید.
  • عنوان را با حروف انگلیسی وارد کنید و قویا پیشنهاد میشود که از کلمات انگلیسی استفاده کنید.
  • عنوان حداکثر میتواند 70 کارکتر ascii باشد.
  • اگر نیاز دارید تا توضیحاتی ارائه کنید، عنوان را در خط اول وارد کنید، خط دوم را خالی رها کنید و توضیحاتتان در خطوط بعدی به هر اندازه اندازه ای که مایلید وارد کنید.

حالا فایل را ذخیره کنید و خارج شوید. تغییرات شما ذخیره شده و میتوانید با دستور زیر تاریخچه تغییرات را مشاهده کنید:

git log

دستور git log

سوال 1: این شرایط برای زمانی است که من بر روی پروژه ی خودم کار کنم، اما اگر پروژه را کس دیگری قبلا ایجاد کرده باشد و من بخواهم در آن مشارکت کنم چه کار کنم؟

شما میبایست مخزن پروژه را از مالک آن دریافت کنید، این کار ممکن است از طریق راه های سنتی مثل کپی - پیست پوشه یا دریافت از طریق ایمیل یا فلش مموری انجام بشود و یا ممکن است مالک، مخزن را بر روی اینترنت قرار داده باشد و شما میتوانید آن را دریافت کنید.

مثلا اگر قصد کنید که مخزن فریمورک webuilder را دریافت کنید فقط کافی است آدرس آن را بدانید و آن را با دستور clone دانلود کنید:

git clone https://git.jeyserver.com/webuilder/base.git

حالا روال کار افزودن فایل ها و ذخیره تغییرات مثل این است که پروژه متعلق به خودتان است.

 

سوال 2: من یک تغییر را ثبت (Commit) کردم. چگونه آن را به  مدیر پروژه تحویل بدهم؟

اگر مخزن را از طریق اینترنت Clone کردید، پس فقط لازم است تا این دستور را اجرا کنید:

git push

اگر مخزن را بصورت دستی کپی-پیست کردید، پس می بایست برای تحویل تغییر مجددا آن را به روش کپی-پیست تحویل بدهید.

 

سوال 3: من میخواهم پروژه ای را شروع کنم و آن را با هم تیمی هایم توسعه دهم، چطور میتوانم یک مخزن آنلاین ایجاد کنم؟

در حال حاضر سرویس دهنده های بسیار خوبی در زمینه میزبانی مخازن Git فعالیت میکنند.

اگر پروژه شما Open-source است میتوانید از GitHub.com استفاده کنید، این مجموعه سورس پروژه شما را به هر وزن و اندازه ای که باشد به رایگان میزبانی میکند. اما اگر پروژه شما خصوصی و تجاری است بهتر است که خودتان یک سرور مجازی تهیه کنید و GitLab را بر روی آن راه اندازی کنید. (جی سرور میتواند در این خصوص به شما کمک کند)

بعد از اینکه مخزن را بر روی یک سرور راه اندازی کردید، ابتدا با دستور زیر آن را به عنوان مخزن اصلی یا بالادستی به مخزن داخل رایانه ی خودتان متصل کنید:

فرض کنید که آدرس مخزن این چنین باشد: https://git.jeyserver.com/webuilder/base.git

پس این دستور را اجرا میکنیم:

git remote add origin https://git.jeyserver.com/webuilder/base.git

سپس با دستور push تمام تغییرات را بر روی سرور آپلود میکنیم:

git push -u origin master

 

سوال 4: من  تغییراتم را به سرور ارسال کردم و بدون مشکلی ذخیره شد اما هنوز آن تغییرات در رایانه همکارم اعمال نشده، چرا؟!

دلیل ساده است، فرض کنید یک نفر در حین کارتان مرتبا کد های شما را تغییر بدهد و باعث بشود که برنامه بخوبی کار نکند.مخصوصا که شما دقیقا ندانید که کدام فایل ها را ویرایش میکند! آیا حس خوبی خواهید داشت؟

قطعا خیر! پس گیت برای حل این مشکل روال کار را اینطور قرار می دهد که شما کدتان را مینویسید، تغییرات را ثبت و به سرور برای ذخیره ارسال میکنید.همکارتان که بصورت موازی یا بعد از شما مشغول به کار است می بایست دستور زیر را اجرا کند تا آخرین تغییرات را دریافت کند:

git pull