سجاد جلیلیان
سجاد جلیلیان
خواندن ۵ دقیقه·۴ سال پیش

راهنمای دولوپ با گیت روی دو کامپیوتر جداگانه

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

شروع مشکلات

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

اگه اینجا هستید حتمن در مورد git و کاربردش و روش استفاده ازش میدونید. شرکت ما هم مثل اکثر شرکت‌ها از این تکنولوژی برای version control استفاده میکنه. شما می‌تونید از گیت روی هرچندتا سیستم که بخاید استفاده کنید، پروژه‌ها رو clone کنید و روشون کار کنید و... اما وقتی پای دولوپ کردن وسط باشه یه مشکل بوجود میاد که در نگاه اول ممکنه متوجهش نشید!

مشکل کدهای ناتمام

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

راه‌حل‌های شکست خورده

  • استفاده از فلش مموری یا هارد اکسترنال: خیلی انتخاب راحتی به نظر میرسه اما اینکار یک مشکل بزرگ داشت. اینکه اگه فلش گُم بشه چی؟ کد متعلق به شرکت توی این فلش(هارد) قرار داره و من برای نگهداری و عدم افشا تعهدنامه امضا کردم. فلش و هارد خیلی راحت‌تر از لپتاپ گم و گور میشن!
    اگه خراب بشه و من کلی کد کامیت نشده روش داشته باشم چی؟
  • استفاده از dropbox و google drive و همنوعانشون: مشکل اینجاست که در پروژه‌های بزرگ تعداد فایل‌های ریز خیلی زیاده و اگه پوشه‌ی git رو هم بهش اضافه کنیم هزاران فایل داریم که باید sync بشن. درسته که حجم فایل‌ها کمه ولی تعداد و تغییرات بالاست، به عنوان مثال zip کردن یه پروژه همراه با مخلفاتش واسه من بیشتر از ۳۰ دقیقه طول میکشید. هربار sync کردن پروژه توی دراپ‌باکس خیلی کُند و زمانبر بود.

راه حل فعلی من، استفاده از git branch موقت

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

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

و اما روند انجام کار

روی کامپیوتر شماره یک

با دستور git branch روی local یک برنچ موقت میسازیم،‌ که کدهای خودمون رو بتونیم درش ذخیره کنیم.

git branch my-temporary-branch

با دستور git checkout وارد برنچ موقت خودمون میشیم.

git checkout my-temporary-branch

با دستور git commit -m یک کامیت موقت رو ایجاد میکنیم که کدهای نیمه‌کاره خومون رو فعلن توش ذخیره کنیم تا بتونیم بعدن از اونها استفاده کنیم.

git commit -m 'I commit some unfinished code'

با دستور git push --set-upstream برنچ موقت به سرور گیت(remote) خودمون ارسال میکنیم. معمولن اسم سرور origin است.

git push --set-upstream remote-name my-temporary-branch

و در کامپیوتر شماره دوم

اگر روی local پروژ خودمون رو نداریم اون رو با استفاد از git clone دریافت می‌کنیم.

git clone git@my-git-host.com/......../my-app.git

با استفاده از دستور git branch -r میتونیم لیست تمام برنچ‌های روی remote رو ببینیم.

git branch -r

با دستور git fetch برنچ موقت رو از remote روی سیستم لوکال خودمون دریافت میکنیم.

git fetch remote-name my-temporary-branch:my-temporary-branch

با دستور git checkout وارد برنچ موقت که اون رو دریافت کردیم میشیم.

git checkout my-temporary-branch

در اینجا با زدن git log آخرین کامیت که قبل از این کامیت موقتی داشتیم رو می‌بینیم و hash اون کامیت رو کپی میکنیم تا ازش برای برگشتن به اون کامیت استفاده کنیم.

با استفاده از git reset --soft کامیت ما حذف میشه ولی تغییراتی که در اون کامیت داشتیم حفظ میشه و از بین نمیره.

git reset --soft 6505a2e728175959......................

حالا باید این تغییرات رو به برنچی که توی کامپیوتر دوم روش داشتیم کار میکردیم منتقل کنیم. من فرض میکنم که برنچ master بوده.

با استفاده از git stash همه‌ی تغییرات رو ذخیره میکنیم.

git stash

توی گیت stash اینجوریه که شما میتونید بین برنچ‌ها جابجا بشید ولی استش‌های خودتون رو روی هر برنچی که خاستید موجود داشته باشید.

با استفاده از دستور git checkout وارد برنچ مقصد که اینجا master است میشیم.

git checkout master

با استفاده از دستور git stash pop آخرین stash که تغییرات از برنچ موقت خودمون درش ذخیره کرده بودیم رو توی برنچ حاضر وارد میکنیم و خود stash رو حذف میکنیم.(اگه یوقت خاستین استش حذف نشه از گزینه‌ی apply استفاده کنید)

git stash pop

با استفاده از دستور git branch -d برنچ موقت رو از local خودمون حذف میکنیم.

git branch -d my-temporary-branch

با استفاده از دستور git push origin --delete برنچ موقت رو از سرور remote حذف میکنیم.

git push origin --delete my-temporary-branch

در اینجا دیگه ما همه‌ی تمیزکاری‌ها رو انجام دادیم و روی کامپیوتر شماره دو آخرین تغییراتی که روی کامپیوتر شماره یک داشتیم رو داریم و می‌تونیم به دولوپ خودمون ادامه بدیم :)

گیتgitremoteکارریموت
Lifelong learner | sajadjalilian.github.io
شاید از این پست‌ها خوشتان بیاید