push کردن پروژه در سرور با استفاده از گیت

سلامدر این آموزش می‌خواهم به یک موضوع جالب و حائز اهمیت در گیت بپردازم. خیلی از دوستانی که چندین ساله در حوزه برنامه نویسی فعالیت دارن با گیت آشنایی دارن. اما موضوعی که گیت رو برای خیلی از برنامه نویسان جالب می کنه امکان ارتباط با سرور و پوش کردن تغییرات پروژه در سرور هست. در اینجا یک تعریف مقدماتی از گیت ارائه میدم و بعد به ارتباط سرور و کامپیوتر مبدا در گیت می پردازیم:گیت یک نرم افزار ورژن کنترل است که برای دنبال کردن تغییر فایل های پروژه و دنبال کردن کارهای انجام شده روی آن ها مفیده.گیت بیشتر برای پروژه‌هایی استفاده میشه که چند نفر از اعضای یک تیم برنامه نویسی به طور همزمان روی سورس کد اون کار می کنن. در این جا قصد ندارم گیت رو آموزش بدم. اما می خوام به بحث ارتباط بین یک کامپیوتر مبدا و سرور با استفاده از گیت بپردازم. بهتره یکبار برای همیشه با این مفهوم و کاربرد اون به طور کامل آشنا بشید. مطمئنم بالاخره یه جایی حتما براتون مفید و موثر خواهد بود. و اما اصل مطلب:دو راه برای اعمال تغییرات سورس پروژه روی سرور وجود داره:راه اول اینه که به محض اینکه یک فایل از فایل های پروژه رو تغییر میدیم بلافاصله اونو روی سرور آپلود کنیم و تغییرات رو مشاهده کنیم. در این روش برای ارتباط با سرور از پروتکل FTP استفاده می کنیم و به محض تغییر یک فایل (حتی تغییر یک خط از اون) اون رو در سرور آپلود می کنیم. بیشتر ما برنامه نویسا با این روش آشنایی داریم.و اما راه دوم و روش بهینه تر: در روش دوم یک ریپوسیتوری گیت روی سرور ایجاد می کنیم و سورس پروژه رو که روی کامپیوتر مبدا (لوکال هاست) داریم با هم دیگه به هنگام سازی می کنیم. در این روش به هنگام کامیت کردن تغییرات روی کامپیوتر مبدا و پس از اون پوش کردن اون ها روی سرور اطلاعات مستقیما به سرور منتقل می شن.قبل از هرچیزی بهتره شما رو با معایب و مزیت های این روش آشنا کنمدر روش اول (یعنی اتصال با استفاده از FTP و آپلود فایل ها) پهنای باند اینترنت شما بیش از حد مورد استفاده قرار میگیره. چون اگر شما به عنوان مثال 20 فایل رو آپلود کنید و هر فایل مثلا حجمی برابر 10 کیلو بایت داشته باشه مصرف پهنای باند شما 200 کیلو بایت میشه. (البته درسته که این اعداد، اعداد کوچیکی هستند اما در روند کار یک پروژه در طولانی مدت مصرف پهنای باند شما به شدت افزایش پیدا می کنه). اما در روش دوم (یعنی با استفاده از گیت) شما فایلی رو آپلود نمی کنید. بلکه تغییرات فایل ها رو در سرور پوش می‌کنید. (حالا توضیح میدم یعنی چی!). مثلا از همون مثال بالا استفاده می کنیم. اگر شما 20 تا فایل داشته باشید که هر کدوم 10 کیلوبایت باشن و اون ها رو در سرور پوش کنید اینجا شما 200 کیلوبایت پهنای باند مصرف نکردید. چون امکان داره که هر کدوم از این 20 فایل فقط یه خطشون تغییر کرده باشه و گیت هم دقیقا میاد اون یه خط تغییر رو در سرور ثبت می کنه (در واقع تغییرات رو در فایل های روی سرور اعمال می کنه. نه اینکه یک فایل رو به طور کامل آپلود کنه). حالا وقتش رسیده است که یک راه حل علمی یاد بگیریمقبل از هرچیزی لازمه بگم برای این کار وقت و حوصله بزارید و با دقت تمام انجامش بدید.شنونده خوبی باشید و تمام نکاتی که گفته میشه رو با دقت گوش کنید، بازم تاکید می کنم که شنونده خوبی باشید.اول از همه باید گیت رو روی سرور مجازی یا اختصاصی مون نصب کنیم. فرض کنیم که شما از سیستم عامل لینوکس (سنت او اس) استفاده می کنید.بدون هیچ معطلی شروع کنید.برای نصب گیت در سرور از دستور زیر استفاده می کنیم: yum install git بعد از اتمام نصب برای اینکه مطمئن بشید گیت نصب شده دستور زیر را به کار می‌بریم: git --versionبا وارد کردن دستور بالا ورژن گیت نصب شده روی سرور نشون داده میشه که این نشون دهنده موفقیت آمیز بودن نصب هست.بعد از اون باید public key کامپیوترتون رو درفایل مربوطه روی سرور قرار بدین تا بتونید از دستور push به راحتی استفاده کنید.برای اینکار در سرور از دستور زیر استفاده می کنیم تا بتونیم فایلی رو که کلید های عمومی در اون قرار دارن رو ویرایش کنیم. cd ~/.sshحالا کلید های عمومی در فایلی در همین مسیر با نام authorized_keys قرار دارن. بنابراین دستور زیر رو وارد میکنیم: vi authorized_keysو کلید عمومی رو که روی کامپیوتر مبدا وجود داره در انتهای این فایل قرار میدیم.نکته: برای دسترسی به فایل کلید عمومی روی کامپیوتر مبدا و کپی محتویات اون در لینوکس می تونیم به مسیر ~/.ssh/id_rsa.pubو در ویندوز می تونیم به مسیر C:\Users\Farhad\.ssh\id_rsa.pub بریم.که Farhad نام کاربری ویندوزتون هست.در مرحله بعد یک دایرکتوری فرضی روی سرور می‌سازیم و یک ریپوسیتوری گیت در اون ایجاد می کنیم. نکته قابل توجه اینه که ریپوسیتوری هایی که روی سرور ایجاد میشه باید از نوع bare باشه. ریپوسیتوری bare ریپوسیتوری ای هست که روی سرور ها ایجاد میشه و برای انتقال فایل ها بین کلاینت و سرور مورد استفاده قرار می گیره.برای اینکار در سرور به مسیر زیر میریم:cd /home/admin/domains/domain.com/public_htmlسپس یک دایرکتوری فرضی ایجاد می‌کنیم و وارد اون می‌شیم:mkdir repo && cd repoو سپس یک ریپوسیتوری از نوع bare می سازیم:git init repo.git –-bare که repo.git اسم دایرکتوری گیت هست. درحالت معمول نام دایرکتوری گیت .git هست اما در اینجا ما نام دایرکتوری رو به repo.git تغییر دادیم.در مرحله بعد باید وارد مسیر زیر بشیم:cd repo.gitcd hooksو حالا از دستور زیر استفاده می کنیم:cat > post-receiveو سپس: #!/bin/shgit --work-tree=/home/admin/domains/domain.com/public_html/repo --git-dir=/home/admin/domains/domain.com/public_html/repo/repo.git checkout -fبعد از اون کلید های ctrl + d رو می زنیم.منظور از work-tree آدرس دایرکتوری هست که ریپوسیتوری توی اون قرار داره و منظور از git-dir آدرس پوشه ریپوسیتوری هست. (همون repo.git )بعد از این مرحله باید به فایل ساخته شده با نام post-receive حالت اجرایی بدیم. برای اینکار دستور زیر رو وارد میکنیم.chmod +x post-receiveتا اینجای کار، ریپوسیتوری گیت روی سرور ساخته شده و حالا حالا وقت این رسیده که فایل ها رو از کامپیوتر مبدا به سرور منتقل کنیم.حالا باید ریپوسیتوری رو از سرور clone کنیم که بهتره شما هم دست به کار بشید و اینکارو با هم انجام میدیم.روی کامپیوتر مبدا دستور زیر رو در گیت بش وارد می کنیم: git clone ssh://root@192.168.1.1/home/admin/domains/domain.com/public_html/repo/repo.git به جای root می تونید نام کاربری که با اون وارد ترمینال سرور شدید رو قرار بدید و به جای 192.168.1.1 آدرس آی پی سرور رو قرار بدید.حالا سیستم از ما رمز عبور ssh key رو میخواد که اون رو وارد می کنیم.و حالا یک ریپوسیتوری خالی در کامپیوتر مبدا ساخته میشه.و در مرحله آخر فایل های پروژه رو در دایرکتوری ایجاد شده در کامپیوتر مبدا کپی می کنیم و سپس از دستور add استفاده میکنیم. به صورت زیر:git add .و سپس کامیت میکنیم:git commit –m “test message”در انتها تغییرات رو روی سرور پوش می کنیم:git push –u origin --allدر اینجا سیستم مجددا ازتون رمز عبور ssh key رو می خواد که اون رو وارد میکنیم.حالا اگر وارد ترمینال سرور بشید و دایرکتوری مربوطه رو ببینید مشاهده می کنید که فایل ها به درستی روی سرور پوش شدهتبریک میگم! شما تونستید انتقال فایل ها رو بین کامپیوتر مبدا و سرور با استفاده از گیت به درستی انجام بدید. حالا دیگه به عنوان یک برنامه نویس حرفه ای با مفهوم گیت و کاربرد اون آشنایی کامل دارید.اگر سوال، نظر یا پیشنهادی در رابطه با این مقاله دارید، خوشحال میشم با من مطرح کنید. از طریق بخش کامنت‌های این مقاله با من در تماس باشید.