احتمالا اولین برنامهای که مینویسید خیلی تاثیرگذار نخواهد بود. شما اشتباههای زیادی مرتکب خواهید شد و هرگز نمیخواهید که به گذشته برگردید. اما به زودی، برنامههای بزرگ و پیچیدهای خواهید نوشت. شاید اکنون مواردی را حذف کنید که بعدها بخواهید آنها را برگردانید یا شاید هم از دوستان خود کمک بگیرید و در حالیکه به کار خود ادامه میدهید، تغییرات آنها را به برنامهتان اضافه کنید.
اینجاست که سیستم کنترل ورژن وارد میشود و این مهارتی است که هر کارفرمایی از شما انتظار دارد که به آن تسلط داشته باشید. همچنین برای هرکسی که روی هر چیزی کار میکند بسیار مفید است.
کنترل ورژن چیست؟
کنترل ورژن به توانایی ذخیرهی موقعیت شما در یک سند یا پوشه اشاره میکند و ذخیرههای قبلی را ارجاع میدهد.
همانطور که این مقاله را مینویسم، جدیدترین تغییرات من به طور مداوم نسخههای قبلی مرا رونویسی میکنند. این کنترل ورژن نیست، چون نمیتوانم به پیشنویس هفتهی پیش دسترسی داشته باشم. اما اگر این کار را با استفاده از Git مینوشتم، ممکن میشد.
Git چیست؟
یک سیستم کنترل ورژن است که توسط لینوس توروالدز در سال ۲۰۰۵ توسعه یافت ( همان شخصی که لینوکس را نوشت). Git به توسعهدهندگان کمک میکند تا وضعیت کد خود را پیگیری کنند و همکاری در Codebase را ممکن میسازد. در ادامه به اجزای اصلی میپردازیم.
اگر میخواهید این مقاله را دنبال کنید، باید Git را روی کامپیوتر خود نصب کنید. یک ترمینال باز کنید و git را در آن تایپ کنید. اگر لیستی از دستورات ممکن را مشاهده کردید، بهتر است ادامه دهید!
در حال حاضر، Git از قبل بر روی بسیاری از کامپیوترها نصب شده است. در صورت نیاز به نصب، میتوانید در اینجا دستورالعملها را برای کامپیوتر خود دنبال کنید.
استفاده از Git
اگر تا به حال از یک برنامهی رایانهای یا یک بازی ویدئویی استفاده کرده باشید، متوجه شدهاید که میتوانید به نسخهی از پیش ذخیره شده برگردید، اینجاست که نیاز به Git را درک میکنید. این کار به سادگی ذخیرهی یک اسنپشات از برنامهی شما در زمان است و تغییرات بین کدی که اکنون دارید و ﺁخرین باری که ذخیره کردید را یادداشت میکند و دیگر نیازی نیست که هر خط کد از برنامه خودتان را پیگیری کنید. Git یادداشتهای در حال اجرا را در یک پوشهی پنهان مخصوص ذخیره میکند.
اجازه دهید این برنامهی جاوااسکریپت را در نظر بگیریم. این سه خط روی کنسول چاپ میشود (خروجی که در مرورگر یا ترمینال خود میتوانید ببینید):
console.log('Hello, this is a git example!')
console.log('And here is another!')
console.log('And yet a third')
دستور git init
اگر بخواهم نسخههای کارم را ذخیره کنم، میتوانم از Git استفاده کنم. اول git init را در ترمینال تایپ میکنم تا بتوانم از آن استفاده کنم. این کار یک پوشهی .git ایجاد خواهد کرد، جایی که Git فایلهای خود را ذخیره میکند.
دستور git add
git add . تمام فایلها را در برنامهی ما ذخیره خواهد کرد. اگر git init را بعد از ایجاد یک فایل یا هر زمانی که فایل جدیدی ساختید اجرا کردید، شما باید به Git فرمان دهید که با این دستور شروع به ردیابی تغییرات در آنها کند.
دستور git commit
سپس من دستور git commit -am "Initial commit” را تایپ میکنم. git commit دستوری است که یک نسخه از کدهای ما ذخیره میکند. نام دیگر دستور -am، (flag) میباشد. flag a یعنی ما همهی تغییرات خود را ذخیره خواهیم کرد. flag m اشاره میکند که ما پس از آن یک پیام ارائه خواهیم کرد، مثل دستور "Initial commit".
چگونه Git تغییرات را ذخیره میکند
اگر ما برنامهی خودمان را تغییر دهیم (مانند تغییر متن خط اول)، ممکن است بخواهیم که یک نسخهی جدید ذخیره کنیم. ما حتی میتوانیم بین نسخهها تغییر ایجاد کنیم، اگر بخواهیم شاهد چگونگی تغییر برنامهی خودمان در طول زمان باشیم.
console.log('Now I have changed the first line.')
console.log('And here is another!')
console.log('And yet a third')
دستور git diff
این چیزی است که در حین اجرای این فرمان به نظر میرسد. Git تفاوت بین کدی که اکنون دارید و ﺁخرین باری که ذخیره شده بود را به شما نشان می دهد. درک کردن این مسائل کمی دشوار است، اما - حذفیها و + الحاقیها هستند. ما متن "سلام، این یک مثال از Git است!" را حذف کردیم و متن "اکنون خط اول را تغییر دادم" را اضافه کردیم. اینگونه است که Git آنچه را که بین نسخهها تغییر کرده است را پیگیری میکند.
diff --git a/git.js b/git.js
index eb0f1d1..8dbf769 100644
--- a/git.js
+++ b/git.js
@@ -1,3 +1,3 @@
+console.log('Now I have changed the first line.')
-console.log('Hello, this is a git example!')
console.log('And here is another!')
console.log('And yet a third')
حالا ما شاهد تغییرات commit خواهیم بود، میتوانیم ادامه دهیم و با این دستور commit جدیدی را ایجاد کنیم: git commit -am 'Update first console log'
این کار تغییراتی که در اولین خط از متن انجام دادهام را ذخیره خواهد کرد.
دستور git log
ما میتوانیم commitهایی که با این دستور انجام دادهایم را از نو مرور کنیم. اگر همین الان در برنامه آن را اجرا کنم، این خروجی را بدست خواهم آورد:
commit 67627dd44e84a3106a18a19e94cf9f3723e59b3c (HEAD -> master)
Author: amberwilkie <amber@amberwilkie.com>
Date: Wed Apr 22 16:55:39 2020 -0400
Update first console log
commit 49fe4152f474a9674a83e2b014a08828209d2690
Author: amberwilkie <amber@amberwilkie.com>
Date: Wed Apr 22 16:54:59 2020 -0400
Initial commit
ما پیامها، زمان انجام و شناسهی منحصر به فرد commitهای خود را میبینیم و میتوانیم در آینده از این commitهای مرجع استفاده کنیم.
دستور git checkout
اگر میخواستیم به گذشته برگردیم و تغییرات مربوط به کد خودمان را از commit قبلی مشاهده کنیم، ما این کار را با فرمان git checkout 49fe4152f474a9674a83e2b014a08828209d2690 انجام میدهیم. Git کد ما را در وضعیت موقتی قرار خواهد داد تا ما بتوانیم ببینیم که کدها در اسنپشات به چه صورتی به نظر میرسد.
من شناسه را برای اولین commit خودم کپی کردم. اگر این فرمان را اجرا کنم، برنامه در خط اول، متن "سلام، این یک مثال از git است" را به من نشان میدهد.
برای بازگشت به آخرین کد، شما باید فرمان git checkout master را تایپ کنید.
Branchها یا شاخهها
اگر در بالا متوجه شده باشید، ما مجبور شدیم که master را تایپ کنیم تا به وضعیت فعلی کد خود برگردیم. چرا؟ چون master نام پیشفرض شاخهی اصلی است، جایی که کدهای ما در آن بروز است. Git برای حفظ کدها به عملیات شاخه زدن یا Branching متکی است. شما میتوانید master را تنهی درخت در نظر بگیرید. ممکن است کنار گذاشته یا موجب تغییراتی شوید، اما در نهایت به تنهی درخت یا همان master بر خواهید گشت. شما میتوانید برای ایجاد یک شاخهی جدید، از فرمان git checkout استفاده کنید.
فرمان git checkout -b new-branch را امتحان کنید. زمانی از فلگ -b استفاده میکنیم که در حال ایجاد یک شاخهی جدید باشیم و بعد از فلگ، نام شاخهی جدید خود را مینویسیم. ما میتوانیم در این شاخهها commitهای زیادی را ایجاد کنیم و سپس ﺁنها را با فرﺁیندی به نام merging (ادغام کردن)، به master برگردانیم. در دیاگرام زیر، نقطهها نشانگر commit هستند. دو شاخه از master ایجاد شده است. در توسعهی نرمافزار، ما غالبا بر خلاف شاخهی master اصلی، این شاخه ها را "feature" مینامیم. شاخهی ﺁبی دوباره با master ادغام شده و شاخهی زرد هنوز هم در حال توسعه است. توجه داشته باشید که حتی اگر شاخهی زرد بعد از شاخهی آبی ایجاد شده بود، فقط تغییرات master در آن شاخه قابل مشاهده خواهد بود. اگر بعضیاوقات شاخهی سومی ایجاد کنیم، تغییراتی از شاخهی اصلی و آبی در شاخهی سوم جدید وجود خواهد داشت.
دستور git merge
git merge همهی commitهایی که در آن شاخه انجام داده بودیم را میگیرد و آنها را به شاخهی master میچسباند و کار شما را ذخیره میکند.
چرا از شاخهها استفاده میکنیم؟
اگر شما به تنهایی کار میکنید، منطقی نیست که کارتان را به چند شاخه تقسیم کنید. چرا همه چیز را فقط در master ذخیره نمیکنید؟
تا زمانی که در مورد کار تیمی با سایر توسعهدهندگان فکر نکنیم، شاخه سازی کاملا واضح نخواهد بود. به این ترتیب، هر توسعه دهنده میتواند شاخهی خود را داشته و تا زمانی که نیاز داشته باشد روی featureهای خود کار کند و در زمان مناسب ﺁن را merge نماید.
Github چیست؟
Github یک پلتفرم رایگان و هاست ابری برای کد است که برای استفادهي شخصی به کار میرود. این پلتفرم با Git در کامپیوترهای شما و همکارانتان کار میکند و به عنوان Origin، برای هر کسی که روی کد کار میکند، خدمت خواهد کرد.
شما و همکارانتان به طور متناوب کدهای خودتان را در GitHub آپلود میکنید و GitHub به مرور زمان ابزاری را برای کمک به مدیریت تغییرات در کد فراهم میکند.
آپلود کدهایتان در Github
ابتدا باید یک حساب Github ایجاد کنید. شما میتوانید از این حساب برای کل حرفهی برنامه نویسی خود استفاده کنید و نکتهی مهمی که بهتر است رعایت کنید این است که از یک اسم حرفهای یا ترجیحا از اسم واقعی خودتان استفاده کنید.
پس از ورود به سیستم، به دنبال + در بالای صفحه بگردید. روی New Repository کلیک کنید. یک نام برای ﺁن انتخاب کنید، بهتر است هم نام همان پوشهای باشد که قبلا commitهای خود را در ﺁن ذخیره کرده بودید. سپس بر روی "Create Repository" کلیک کنید. اکنون میتوانید آدرس url مورد نظر خود را که به آن هدایت شدهاید را کپی کنید و در Origin کدهای خودتان تنظیم کنید.
git remote add origin
حالا ما به codebase دستور میدهیم که کدهای ما را در کجای فضای ابری ذخیره کند.
ما فرمان git remote add origin <your-url> را تایپ خواهیم کرد که origin را برای مخزن ما تنظیم میکند. حالا میتوانیم origin خودمان را Push کنیم تا فضای ابری را در Github ذخیره کنیم.
git push
با فرض اینکه هنوز در شاخهی master هستیم (یعنی شاخهی دیگری را بررسی نکردهایم)، اکنون میتوانیم git push را تایپ کنیم و کد به GitHub میرود.
مشاهدهی کدهایتان
حالا کد شما در Github زندگی میکند. مثالها و توضیحاتی که در مورد مراحل Github زدم را بهطور خلاصه در اینجا مشاهده میکنید.
شما میتوانید با مشاهدهی وضعیت فعلی کد، روی فایلها و پوشههای مخزن کلیک کنید. همچنین میتوانید نسخههای قبلی کد را با کلیک کردن بر روی "X commits" در سمت راست، وسط مشاهده کنید. شما لیستی از commitهای انجام شده در repo را مشاهده خواهید کرد و اگر روی ﺁنها کلیک کنید، میتوانید فایلهای پروژهی خود را همانطور که در ﺁن زمان وجود داشت مرور کنید.
درخواستهای Pull
ویژگیهای زیادی برای Github وجود دارد که مهمترین آنها در همکاری با همکاران، ویژگی درخواست Pull است. یک درخواست Pull، که اغلب به آن PR هم گفته میشود، راهی برای مدیریت تغییرات دریافتی در codebase است. برای ایجاد این کار، شما باید یک شاخهی جدید را در کامپیوتر خود بسازید و حداقل یک commit را در آن شاخه ایجاد کنید، سپس git push origin head را تایپ کنید تا آن شاخه به Github ارسال شود. شما میتوانید نام شاخهی خود را به جای head قرار دهید ولی بهتر است که همه چیز را دقیقا با هم هماهنگ کنید.
حالا وقتی به Github برگردید، باید ببینید که شاخهی شما در دسترس است تا یک PR ایجاد کنید.
اگر روی دکمهی "Compare & pull request" کلیک کنید، میتوانید تنظیمات بسیاری را برای PR خود تغییر دهید. مهمتر از همه انتخاب عنوان و شرح توضیحات آن است. اگر با یک تیم به صورت گروهی کار میکنید، میتوانید همکاران خود را تگ کنید تا از ﺁنها بخواهید که کد شما را بازبینی کنند یا به پروژهها چیزی اضافه کنند و یا بسیاری از ویژگیهای دیگر که احتمالا هنوز هم به آنها اهمیتی نمیدهید.
توجه داشته باشید که ما در حال مقایسهی شاخهها هستیم. در اینجا از شما میخواهیم که تغییراتی را که در شاخهی (pr-example) داده شده است را به شاخهی master اضافه کنید. اما ما میتوانیم هر یک از شاخههای دیگر را در repo هدف قرار دهیم. پس فعلا متوجه شدهاید که فقط شاخهی master نیست که میتوان به آن درخواست Pull داد.
هنگامی که روی دکمهی "Create Pull Request" کلیک میکنید، با این صفحه مواجه خواهید شد:
میتوانید تمام commitهای موجود در این شاخه را مشاهده کنید و همچنین میتوانید درخواست Pull خودتان را merge کنید. آیا به خاطر دارید وقتی که داشتیم در مورد Git حرف میزدیم، چطور میتوانستیم کد خودمان را merge کنیم؟ ما میتوانیم همان عمل را با کد میزبانی ابری در GitHub انجام دهیم. اگر بر روی دکمهی سبز رنگ "Merge pull request" کلیک کنید، تغییرات شما در master ادغام خواهند شد.
دستور git pull
آخرین دستوری که هم اکنون باید بشناسید، git pull است. اگر شما PR خود را به شاخهی master در Github ادغام کنید، اکنون تغییراتی در origin ایجاد میشود که هنوز در رایانهی خود ندارید. اگر شما شاخهی master را بررسی کنید و سپس فرمان git pull origin master را اجرا کنید، تغییراتی که چندی پیش ادغام کرده بودید در رایانهی شما خواهند بود.
➜ git-example git:(master) git pull origin master
From https://github.com/AmberWilkie/git-example
* branch master -> FETCH_HEAD
Updating 67627dd..38ad2da
Fast-forward
git.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
این Fast-forward به Catching up شاخهی master و شاخهي origin ما اشاره دارد. ما این روند را کامل کردیم:
۱. تغییرات در Local
۲. Push کردن به Github و ساخت PR
۳. ادغام کردن PR در داخل master
۴. Pull کردن master در کامپیوتر Local
وقتی گذراندن این مراحل برای شما آسان باشد، شما ۸۰ درصد از راه کسب مهارت در Git و Github را خواهید داشت.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید