آموزش ویم: بخش اول

این پست یک برگه تقلب و یا راه میان‌بر برای یادگیری ویم نیست، پس همه چیز با دقت خوانده شود. لطفاً!!!

مقدمه اول

همیشه انتخاب یک جای مناسب که آدم بتونه چیزایی که میخواد رو توش بنویسه همیشه برای بشریت کار سخت و زمان‌بری محسوب میشده. مثلا همین اجداد ما کلی مسیر میرفتن تا یه غار پیدا کنن و غار رو بررسی میکردن ببینن سنگش مناسب برای حکاکی هست یا نه اگه خوب نبود باز میرفتن پی یه غار جدید

:D. ما هم همینیم. هی ابزار مختلف امتحان میکنیم تا بتونیم واژه به واژه نویسه‌ها رو به کمک همین دستامون به بهترین و راحت‌ترین شکل ممکن توی فضای ذخیره‌سازی داده‌مون ذخیره کنیم.

vim یا ویم حاصل از عبارت vi improved یا وی‌آی بهبودیافته‌ست. وی‌آی هم جزو اولین ویرایشگرهای متن است که در دهه ۷۰ میلادی توسعه داده می‌شد و جزئی از استاندارد پازیکس هست.

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

مقدمه دوم

از همون زمانی که از ایمکس استفاده می‌کردم همیشه برای من بسیار سخت بود که بخوام روی ادیتور دیگه‌ای به خصوص ویم مهاجرت کنم.

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

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

به خاطر همین مسئله بعد از ایمکس روی ویرایش‌گرهای مختلفی مثل atom، brackets و vscode کار کردم اما به نظرم کارکرد مناسبی نداشتند. روی لپ‌تاپ تینک‌پد من با ۸ هسته پردازنده و ۱۶ گیگابایت رم و ۲ گیگاهرتز پردازش‌گر گرافیکی عالی عمل‌ میکردند

اما

روی لپ‌تاپ (یا به تعبیری netbook) eeepc برند ایسوس که اخیراً میبرمش دانشگاه یا اکثر مواقع به خاطر وزن کمش همراه منه با کانفیگ ۴ گیگابایت رم و ۱ هسته پردازنده و ۳۰۰ مگاهرتزی گرافیکی‌ش به شدت فاجعه بودند. فاجعه محض!

مقدمه سوم

به طور کلی هیچ راه‌ میانبر برای یادگیری هیچ‌چیز غیر از راه اصولی یادگیری‌ یعنی یادگرفتن مبحث، نوشتنش به صورت ساده‌ترین شکل ممکن به طوری که بشه به بقیه هم یادش داد، یاد دادنش به دیگران، مرور نوشته‌ها و تمرین و تمرین و تمرین راه دیگه‌ای نداره.

در نتیجه این پست علاوه بر کمک به یاددادن به بقیه، دست نوشته‌های خودمه که بعدها هم در صورت نیاز بهش سر بزنم. به طور کلی توی مبحث یادگیری متد فاین‌من رو حتماً مطالعه کنید و صد البته که practice makes perfect.

مقدمه چهارم

پیش‌نیاز این کار داشتن یه ترمینال، یکم وقت در روز و یکم هم تسلط به کیبورده. راستی هر پست اگه آپدیتی بخوره با تیتر آپدیت و تاریخش نوشته میشه 🙂

در پست‌های آینده هم احتمالا یکم توی ویم حرفه‌ای‌تر میشیم و کانفیگش میکنیم و میشه چیزی که باید بشه.

مقدمه پنجم

حقیقتا یکی از بهترین روش‌های یادگیری ویم استفاده از  vimtutor است. کافیه اونو توی ترمینال وارد کنین تا راهنمای ویم اجرا بشه و متنش رو بخونید و یادبگیرید. اما خب چی بهتر از اینکه ما با هم پیش بریم و با هم یادش بگیریم.

یادگیری ویم

علاوه بر vimtutor من از یه سری منابع استفاده میکنم که توی بخش منابع قابل دیدن هستن.

مودهای ویم

ویم سه تا مود داره (حداقل تا اینجا که من یادگرفتم). به مرور این مود‌ها میپردازیم.

Normal

یک مود نرمال که برای پیمایش و گشتن و جابه‌جایی بین فایل‌ها و استفاده از دستورها و فرمان‌های ویم مثل نصب تم یا پلاگین استفاده میشه که  با کلید esc فعال میشه.

insert

با زدن کلید i در مود نرمال وارد مود insert میشیم. در این مود میشه متن نوشت و یا بخشی از اون رو حذف کرد. در کل وظیفه ویرایش متن رو داره. برای وارد شدن به این مود از کلید i و وقتی توی مود نرمال هستیم استفاده میکنیم. علاوه بر i از کلید a (شاید به معنی append) هم میشه وارد مود insert شد. اما با یه تغییر. با زدن دکمه i محل قرارگیری نشانگر ویرایش یا cursor دقیقاً همون‌جایی خواهد بود که توی مود نرمال بود. اما وقتی a زده میشه مکان قرارگیری‌ش دقیقاً یه خونه بعد از محل قرارگیری نشانگر توی مود نرمال هست. برای جابه‌جایی بین مودهای مختلف هم لازمه حتما وارد مود نرمال بشیم و بعد وارد مود دیگه بشیم.

فکر کنم برای درک بهتر این دو بخش لازم باشه این asciinema رو ببینیم تا درک کنیم منظورمون دقیقاً چیه. باز اگه ابهامی بود بگید که بیشتر توضیحش بدم.


Visual

این مود با زدن کلید v روشن میشه و مخصوص کارهای ویژوال مثل انتخاب بلوک‌هایی از متنه که خب در آینده در موردش حرف خواهیم زد.

 

جابه‌جایی

برای جا‌به‌جایی در مود نرمال از چهار کلید h j k l استفاده میشه. طبیعتاً از کلید‌های بالا پایین چپ و راست هم برای جابه‌جایی در مود insert استفاده میشه.

اما روند کار با h j k l چطوریه؟ به همین راحتی؛

k ⬆️

h ⬅️                     ➡️ l

j ⬇️

حالا وقتی توی مود نرمال هستیم این دکمه‌ها رو امتحان کنیم تا ببینین چطوری جا به جا میشه. حالا برای اینکه یه تعداد خاص نویسه جا‌به‌جا بشید کافیه عدد قبل اون بزارین. مثلا ۳k سه خط بالا میره یا ۵l پنج نویسه به سمت راست میره.

این asciinema رو حتما ببینید:

جا به جایی بین کلمات

برای جابه‌جایی بین کلمات سه کلید اصلی داریم. w b e سه کلید اصلی ما هستند. حالا شاید بپرسید این جا‌به‌جایی بین کلمات یعنی چی؟ بهتره اول مفهومش رو بخونین اینجا و مثال asciinemaش رو ببینین تا متوجه بشید.

فرض کنید یک متنی داریم که میخوایم یک کلمه بریم جلو. در مود نرمال کافیه یکبار دکمه w رو بزنیم. همینطور اگه بخوایم یک کلمه به عقب برگردیم هم یکبار دکمه b رو میزنیم.

شاید سوال پیش بیاد که اگه بخوایم ۱۰ کلمه بریم جلو یا ۴ کلمه برگردیم عقب چی؟ خب این هم مشکلی نیست. هرچندتا کلمه که نیازدارید جابه‌جا بشید(منظور از جابه‌جایی انتقال cursor یا همون نشانه‌گر به مکان مورد نظر هست) رو وارد کنید و بعدش کلید w و b رو بر حسب نیاز بزنید. مثلاً اگه نیاز دارید ۳ کلمه برید عقب میزنید: ۳b یا ۶ کلمه به جلو اینطوری میشه: ۶w.

اما کاربرد e چیه؟ این کلید مارو میبره به آخرین نویسه اون کلمه. مثلا اگه یک کلمه داشته باشیم مثل start و روی کارکتر s یا t باشیم، در مود نرمال وقتی e رو بزنیم مارو منتقل میکنه به حرف آخر این کلمه یعنی t. در این مسئله مثل دو کلید قبلی میتونیم بر اساس تعداد کلمه هم جابه‌جا بشیم. مثلا ۳e مارو به اندازه ۳ تا کلمه میبره جلو اما روی نویسه آخر کلمه مقصد مارو نگه میداره.

این asciinema برای درک بهتر این مفهوم کمک بزرگی به ما میکنه:

بازی با تکرر

برای بخش یکی مونده به آخر هم یکم با این ترکیب اعداد کار میکنیم.

میخوایم تو ویم ۱۰۰ بار علامت تعجب رو بنویسیم. منطقیه که ۱۰۰ بار ! رو بزنیم؟ نه پس از حالت قبلی ایده میگیریم. میدونیم که با i وارد مود insert میشیم. در نتیجه میتونیم بزنیم ۱۰۰i! و بعدش esc رو میزنیم تا نتیجه رو ببینیم.

نمونه:

خروج از ویم 😀

اما قسمت جالب ویم اینکه سوال خیلی از آدم‌ها این بوده که چطور از ویم خارج بشن. برای خروج از ویم در مود نرمال، با زدن :q میشه خارج شد. اما اگه تغییرات اعمال کرده باشید بهتون خطا میده. برای نادیده کرفتن تغییرات میتونیم از !q: استفاده کنیم و خارج بشیم. اما برای سیو دو راه داریم. استفاده از x: و یا qw:

پایان بخش اول

قسمت اول تموم شد. پست بعدی یکم بیشتر توی ویم عمیق میشیم و کارهای باحال‌تری باهاش انجام خواهیم داد.

راهنمای کامل نصب و پیکربندی proxmox بر روی root server های Hetzner

 

چند وقت پیش من و علیرضا تصمیم گرفتیم که بریم و از Hetzner که یه دیتاسنتر خوب آلمانی هست یه روت سرور بگیریم تا بتونیم پروژه‌هامون رو روش پیاده‌سازی کنیم.

بعد از ثبت‌نام و ارسال مدارک و خرید سرور با مشخصات ۸ هسته پردازنده و ۴۸ گیگابایت رم و ۲تا هارد ۲ترابایت و همچنین خرید یه سابنت یا زیرشبکه با رنج /۲۹ از اونا کارم رو شروع کردم.

بد ندیدم تا ریز مسائلی که بهشون برخوردم و راهنمای کامل نصب رو هم اینجا بنویسم تا شاید به درد یکی بخوره 🙂

اگه نمی‌دونین proxmox چیه باید بگم که یه ابزار تحت وب برای ساختن و مدیریت ماشین‌های مجازی روی یه سرور.

قدم اول نصب یه دبیان تر و تمیز

برای اینکار باید به پنل روبات لاگین کنیم و. سرور موردنظر رو انتخاب کنیم و به منوی rescue بریم و اول از dropdown گزینه linux و بعدش هم Radio button عبارت ۶۴bit رو انتخاب کنیم. این کار یه دبیان رو روی شبکه برامون لود میکنه که بتونیم باهاش هرچیزی که میخوایم رو نصب کنیم. بعد از زدن دکمه activate یادتون باشه که یه پسورد برامون generate می‌کنه که بهتره اونو سیو کنیم.

راهنمای استفاده از پنل روبات رو هم از اینجا بخونین

مرحله بعدی اینه که بریم به منوی reset و بعدش یه ریست به سرور بدیم.

این ریست باعث میشه که موقع بوت سرور روی مود rescue بوت بشه. البته لازم به ذکر هست که اگه برای اولین بار هست سرور رو میخرین، سرور روی این مود قرار داره.

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

به سرور وصل می‌شیم. مهندس‌های هتزنر یه ابزاری نوشتن به اسم installimage که به کمک اون میشه انواع سیستم‌عامل‌ها رو روی سرور نصب کرد.

قدیم (یعنی حدود دوهفته قبل از نوشتن این مقاله) یه بخشی توی installimage وجود داشت به اسم virtulization که توش هم proxmox بود و هم coreOS اما خب الان رفتن توی زیرشاخه other و یادتون باشه که به‌هیچ‌وجه درست کار نمیکنن و ازشون استفاده نکنین.

بهترین کار انتخاب Debian هست. بعد از انتخاب Debian یه منوی جدید باز میشه که میگه نسخه دبیان رو انتخاب کنید که ما jessie رو انتخاب می‌کنیم.

بعد از اون یه ادیتوری باز میشه که میگه تنظیمات دلخواه‌هت رو انتخاب کن.

ازاونجایی که من دوتا هارد دوترابایت داشتم، موقع نصب زدم که نوع RAID من ۱ باشه.

یعنی که هردوتاهارد میرور باشن تا اگه یکیش پرید، دیتا من نپره :))

به بوتلودر و SWRAIDLEVEL هم دست نزدم. اما HOSTNAME رو هاست‌نیمی که میخوام زدم مثلاً زدم Goodarz-Server.

مرحله بعد نوبت به پارتیشن‌بندی بود.

به صورت زیر من پارتیشن‌بندی کردم:

اما خب این به چه معناست:

این یعنی که اول میاد یه پارتیشن ۴ گیگابایتی غیرLVM می‌سازم و فرمتش رو هم می‌زارم ext4 و روی /boot متصلش می‌کنم.

بعد از اون دوتا ولیوم گروپ LVM با حجم ۴۲۰ گیگ و all که یعنی هرچقدر باقی‌موند می‌سازم.

یه روت ۱۰۰ گیگابایتی با فرمت ext4 و یه سواپ ۲۰ گیگی یه پارتیشن ۳۰۰ گیگابایتی روی /backup برای نگهداری بک‌آپ هام می‌سازم.

بعد ولیوم گروپ دومی که ساختم و تمام فضای باقی‌مونده رو بهش دادم رو هم رو هم روی /var/lib/vz که محل اصلی نگه‌داری ایمیل‌ها و تنظیمات پروکسموکس هست انتخاب می‌کنم و تمام فضای vg1 که ولیوم گروپ دوم ما هست رو هم. بهش اختصاص می‌دم

پس شد یه روت ۱۰۰ گیگی، یه بوت ۴ گیگی، یه بک‌آپ ۳۰۰ گیگی، یه سواپ ۲۰ گیگی و یه پارتیشن هم حدود ۱ گیگ و نیم برای /var/lib/vz

خط آخر یعنی image رو هم دستکاری نمی‌کنیم. کل پیکربندی رو به شکل زیر میشه خلاصه کرد:

با زدن f10 و ذخیره کردن پیکربندی مراحل نصب رو پیش می‌ریم تا نصب تموم شه و بهمون بگه که ریست کنیم.

بعد از ریبوت، به سرور ssh می‌زنیم مجدداً با یوزر روت و پسوردی که موقع rescue برامون درست کرده بود.

وارد که شدیم ترجیح براین هست که ابتدا ipv6 غیرفعال بشه تا فرایند نصب بسته‌ها سریع انجام بشه.

لذا فایل /etc/syctl.conf روباز می‌کنیم و. این دوخط رو تهش اضافه می‌کنیم:

با زدن

تنظیمات رو اعمال می‌کنیم.

حالا لیست مخازن و بعد از اون بسته‌ها رو هم آپدیت می‌کنیم:

تا اینجا ما روت سرور رو به طور کامل کانفیگ کردیم. مرحله بعد نصب proxmox هست.

نصب proxmox

ابتدا باید مخازن proxmox رو به مخازن دبیان اضافه کنیم. پس فایل/etc/apt/sources.list روباز می‌کنیم و این خط رو بهش اضافه می‌کنیم:

بعدش کلید مخازن رو اضافه می‌کنیم:

در آخر هم لیست مخازن و بسته‌ها رو آپدیت می‌کنیم:

حالا وقت نصب کرنل و کرنل هدرها هست 🙂

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

حالا با دستور reboot سیستم‌عامل رو ری‌استارت می‌کنیم تا با کرنل جدید بوت بشیم.

وقتی فرایند بوت انجام شد با دستور زیر proxmox رو نصب می‌کنیم:

خب بعد از نصب proxmox از طریق آدرس https://ip:8006 در درسترس خواهد بود. با زدن یوزرنیم روت و پسورد روت سرور اصلی لاگین کنین.

پیکربندی شبکه

الان که دارم اینو می‌نویسم، خون داره از انگشتام می‌چکه و یه حسی بهم میگه که امیر بیخیال نوشتن بشو :))

ولی خب می‌نویسم.

قبلاً گفتم که من یه سابنت از هتزنر گرفتم با مشخصات زیر

 

این به این معنی هست که من این آی‌پی‌ها رو میتونم داشته باشم که اولی و آخری البته قابل استفاده نیستن:

پس طبق منطق من ۶ تا دونه آی‌پی دارم که می‌تونم ازشون برای ساخت ۶ تا ماشین مجازی و یا کانتینر استفاده کنم.

قبل از هرچیزی چندتا پیشرفرض رو باید داشته باشیم.

MAIN IP منظور آی‌پی سرور اصلی هست

MAIN NETMASK منظور netmask آی‌پی سرور اصلی هست که از طریق بخش IPs توی پنل روبات قابل پیدا کردن هست

MAIN GATEWAY که منظور گیت‌وی آی‌پی سرور اصلی هست

MAIN NETWORK که اولین آی‌پی سابنت آی‌پی اصلی‌مون هست.

SUBNET’1 IP اولین آی‌پی سابنت

SUBNET’2 IP دومین آی‌پی سابنت

و الی آخر تا

SUBNET”6 IP آخرین آی‌پی سابنت

یادتون باشه که این مقادیر رو با اونی که از روبات گرفتین باید تعویض کنین 😛

برای کانفیگ سرور اصلی اول فایل /etc/network/interfaces روباز کنین.

با محتوای بخش eth0 که کارت شبکه سیستم هست کاری نداریم

یه بخش اضافه می‌کنیم برای کارت شبکه مجازی ما که قراره کار bridge رو روی VM (ماشین مجازی) انجام بده.

کل کانفیگ ما به این شکل درخواهد اومد.

فایل رو ذخیره می‌کنیم و با زدن دستور زیر شبکه سرور رو ری‌استارت می‌کنیم:

اگه ایرادی نشون نداد یعنی که ما همه چیز رو درست رفتیم و اگه نشون داد باید برطرفش کنیم (همچین جوادخیابانی طور گفتم :)))

ساخت اولین ماشین مجازی

قبل از هرکاری لازمه که ما ایزوی توزیع مورد نظرمون که اینجا من از اوبونتو استفاده کردم رو روی proxmox قرار بدیم.

دو راه برای این‌کار وجود داره.

روش اول:

وارد پنل proxmox بشید و از طریق منوی سمت چپ رو بروی Contents روباز کنین. یه بخشی براتون باز میشه آپلود رو بزنین و ایزوی اوبونتو یا دبیان یا سنت‌اواس رو که قبلاً دانلود کرده بودین از اینجا آپلود کنین و منتظر بمونین کلیک کنید.

روش دوم:

توی سرور به دایرکتوری /var/lib/vz/template/iso برید و از طریق لینک مستقیم ایزوی اوبونتو سرور مثل این و ابزار wget ایزو رو روش دانلود کنین.

حالا وقتشه که ماشین مجازی رو بسازیم.

از منوی بالا سمت راست گزینهٔ Create VM رو می‌زنیم.

اسم و ID براش انتخاب می‌کنیم. توی تب OS

توی تب CD/DVD گزینهٔ

مرحله بعدی به اندازه نیاز فضا براش انتخاب می‌کنیم.

بعدش به اندازه کافی CPU و بعد از اون هم رم به اندازه نیاز بهش اختصاص میدیم.

اما اصلی ترین‌بخش شبکه‌ست.

Bridged mode رو انتخاب می‌کنیم و VLAN Tag رو خالی می‌زاریم اما از بخش Bridge vmbr0 رو انتخاب می‌کنیم. Model رو هم VirtIO انتخاب می‌کنیم و میریم مرحله بعدی و finish رو می‌زنیم.

منتظر میشیم تا سرور ساخته بشه. بعد از ساخته شدنش انتخابش می‌کنیم و start رو می‌زنیم و بعد از اون روی دکمه console کلیک می‌کنیم تا یه پنجره VNC برامون باز شه تا بتونیم سیستم‌عامل رو نصب بکنیم.

تمام مراحل نصب رو میریم جلو اما باید یادمون باشه که موقع نصب و در بخش تنظیمات شبکه باید گزینه install without configuring network رو بزنیم. مراحل نصب رو پیش میریم و می‌زاریم که نصب تموم شه.

بعد ریبوت می‌کنیم.

وقتی که سیستم‌عامل اومد بالا فایل /etc/network/interfaces روباز می‌کنیم و محتویات زیر رو داخلش وارد می‌کنیم:

dns-nameserversهایی که میبینین توسط خود هتزنر ارائه شده و برای اینکه شبکه به خوبی کار کنه باید وجود داشته باشن.

ماشین مجازی رو ریبوت می‌کنیم و الان با نصب openssh-server میشه بهش ssh داشت و همه چی اوکی هست.

تا الان با نصب و کانفیگ درست یه ماشین مجازی روی روت‌سرور بودیم.

اما اگه نخوایم از ماشین مجازی استفاده کنیم و بخوایم از containerها استفاده کنیم چی؟

اگه نمیدونین فرق بین container با ماشین مجازی چیه بهتره گوگلش کنین.

منم اگه بتونم یه روز در موردش می‌نویسم.

پیکربندی Container

وارد پنل proxmox بشید و از طریق منوی سمت چپ رو بروی Contents روباز کنین. یه بخشی براتون باز میشه templates رو بزنین و براساس نیازتون یه temlpate انتخاب کنین و Download رو بزنین.

بعد از اتمام از منوی سمت راست بالا Create CT رو بزنین.

براش اسم، آی‌دی و پسورد و یا کلید عمومی ssh رو وارد کنین، اگه لازمه و امنیت مهمه براتون تیک Unprivileged container رو بزنین تا دسترسی روت رو ببنده.

تب بعد Template اون تمپلیتی رو که دوست دارین انتخاب کنین، تب بعدی فضای ذخبره سازی تب بعدش میزان سی‌پی‌یو و بعد از اون هم رم رو انتخاب کنین.

توی تب شبکه تنها بخشی که باید تغییر کنه بخش IPv4 هست که یه آی‌پی از سابنت انتخاب کنین و توی IPv4/CIDR بنویسید و تهش یه /۳۲ بزارید. مثلا:

۱۹۲٫۱۶۸٫۱٫۱۰۰/۳۲

توی بخش Gateway هم آی‌پی سرور اصلی رو وارد کنین و. IPv6 رو هم روی DHCP بزارین و در صورت نیاز DNS روکه تب بعدی هست پرکنین و بعدش finish رو بزنین.

container شما بدون هیچ مشکلی بالا میاد.

یکم طولانی شد و فکر کنم برای الان کافیه. توی پست‌های بعد نحوه راه‌اندازی IPv6 و راه‌اندازی یه شبکه داخلی بین ماشین‌های مجازی و containerها و همچنین تقاوت بین container و ماشین مجازی باید بنویسم.

در ضمن تاجایی که تونستم هرچیزی رو که ممکنه ابهام ایجاد بکنه رو هم به ویکیپدیا یا سایت اصلی‌ش لینک دادم تا اگه کسی نمیدونه با خوندنش بفهمه اون مفهوم رو.

 

آپدیت۱: امروز من دیدم که به جز دوتا آی‌پی بقیه‌شون به اینترنت وصل نیستن. کلی ور رفتم و … خسته شدم و خوابیدم. صبح بیدار شدم و دستور زیر رو وارد کردم:

دیدم که یه سری از آی‌پی‌ها بهشون مک آدرس داده شده که خب نباید این‌طور باشه و دقیقاً هم همون آی‌پی‌هایی بودن که باهاشون مشکل داشتم و دیدم که آی‌پی هایی که وصل هستن جلوی HWaddress زده [Incomplete]

سرور رو ریبوت کردم، درست شدن. :))

راه‌حل همگام سازی دو مخزن در گیت

git logo

سلام

 

اخیراً داریم به همراه دوستای خوبم یه پروژه‌ای رو ران می‌کنیم که تا حالا اسمش کادوپیچ رو گذاشتیم روش (که صد البته قراره عوض بشه اسمش )

 

توی این پروژه ، لازم بود که روی دوتا ریپوزیتوری یا مخزن گیت هم‌زمان sync (همگام سازی) باشیم(اگه نمی‌دونین گیت چی هست ویکی‌پدیا بهترین جاست برای اینکه بفهمین گیت چی هست و VCS ها چیا هستن ).یه مخزن برای دیپلوی کردن روی Heroku و مخزن دیگه روی گیت‌لب برای مدیریت دسته‌جمعی کدهای پروژه و کدهایی که اعضای تیم‌ می‌نویسن و …

کاری که باید می‌کردم من این بود که با هربار push کردن ، روی هردوتا سرور اطلاعات push می‌شد.(اگه کارکردن با گیت رو بلد نیستین پیشنهاد می‌کنم حتما یکی دوروز روش وقت بزارین تا یادش بگیرین.خیلی خیلی باحاله 🙂 )

با یکم سرچ به این وب‌لاگ رسیدم که مطلب خوبی در این مورد نوشته بود که منم بد ندیدم بیام و اون مطلب رو با زبون فارسی دوباره منتشرش کنم 🙂

قبل از هرکاری باید بگم که اسم مخزن رو با عبارت PROJECT تعویض کردم.موقع استفاده یادتون باشه که اسم‌ها رو درست کنین 🙂

اول از همه توی دایرکتوری پروژه کافیه عبارت زیر رو وارد کنین و خروجی‌ش رو ببینین.

که خط اول دستوری هست که من توی Terminal وارد کردم و دو خط بعدی خروجی دستور هست

دایرکتوری PROJECT/.git/config هم اطلاعات مشابهی رو نشونم میداد

 

حالا با زدن دستور زیر به راحتی می‌تونم مخزن گیت‌لب رو اضافه کنم و دیتام رو به راحتی هم به heroku  و هم به گیت‌لب  push کنم

 

خروجی این دستور رو هم می‌بینیم

 

همم همه چیز به نظر اوکی هست منتها یه ایرادی هست

نمی‌تونم چیزی رو از گیت‌لب بگیرم 🙁

یعنی نمی‌تونم pull کنم

خب حالا باید چیکار کنم ؟

همم باید اطلاعات هردوتا ریموت سرور رو اضافه کنم

چجوری ؟

این‌جوری :

با بررسی خروجی دستور زیر باید دید همه‌چیز درست شده یا نه

 

به نظر همه چیز درسته 🙂

بهتره فایل config توی PROJECT/.git/config رو هم بررسی کنیم :

 

خب این فایل هم درست داره کار می‌کنه

بعد از pull کردن هم به هیچ مشکلی برنخوردم

خداروشکر همه چیز درسته 🙂

 

همین:)