راه اندازی مخزن گیت – راهنمای جامع


در این مطلب ابتدا به مبحث اساساچ گیت (Git SSH) و سپس، روش راه اندازی مخزن گیت به طور کامل و جامع پرداخته میشود. پیشتر در مطالبی، به مفهوم «کنترل نسخه» (Version Control)، «سیستم کنترل نسخه گیت» (Git Version Control System)، نصب گیت روی سیستمعاملهای گوناگون و برخی از دستورات گیت پرداخته شد. برای مطالعه بیشتر پیرامون مباحث یاد شده، مطالعه مطالب زیر توصیه میشود:
- سیستم کنترل نسخه گیت (Git) — راهنمای جامع
- نصب گیت در سیستم عامل های مختلف — راهنمای جامع
- نصب گیت (Git) روی اوبونتو — به زبان ساده
- ساخت مخزن گیتهاب — از صفر تا صد
- ارائه درخواست Pull در گیتهاب — به زبان ساده
- ۱۰ دستور گیت (Git) که باید آنها را بدانید — فهرست کاربردی
- سیستم کنترل نسخه چیست؟ — راهنمای کاربردی
کلید اساساچ چیست؟
کلید SSH یک گواهینامه دسترسی برای پروتکل شبکه SSH (شل امن | Secure Shell) است. این پروتکل شبکه تایید و رمزنگاری شده، برای ارتباطات از راه دور بین ماشینها در یک «شبکه باز غیر امن» (Unsecured Open Network) مورد استفاده قرار میگیرد. SSH برای انتقال فایل از راه دور، مدیریت شبکه و دسترسی از راه دور به سیستمعامل مورد استفاده قرار میگیرد. همچنین، از سرنام SSH برای توصیف یک مجموعه از ابزارهایی که برای تعامل با پروتکل SSH مورد استفاده قرار میگیرند، استفاده شده است.
SSH از یک جفت از کلیدها برای آغاز کردن یک دستدهی امن بین طرفین دور از هم استفاده میکند. جفت کلید حاوی یک کلید عمومی و یک کلید خصوصی است. نامگذاری «خصوصی» (Private) در مقابل «عمومی» (Public) میتواند گمراه کننده باشد، زیرا به هر دو آنها کلید گفته میشود. مفیدتر است که به کلید عمومی به عنوان «قفل» و کلید خصوصی به عنوان «کلید» نگاه شود. قفل عمومی به طرفین راه دور داده میشود تا دادهها را «رمزگذاری» (Encrypt) یا «قفل» (Lock) کنند. این دادهها بعدا با کلید «خصوصی» باز میشوند که کاربر آن را در جای امنی نگهداری میکند.
روش ساخت یک کلید اساساچ
کلیدهای SSH از طریق الگوریتم رمزنگاری کلید عمومی تولید میشوند. محبوبترین این الگوریتمها، «RSA» و «DSA» است. در سطح بسیار بالا، کلیدهای SSH از طریق فرمولهای ریاضیاتی تولید میشوند که دو عدد اول را میگیرند و یک متغیر دانه تصادفی برای خروجی دادن کلید عمومی و خصوصی هستند.
این فرمول یک طرفه است و اطمینان حاصل میکند که کلید عمومی از کلید خصوصی قابل اشتقاق است، ولی کلید خصوصی از کلید عمومی قابل اشتقاق نیست. کلیدهای SSH با استفاده از یک ابزار تولید کلید ساخته میشوند. ابزار خط فرمان SSH شامل یک ابزار Keygen است. اغلب ارائهدهندگان خدمات میزبانی گیت، راهنماهایی پیرامون چگونگی ساخت کلید SSH ارائه میکنند.
تولید کلید SSH در مک و لینوکس
هم سیستمعامل لینوکس و هم اواس ایکس دارای برنامههای کاربردی مدرن ترمینال هستند که با SSH Suite نصب شده ارائه میشوند. فرایند ساخت کلید SSH بین آنها مشابه است.
۱. ابتدا باید دستور زیر را اجرا کرد، تا ساخت کلید آغاز شود.
این دستور یک کلید خصوصی جدید را با استفاده از ایمیل به عنوان برچسب، میسازد.
۲. سپس، از کاربر درخواست میشود که فایلی که کلید را در آن ذخیره کرده است، وارد کند. دستور مذکور، «Enter a file in which to save the key.» است. میتوان محل فایل را تعیین کرد و یا «Enter» را برای پذیرفتن موقعیت پیشفرض فشرد.
۳. درخواست بعدی، برای ارائه یک «کلمه عبور» (Passphrase) امن است. یک کلمه عبور امن، یک لایه اضافی از امنیت را به SSH میافزاید و هر زمانی که کلید SSH مورد استفاده قرار میگیرد، لازم است. اگر کسی به کامپیوتر کاربر که کلید خصوصی روی آن ذخیره شده است دسترسی پیدا کرد، میتواند به هر سیستم دیگری که از آن کلید استفاده میکند نیز دسترسی پیدا کند. افزودن یک کلمه عبور به کلیدها، از وقوع این اتفاق جلوگیری میکند.
در این وهله، یک کلید SSH جدید در مسیر فایلی که پیش از این تعیین شد، تولید شده است.
۴. افزودن یک کلید SSH جدید به ssh-agent.
ssh-agent برنامه دیگری است که بخشی از SSH toolsuite محسوب میشود. ssh-agent مسئول نگهداری کلیدهای خصوصی است. به این موضوع، میتوان به عنوان یک keychain نگاه کرد. علاوه بر نگهداری کلیدها، درخواستها را نیز واسطه میکند تا درخواستهای SSH را با کلید خصوصی امضا کنند؛ بنابراین، کلیدهای خصوصی هرگز به طور غیر امنی از جایی عبور نمیکند. پیش از افزودن کلید SSH جدید به ssh-agent، ابتدا باید اطمینان حاصل کرد که ssh-agent در حال اجرا است. این کار را میتوان با اجرای دستور زیر انجام داد.
کلید SSH جدید، اکنون ثبت شده و آماده استفاده است.
تولید کلید SSH در ویندوز
محیط ویندوز دارای یک شل یونیکس پیشفرض نیست. برای آنکه یک تجربه keygen کامل حاصل شود، برنامههای شل خارجی باید نصب شود. سر راستترین گزینه به کارگیری Git Bash است.
هنگامی که Git Bash نصب شد، مراحلی مشابه آنچه که برای لینوکس و مک بیان شد باید با بش شل گیت انجام شود.
Windows Linux Subsystem
windows linux subsystem یک شل لینوکس کامل با محیط سنتی ویندوز ارائه میکند. اگر یک subsystem لینوکس وجود داشته باشد، مراحلی که پیش از این برای لینوکس و مک بیان شد در windows linux subsystem قابل انجام است. به طور کلی، کلیدهای SSH برای تصدیق کردن اتصالات امن مورد استفاده قرار میگیرند. با دنبال کردن این راهنما، کاربر قادر به ساخت و آغاز استفاده از کلید SSH است. گیت قادر به استفاده از کلید SSH به جای اعتبارسنجی رمز عبور سنتی هنگام ارسال یا دریافت از مخازن راه دور است. راهکارهای میزبانی گیت مدرن مانند بیتباکت از اعتبارسنجی کلید SSH پشتیبانی میکنند.
راه اندازی مخزن گیت
در این بخش از مطلب راه اندازی مخزن گیت (Git)، چگونگی راهاندازی یک مخزن (Pepository | Repo) تحت سیستم کنترل نسخه گیت بیان شده است. مطالعه این بخش به مخاطب کمک میکند تا امور اولیه مربوط به یک مخزن گیت را برای یک پروژه موجود و یا جدید، انجام دهد.
آنچه در ادامه بیان میشود، مثالهای جریان کاری از مخزنهایی است که به صورت «محلی» (Locally) و کلون شده (Cloned | کپی شده) از مخزنهای دور ساخته شدهاند. نکات مهمی که در این راهنما پوشش داده شده عبارتند از:
- انجام امور مقدماتی یک مخزن گیت جدید
- کلون کردن یک مخزن گیت جدید
- کامیت کردن (اعمال کردن) یک نسخه ویرایش شده از یک فایل به مخزن
- پیکربندی یک مخزن گیت برای همکاری از راه دور
- دستورات متداول کنترل نسخه گیت
در پایان این بخش، کاربر قادر به ساخت یک مخزن گیت، استفاده از دستورات متداول گیت، کامیت کردن یک فایل ویرایش شده، مشاهده تاریخچه یک پروژه و پیکربندی یک اتصال به یک سرویس میزبانی گیت (بیتباکت) است.
مخزن گیت چیست؟
یک مخزن گیت، یک فضای ذخیرهسازی مجازی است که به کاربر امکان ذخیرهسازی نسخههایی از کد خود را میدهد که در زمان نیاز میتواند به آنها دسترسی داشته باشد.
امور مقدماتی یک مخزن گیت جدید: git init
برای ساخت یک مخزن جدید، از دستور git init استفاده میشود. git init یکی از دستوراتی است که در طول راهاندازی مقدماتی یک مخزن جدید مورد استفاده قرار میگیرد. اجرای این دستور منجر به ساخت یک زیرپوشه git. جدید در پوشه کاری کنونی کاربر میشود. همچنین، این دستور منجر به ساخت یک انشعاب اصلی (Master Branch) جدید میشود.
نسخهبندی یک پروژه موجود، با استفاده از یک مخزن جدید
در این مثال فرض شده است که کاربر در حال حاضر یک پوشه پروژه دارد و میخواهد یک مخزن جدید درون آن بسازد. ابتدا باید با cd به پوشه ریشه پروژه (Root Project Folder) رفت و سپس، دستور git init را اجرا کرد.
با اشاره git init به یک پوشه پروژه موجود، setup راهاندازی مشابهی با آنچه در بالا بیان شد انجام میشود، اما دامنه آن محدود به آن پوشه پروژه است.
کلون کردن یک مخزن موجود: git clone
اگر پروژه در حال حاضر در یک مخزن مرکزی راهاندازی شده است، دستور کلون متداولترین راه برای کاربران به منظور به دست آوردن یک کلون توسعه محلی است. همانند git init، کلون کردن نیز عموما یک فرایند تک مرحلهای است.
هنگامی که یک توسعهدهنده یک کپی کاری را به دست آورد، همه عملیات کنترل نسخه از طریق مخزنهای عمومی مدیریت میشوند.
git clone <repo url>
git clone برای ساخت یک کپی یا کلون از مخزنهای راه دور مورد استفاده قرار میگیرند. به git clone، یک URL مخزن پاس داده میشود. گیت از پروتکلهای شبکه متفاوت و قالبهای URL متناظر آنها پشتیبانی میکند. در این مثال، از پروتکل Git SSH استفاده میشود. URLهای Git SSH از الگوی git@HOSTNAME:USERNAME/REPONAME.git تبعیت میکنند. مثالی از Git SSH URL در ادامه ارائه شده است.
git@bitbucket.org:rhyolight/javascript-data-store.git
که در آن مقادیر الگو تطابق دارند با:
- HOSTNAME: bitbucket.org
- USERNAME: rhyolight
- REPONAME: javascript-data-store
هنگامی که اجرا شد، آخرین نسخه از فایلهای مخزن راه دور روی انشعاب اصلی دریافت و به یک پوشه جدید اضافه میشوند. پوشه جدید در این شرایط پس از REPONAME نامگذاری میشود. در این مثال، javascript-data-store است. پوشه حاوی تاریخچه کامل مخزن راه دور و انشعاب اصلی جدید ساخته شده است.
ذخیرهسازی تغییرات در مخزن: git add و git commit
اکنون که مخزن کلون شد و یا کارهای اولیه آن انجام پذیرفت، میتوان تغییرات نسخه فایل را به آن کامیت کرد. در مثال زیر فرض شده که پروژه در path/to/project/ راهاندازی شده است. گامهایی که در این مثال برداشته شدهاند عبارتند از:
- تغییر پوشهها به path/to/project/
- ساخت یک فایل CommitTest.txt با محتوای ~"test content for git tutorial"~
- git add CommitTest.txt به منطقه شروع عملیات مخزن
ساخت یک کامیت جدید با پیغامی که توصیف میکند چه کاری در کامیت انجام شده است.
پس از اجرای این مثال، در مخزن، CommitTest.txt به تاریخچه اضافه شده است و به روز رسانیهای بعدی به این فایل را دنبال میکند. این مثال، دو دستور دیگر از گیت یعنی add و commit را معرفی میکند. این مثال خیلی محدود بود؛ اما به دستورات git add و git commit در بخشهای دیگر به طور کامل پرداخته شده است.
استفاده دیگری از git add، گزینه all-- است. با اجرای دستور git add --all، هر فایل تغییر یافتهای و هر فایل ردیابی نشدهای در مخزن در مخزن گرفته و به مخزن اضافه میشوند و درخت کاری مخزن به روز رسانی میشود.
همکاری مخزن به مخزن: git push
حائز اهمیت است که ایده گیت از «کپی کاری» (Working Copy) متفاوت از کپی کاری است که کاربر با بررسی کد منبع از یک مخزن SVN دریافت میکند. برخلاف SVN، گیت هیچ تمایزی بین کپیهای کاری و مخزن مرکزی قائل نمیشود (آنها مخزنهای گیت کاملا پرچمگذاری شده هستند).
این امر موجب میشود که همکاری با گیت اساسا از SVN متفاوت باشد. در حالی که SVN بستگی به ارتباط بین مخزن مرکزی و کپی کاری دارد، مدل همکاری گیت بر مبنای تعاملات مخزن به مخزن است. به جای بررسی یک کپی کاری در مخزن مرکزی SVN، کامیتها از یک مخزن به دیگری دریافت و ارسال میشوند.
البته، هیچ چیز مانع از آن نمیشود که به مخزنهای خاصی از گیت، معنای ویژهای بدهد. برای مثال، با طراحی یک مخزن گیت به عنوان مخزن مرکزی، این امکان وجود دارد که یک جریان کاری مرکزی با استفاده از گیت تکثیر شود. این کار به جای آنکه به طور سخت در گیت وجود داشته باشد، به وسیله قراردادهای موجود در این رابطه برای گیت، انجام میشود.
مخزنهای Bare و کلون شده
افرادی که از git clone در بخش پیشین با عنوان «مقدمات یک مخزن» برای راهاندازی مخزن محلی خود استفاده کردهاند، باید بدانند که مخزن آنها برای همکاری از راه دور در حال حاضر پیکربندی شده است. git clone به طور خودکار مخزن کاربر را با یک مخزن راه دور که به Git URL اشاره دارد (که آن از آن کلون شده است) اشاره دارد. این یعنی هنگامی که تغییرات در یک فایل انجام و آنها کامیت شدند، میتوان این تغییرات را به مخزن راه دور git push کرد.
اگر از git init برای ساخت یک مخزن تازه استفاده شده باشد، هیچ مخزن راه دوری برای ارسال تغییرات به آن وجود ندارد. یک الگوی متداول در هنگام مقداردهی اولیه یک مخزن جدید، رفتن به یک سرویس میزبانی گیت مانند Bitbucket و ساخت یک مخزن در آنجا است. سرویس یک Git URL فراهم میکند که میتوان آن را به مخزن محلی اضافه کرد و git push به مخزن میزبانی شده داشت. هنگامی که یک مخزن راه دور با سرویس منتخب کاربر ساخته شد، نیاز به آن است که کاربر مخزن محلی خود را با یک نگاشت محلیسازی کند. اگر کاربر ترجیح میدهد که مخزن راه دور خود را میزبانی کند، نیاز به راهاندازی یک «Bare Repository» دارد. هم git init و هم git clone، آرگومان bare-- را میپذیرند. متداولترین بررسی موردی برای مخزن bare، ساخت یک مخزن گیت مرکزی راه دور است.
پیکربندی و راهاندازی: git config
هنگامی که راهاندازی یک مخزن راه دور انجام شد، کاربر نیاز به آن دارد که یک URL مخزن راه دور را به git config محلی اضافه و یک انشعاب بالایی (Upstream Branch) برای شاخههای محلی تنظیم کند. دستور git remote، این قابلیتها را فراهم میکند.
این دستور، مخزن راه دور در <remote_repo_url> را به یک مرجع در مخزن محلی کاربر تحت <remote_name> نگاشت میکند. هنگامی که کاربر مخزن راه دور را نگاشت کرد، میتوان انشعابهای محلی را ارسال کرد.
این دستور انشعاب، مخزن محلی را تحت <local_branc_name> به مخزن راه دور در <remote_name> ارسال میکند. علاوه بر پیکربندی URL یک مخزن محلی، کاربر نیاز به تنظیم گزینههای سراسری پیکربندی گیت مانند نام کاربری یا ایمیل دارد. دستور git config به کاربر امکان پیکربندی نصب گیت (یا یک مخزن شخصی) را از خط فرمان میدهد. این دستور میتواند هر چیزی را از اطلاعات کاربر گرفته تا کارایی را به رفتار مخزن بیفزاید. چندین گزینه پیکربندی متداول در ادامه ارائه شده است. گیت گزینههای پیکربندی را در سه فایل جدا از هم ذخیره میکند . این کار برای کاربر، گزینههای دامنه (Scope Options) را برای مخازن شخصی (محلی)، کاربر (سراسری) یا کل سیستم (system) فراهم میکند.
- محلی: تنظیمات repo>/.git/config – Repository-specific>
- سراسری: تنظیمات gitconfig – User-specific./. این جایی است که گزینههای تنظیم شده با پرچم global-- ذخیره میشوند.
- سیستم: تنظیمات سطح سیستم prefix)/etc/gitconfig)$
تعریف نام پدیدآورنده برای آنکه برای همه کامیتها در مخزن کنونی مورد استفاده قرار بگیرد. معمولا، کاربر از پرچم global-- برای تنظیم گزینههای پیکربندی برای کاربر جدید استفاده میکند.
افزودن گزینه local-- یا عدم ارسال یک گزینه سطح پیکربندی، user.name را برای مخزن محلی جاری تنظیم میکند.
تعریف ایمیل پدیدآورنده به منظور استفاده از آن برای همه کامیتهایی که توسط کاربر جاری انجام میشود، صورت میپذیرد.
یک میانبر برای دستور گیت باید ساخته شود. میانبر، ابزار قدرتمندی برای ساخت دستوراتی از گیت است که به طور متداول مورد استفاده قرار میگیرند. مثال سادهای از این مورد در ادامه آورده شده است.
این مورد، یک دستور ci میسازد که میتوان آن را به عنوان میانبر برای git commit اجرا کرد.
میتوان ویرایشگر متنی که با دستوراتی مانند git commit مورد استفاده قرار گرفته است را برای همه کاربران روی ماشین کنونی تعریف کرد. آرگومان <editor> باید دستوری باشد که ویرایشگر مورد انتظار را راهاندازی میکند (برای مثال، Vi). آرگومان <editor> باید دستوری باشد که ویرایشگر دلخواه کاربر (مثلا Vi) را باز میکند. این مثال، گزینه system-- را معرفی میکند. گزینه system-- پیکربندی را برای کل سیستم - همه کاربران و مخازن روی یک ماشین - راهاندازی میکند.
فایل پیکربندی سراسری در ویرایشگر متن برای دستکاری دستی انجام میشود.
سایر نکات
همه گزینههای پیکربندی در فایلهای متن غنی (Plaintext) ذخیره میشوند؛ بنابراین، دستور git config یک رابط خط فرمان واقعا راحت است. معمولا، کاربر فقط به پیکربندی نصب گیت در اولین باری که کار روی یک ماشین توسعه جدید را آغاز کرد نیاز دارد و به صورت مجازی همه موارد، از پرچم global-- باید استفاده کرد.
یک استثنای مهم در این رابطه، لغو ایمیل آدرس نویسنده است. کاربر ممکن است تمایل به تنظیم ایمیل آدرس شخصی خود برای مخازن شخصی و متنباز و ایمیل کاری برای مخازن مربوط به کار داشته باشد. گیت گزینههای پیکربندی را در سه فایل جداگانه ذخیره میکند که به کاربر امکانات دامنه را برای مخازن شخصی، کاربران یا کل سیستم میدهد:
- تنظیمات مختص منبع repo>/.git/config>
- تنظیمات مختص کاربر gitconfig./~
- تنظیمات سطح سیستم prefix)/etc/gitconfig)$
هنگامی که گزینههای موجود در این فایلها با یکدیگر تناقض داشته باشند، تنظیمات محلی، تنظیمات کاربر را لغو میکند که موجب لغو تنظیمات سطح سیستم میشود. اگر کاربر هر یک از این فایلها را باز کند، چیزی مانند آنچه در زیر آمده است را مشاهده میکند.
میتوان این مقادیر را به صورت دستی ویرایش کرد که تاثیری کاملا مشابه با git config دارد. مثالی در همین رابطه در ادامه آمده است. اولین چیزی که کاربر میخواهد پس از نصب گیت انجام دهد آن است که نام/ایمیل خود را بگوید و برخی از تنظیمات پیشفرض را سفارشیسازی کند. یک پیکربندی اولیه متداول، ممکن است چیزی شبیه زیر باشد. ابتدا، باید تنظیمات گیت (git config) پیرامون اینکه کاربر چه کسی است ارائه شود.
سپس، ویرایشگر متن دلخواه کاربر انتخاب میشود.
اکنون، برخی از اسامی مستعار شبه SVN اضافه میشوند.
این اقدامات موجب میشود که فایل gitconfig./~ از بخش پیشین ساخته شود. در این مطلب، چگونگی راه اندازی مخزن گیت با استفاده از دو متد git init و git clone بیان شد. از این راهنما میتوان برای مدیریت کدهای نرمافزاری و دیگر محتوایی که نیاز به نسخهبندی دارد، استفاده کرد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش گیت (Git) برای مدیریت نسخه توزیع شده
- مجموعه آموزشهای ابزارهای مهندسی کامپیوتر
- راهنمای پیشرفته Git برای مبتدیان — به زبان ساده
- 1۰ دستور گیت (Git) که باید آنها را بدانید — فهرست کاربردی
^^