دستور git init – از صفر تا صد


در این مطلب، دستور git init به طور کامل و جامع، همراه با ارائه مثالهایی، مورد بررسی قرار گرفته است. در پایان این مطلب، کاربر از کارکردهای هستهای و لیست گسترده ویژگیهای دستور git init آگاه میشود.
دستور git init
در این مطلب به بررسی موارد زیر پرداخته میشود.
- گزینهها و کاربردهای دستور git init
- چشمانداز پوشه git.
- مقادیر محیطی سفارشی شده برای پوشه git init
- دستور git init در مقایسه با git clone
- مخازن git init bare
- الگوهای git init
شایان توجه است که پیش از این، طی مطالب دیگری در مجله فرادرس، به مفاهیم کنترل نسخه و دیگر آموزشهای پیرامون سیستم کنترل نسخه گیت پرداخته شده است. برای مطالعه بیشتر در این رابطه، مطالب زیر پیشنهاد میشوند:
- سیستم کنترل نسخه چیست؟ — راهنمای کاربردی
- راهاندازی مخزن گیت — راهنمای جامع
- نصب گیت در سیستمعاملهای مختلف — راهنمای جامع
- نصب گیت (Git) روی اوبونتو — به زبان ساده
- مفاهیم مقدماتی Git Merge و Git Rebase — به زبان ساده
- ساخت مخزن گیتهاب — از صفر تا صد
- ارائه درخواست Pull در گیتهاب — به زبان ساده
- ۱۰ دستور گیت (Git) که باید آنها را بدانید — فهرست کاربردی
- ۱۰ ویژگی کاربردی گیت هاب (GitHub) که باید آنها را بدانید — راهنمای کاربردی
- چگونه از گیت (Git) به طرز موثرتری استفاده کنیم؟ — به زبان ساده
- آموزش Git برای توسعهدهندگان اندروید (بخش اول) — از صفر تا صد
- آموزش Git برای توسعهدهندگان اندروید (بخش دوم) — از صفر تا صد
- آموزش Git برای توسعهدهندگان اندروید (بخش سوم) – از صفر تا صد
- گیتهاب و نحوه ایجاد یک پروژه موفق در آن – به زبان ساده
- ۷ مورد از بهترین جایگزینهای گیتهاب برای میزبانی پروژههای متن-باز
- تقلبنامه (Cheat Sheet) دستورات گیت
دستور git init یک مخزن گیت جدید میسازد. این مخزن برای تبدیل یک پروژه موجود و نسخهبندی نشده در مخزن گیت یا مقداردهی اولیه یک مخزن جدید و خالی استفاده میشود. اغلب دستورات دیگر گیت، بیرون از یک مخزن مقدماتی قابل استفاده و موجود نیستند؛ بنابراین این اولین دستوری است که در یک پروژه جدید اجرا میشود. اجرای git init یک زیر پوشه git. در پوشه کاری کنونی میسازد که حاوی همه فرادادههای گیت لازم برای مخزن جدید است. این فرادادهها شامل زیرپوشههایی برای اشیا، مراجع و فایلهای الگو میشوند. یک فایل HEAD نیز ساخته میشود که به کامیتهای بررسی شده جاری ارجاع دارد. گذشته از پوشه git.، در پوشه ریشه (Root Directory) از پروژه، یک پروژه موجود بدون تغییر باقیمانده است (برخلاف SVN، گیت نیازی به یک زیرپوشه git. در کلیه زیرپوشهها ندارد).
به طور پیشفرض، git init پیکربندی مقدماتی گیت را برای مسیر زیرپوشه git. انجام میدهد. مسیر زیر پوشه در صورتی که کاربر تمایل داشته باشد این مورد در جای دیگری قرار داشته باشد، قابل ویرایش و سفارشیسازی است. میتوان متغیر محیطی GIT_DIR$ را روی یک مسیر سفارشی تنظیم کرد و git init فایل پیکربندی گیت را مقداردهی اولیه میکند. علاوه بر آن، میتوان آرگومان separate-git-dir-- را به دلایل مشابهی انتقال داد. یک بررسی موردی متداول برای یک زیر پوشه git. مجزا، نگهداری فایل پیکربندی «dotfiles» (از جمله vimrc ،.bashrc. و دیگر موارد) در پوشه خانگی در هنگام حفظ پوشه git.در جای دیگر است.
کاربرد دستور git init
در مقایسه با SVN، دستور git init یک دستور فوقالعاده آسان برای ساخت پروژههای کنترل نسخه جدید است. گیت نیازی به آن ندارد که کاربر یک مخزن بسازد، فایلها را وارد کند و یک کپی کاری را بررسی کند.
علاوه بر آن، گیت نیاز به هیچ سرور از پیش موجودی یا «امتیازات مدیر» (Admin Privileges) ندارد. کاربر تنها نیاز دارد که در زیر پوشه پروژه، cd و git init را اجرا کند و بدین شکل، یک مخزن گیت کاملا کاربردی خواهد داشت.
اکنون، پوشه کنونی به یک مخزن گیت تبدیل میشود. این مورد، یک زیر پوشه git. را به پوشه جاری اضافه میکند و این را امکانپذیر میکند که اصلاحات پروژه ثبت شود.
یک مخزن گیت در پوشه تعیین شده ساخته میشود. اجرای این دستور موجب ساخت یک زیر پوشه میشود که حاوی هیچ چیز به جز زیر پوشه git. نیست. اگر کاربر در حال حاضر git init را روی پوشه پروژه اجرا کرده و حاوی یک زیر پوشه git. است، میتواند به صورت امن git init را دوباره روی پوشه پروژه مشابهی اجرا کند. این کار، موجب لغو پیکربندی git. موجود نمیشود.
مقایسه دستور git init با git clone
شایان توجه است که git init و git clone به سادگی با یکدیگر اشتباه گرفته میشوند. در سطح بالا، هر دو این موارد برای «امور اولیه یک مخزن گیت جدید» (Initialize a New Git Repository) مورد استفاده قرار میگیرند. اگرچه، git clone وابسته به git init است. git clone برای ساخت یک کپی از مخزن موجود مورد استفاده قرار میگیرد.
به طور داخلی، git clone ابتدا git init را برای ساخت یک مخزن جدید فراخوانی میکند. سپس، git clone دادهها را از مخزن جدید کپی و یک مجموعه جدید از فایلهای کاری را بررسی میکند.
مخازن Bare
git init --bare <directory>
دستور بالا، یک مخزن گیت را مقداردهی اولیه میکند؛ اما در عین حال، پوشه کنونی را نیز حذف میکند. مخازن به اشتراک گذاشته شده باید همیشه با پرچم bare-- ساخته شوند. به طور متعارف، مخازن با پرچم bare-- که با git. پایان میپذیرد، مقداردهی اولیه میشوند. برای مثال، نسخه bare از مخزن که my-project نامیده میشود باید در یک پوشه که my-project.git نامیده میشود، ذخیره شوند.
پرچم bare-- یک مخزن میسازد که پوشه کاری ندارد و موجب میشود ویرایش فایلها و کامیت کردن تغییرات در مخزن غیر ممکن باشد. کاربر باید یک مخزن bare را برای ارسال و دریافت کردن از آن بسازد، اما هرگز نباید به طور مستقیم در آن کامیت کند. مخازن مرکزی همیشه باید به عنوان مخازن bare ساخته شوند، زیرا ارسال انشعابها به مخازن غیر bare پتانسیل بازنویسی تغییرات را دارد. میتوان به bare-- به عنوان راهکاری برای نشانهگذاری یک مخزن، به عنوان وسیله ذخیرهسازی، و چیزی مخالف محیط توسعه نگریست. این یعنی برای جریانهای کاری مجازی، مخزن مرکزی bare است و مخازن محلی توسعهدهندگان non-bare است.
متداولترین بررسی موردی برای git init --bare، ساختن یک مخزن مرکزی راه دور است.
ابتدا، به سروری که حاوی مخزن مرکزی است SSH زده میشود. سپس، به هر جایی که کاربر تمایل دارد پروژه را ذخیره کند جا به جایی انجام میشود. در نهایت، از پرچم bare-- برای ساخت یک مخزن ذخیرهسازی مرکزی استفاده میشود. پس از آن، توسعهدهندگان my-project.git را برای ساخت یک کپی محلی روی ماشین توسعه خود، کلون میکنند.
قالبهای git init
git init <directory> --template=<template_directory>
دستور بالا، یک مخزن گیت را مقدماتی میکند و فایلها را از <template_directory> در مخزن کپی میکند. قالبها به کاربر این امکان را میدهند که یک مخزن با یک زیر پوشه از پیش تعریف شده را مقدماتی کند.
کاربر میتواند یک الگو را برای داشتن پوشههای پیشفرض و فایلهایی که به یک مخزن جدید کپی میشوند، پیکربندی کند. الگوهای پیشفرض گیت معمولا در پوشه usr/share/git-core/templates/ قرار میگیرند، اما ممکن است برای کاربران گوناگون، مسیرهای متفاوتی روی ماشین کاربر وجود داشته باشد.
قالبهای پیشفرض، مراجع خوب و مثالهایی از چگونگی به کارگیری ویژگیهای قالب هستند. یک ویژگی قدرتمند قالبها که در قالبهای پیشفرض نمایش داده شده، پیکربندی Git Hook است. کاربر میتواند قالبهایی با Git Hookهای از پیش تعریف شده بسازد و مخزن گیت جدید خود را با hookهای آماده مقدماتی کند.
پیکربندی git init
همه پیکربندیهای <git init <directory آرگومان <directory> را دریافت میکنند. اگر کاربر <directory> را فراهم کند، دستور داخل آن اجرا میشود. اگر پوشه موجود نباشد، ساخته میشود.
علاوه بر گزینهها و پیکربندیهایی که مورد بررسی قرار گرفتند، Git init دارای چندین گزینه خط فرمان دیگر نیز هست. یک لیست کامل از این موارد، در ادامه آمده است.
-Q
--QUIET
این دستور، تنها پیامهای سطح حیاتی (Critical Level)، خطاها و هشدارها را چاپ میکند. سایر خروجیهای دیگر، در نظر گرفته نمیشوند.
--BARE
دستوری که در بالا آمده است، یک مخزن Bare میسازد.
--TEMPLATE=<TEMPLATEDIRECTORY>
دستور بالا، پوشهای را تعیین میکند که قالبها از داخل آن استفاده میشوند.
--SEPARATE-GIT-DIR=<GIT DIR>
یک فایل متنی حاوی مسیر به <git dir> را میسازد. این فایل، همچون لینکی به پوشه git. عمل میکند. این مورد در صورتی مفید است که کاربر قصد ذخیرهسازی پوشه git. را در یک موقعیت جداگانه یا درایور از فایلهای در حال کار پروژه داشته باشد. برخی از کاربردهای متداول separate-git-dir-- در ادامه آمدهاند.
- به منظور نگهداری داتفایلهای (Dotfiles) پیکربندی سیستم (vimrc،.bashrc. و دیگر موارد) در پوشه خانگی، در حالی که پوشه git. را در جای دیگری نگه میدارد.
- هنگامی که سایز مخزن گیت در دیسک بسیار بزرگ شده است و کاربر نیاز به جا به جایی آن به یک درایو با ظرفیت بالای جداگانه دارد.
- هنگامی که کاربر قصد دارد یک پروژه گیت را در یک پوشه که به طور عمومی در دسترس است، مانند www:root، قرار دهد.
- کاربر میتواند git init --separate-git-dir را روی مخزن کنونی فراخوانی کند و git dir. به مسیر تعیین شده <git dir> انتقال داده میشود.
--SHARED[=(FALSE|TRUE|UMASK|GROUP|ALL|WORLD|EVERYBODY|0XXX)]
دستور بالا، مجوزهای دسترسی را برای مخزن جدید فراهم میکند. این مورد تعیین میکند که کدام کاربران (Users) و گروهها (Groups) که از دسترسیهای سطح یونیکس استفاده میکنند، مجوز ارسال/دریافت (push/pull) به/از مخزن را دارند.
مثالها
ساخت یک مخزن جدید برای یک پایگاه کد موجود:
ساخت یک مخزن Bare جدید:
ساخت یک قالب init و مقداردهی اولیه مخزن گیت از الگو:
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش گیت (Git) برای مدیریت نسخه توزیع شده
- مجموعه آموزشهای ابزارهای مهندسی کامپیوتر
- راهنمای پیشرفته Git برای مبتدیان — به زبان ساده
- 1۰ دستور گیت (Git) که باید آنها را بدانید — فهرست کاربردی
^^