git init چیست؟

git init چیست؟

این مطلب دستور git init را با جزئیات بیشتری بررسی می کند. در انتهای این بخش شما از عملکرد و قابلیت های git init آگاه خواهید شد. این بررسی شامل:

  • گزینه ها و موارد استفاده git init
  • بررسی پوشه .git
  • git init در مقابل git clone
  • مخزن های bare و git init
  • قالب های git init

دستور git init یک مخزن جدید ایجاد می کند. از این دستور می توان برای یک پروژه ی موجود یا یک پروژه ی جدید استفاده کرد. بیشتر دستور های گیت خارج از یک مخزن تعریف شده، کار نمی کنند به همین دلیل این دستور بیشتر وقت ها اولین دستوری است که در یک پروژه ی جدید اجرا می شود.

اجرای git init یک پوشه ی .git  در مسیر فعلی ایجاد می کند که تمام Meta data ی مورد نیاز گیت برای پروژه ی جدید را در خود نگه می دارد. این Meta data شامل پوشه هایی برای فایل های مرجع، قالب و object های گیت است. یک فایل HEAD هم ساخته می شود که به کامیت check out شده اشاره می کند.

علاوه بر پوشه ی .git در مسیر اصلی پروژه، پوشه ی پروژه هیچ تغییر دیگری نمی کند (بر خلاف SVN، گیت در هر پوشه، پوشه ی .git را ایجاد نمی کند).

به طور پیش فرض git init  پیکربندی گیت را در پوشه ی .git قرار می دهد. مسیر  پیکربندی قابل شخصی سازی است. شما می توانید مقدار متغیر $GIT_DIR را به مسیر دلخواه خود تغییر دهید تا git init فایل های پیکر بندی را در  آنجا قرار دهد. علاوه بر این شما می توانید از گزینه ی --separate-git-dir برای همین کار استفاده کنید.

کاربرد

در مقایسه با SVN، دستور git init راهکار بسیار آسانی برای ایجاد یک پروژه ی دارای کنترل نسخه است. گیت شما را مجبور به ساخت مخزن و وارد کردن فایل ها نمی کند. علاوه بر این، گیت به هیچ سرور و دسترسی خاصی نیاز ندارد. تمام کاری که باید انجام دهید این است که با استفاده از دستور Cd به مسیر دلخواه خود رفته

 و دستور git init را در آنجا اجرا کنید تا یک مخزن کامل داشته باشید.

git init

با این کار پوشه ای که در آن هستید را به یک مخزن گیت تبدیل می کنید. این دستور یک پوشه ی .git به پوشه ی فعلی اضافه می کند و به شما این امکان را می دهد که تغییرات پروژه را ثبت کنید.

git init <directory>

یک مخزن خالی گیت در مسیر داده شده بسازید. اجرای این دستور یک پوشه ی جدید می سازد که در آن چیزی جز پوشه .git وجود ندارد.

اگر پیش از این دستور git init را در پروژه ای اجرا کرده اید و پوشه ی .git ایجاد شده است، می توانید با خیال راحت دوباره دستور git init را اجرا کنید. انجام این کار هیچ کدام از پیکربندی های قبلی را بازنویسی نمی کند.

git init در مقابل git clone

دستور های git init و git clone را به راحتی می توان با یک دیگر اشتباه گرفت. به طور کلی هر دوی آنها می توانند برای ایجاد یک مخزن گیت استفاده شوند. اما git clone به git init وابسته است. git clone برای گرفتن کپی از یک مخزن موجود استفاده می شود. در اصل، git clone ابتدا git init را صدا می زند تا یک مخزن جدید ایجاد کند. پس از آن اطلاعات موجود در یک مخزن را در مخزن تازه ی ایجاد شده کپی می کند. در مطلب git clone می توانید بیشتر درمورد این دستور مطالعه کنید.

مخزن های bare (git init --bare)

git init --bare <directory>

مخزن های به اشتراک گذاشته شده همیشه باید با گزینه ی –bare ساخته شوند. نام مخزن های bare به طور معمول با .git تمام می شود. برای نمونه نسخه  ی  bare یک مخزن با نام my-project با نام my-project.git ساخته می شود.

گزینه ی –bare مخزنی می سازد که نمی توان در آن فایلی را ویرایش کرد و یا تغییری را کامیت کرد. مخزن bare را می سازیم تا در آن git push و git pull انجام دهیم اما هرگز به طور مستقیم کامیتی در آن ثبت نکنیم. مخزن های مرکزی همیشه باید به صورت bare ساخته شوند زیرا push کردن branch ها به یک مخزن عادی ریسک بازنویسی شدن تغییرات را دارد. –bare  را به عنوان نشانه ی مرکز ذخیره سازی بودن یک مخزن در نظر بگیرید. این به این معنی است که تقریبا در همه ی گردش کارهای گیت، مخزن مرکزی bare است و مخزن local توسعه دهنده ها، عادی است.

معمول ترین کاربرد برای مخزن های bare، ایجاد یک مخزن مرکزی است.

ssh <user>@<host> 
cd path/above/repogit init --bare my-project.git

ابتدا به سروری که می خواهیم مخزن مرکزی در آن قرار بگیرد، وصل می شویم. سپس به مسیر مورد نظر برای مخزن رفته و با استفاده از گزینه ی –bare دستور git init را اجرا می کنیم. پس از آن، توسعه دهنده ها مخزن my-project.git را برای ایجاد یک کپی در سیستم local خود، clone می کنند.

قالب های git init

git init <directory> --template=<template_directory>

یک مخزن جدید گیت ایجاد می کند و فایل ها را از <template_directory> به درون مخزن کپی می کند. قالب ها این امکان را به شما می دهند که یک مخزن جدید با پوشه ی .git از پیش تعریف شده ایجاد کنید. شما می توانید یک قالب را طوری پیکربندی کنید که فایل ها و پوشه های پیش فرض داشته باشد تا زمانی که یک مخزن را با آن قالب ایجاد می کنید تمام فایل ها و پوشه ها در پوشه ی .git مخزن جدید کپی شوند. قالب پیش فرض گیت معمولا در مسیر /usr/share/git-core/templates قرار دارد اما ممکن است این مسیر در سیستم شما متفاوت باشد.

قالب های پیش فرض، مرجع و مثال خوبی از چگونگی استفاده از قالب ها هستند. یک قابلیت قدرتمند قالب ها که  توسط قالب پیش فرض نشان داده شده است، پیکربندی Git Hook است. شما می توانید یک قالب با Git hook های از پیش تعریف شده بسازید و مخزن جدید خود را با hook های آماده تعریف کنید. درباره ی Git Hook ها در مطلب مربوط به Git Hook بیشتر مطالعه کنید.

پیکربندی

تمام پیکربندی های دستور git init ورودی <directory> را می پذیرند. اگر مسیر را بدهید، دستور درون آن اجرا می شود. اگر آن مسیر وجود نداشته باشد، ساخته می شود. علاوه بر گزینه ها و پیکربندی های اشاره شده، git init چند گزینه ی دیگر هم دارد. لیست کامل آن در زیر آمده است:

-Q یا –QUIET

تنها پیام هایی در سطح ضروری، خطاها و هشدار ها را نمایش می دهد. سایر خروجی های دیگر خاموش می شوند.

--BARE

یک مخزن bare می سازد. (بخش مربوط به مخزن های bare را در این مطلب مطالعه کنید).

--TEMPLATE=

مسیری که قالب ها از آن استفاده می شوند را مشخص می کند. (بخش قالب های git init را مطالعه کنید).

--SEPARATE-GIT-DIR=

یک فایل متنی شامل مسیر پوشه ی .git می سازد. این فایل مانند یک لینک به پوشه ی .git عمل می کند. این گزینه هنگامی که می خواهید پوشه ی .git را در مسیری به جز مسیر پروژه ذخیره کنید، کاربرد دارد. برخی از موارد استفاده برای --separate-git-dir عبارت اند از:

  • فایل های پیکربندی سیستم (مانند .bashrc و .vimrc و...) را در مسیر home و پوشه .git را در محلی دیگر نگهداری کنید.
  • حجم اشغال شده توسط تاریخچه گیت شما زیاد شده است و باید آن را به محلی دیگر که ظرفیت مناسبی دارد جا به جا کنید.
  • می خواهید یک پروژه ی گیت در مسیری که به صورت عمومی در دسترس است داشته باشید. (مانند www:root)

می توانید git init --separate-git-dir را در یک مخزن موجود اجرا کنید تا پوشه ی .git به مسیر مشخص شده جا به جا شود.

--SHARED[=(FALSE|TRUE|UMASK|GROUP|ALL|WORLD|EVERYBODY|0XXX)]

مجوز های دسترسی را برای مخزن جدید تعریف کنید. این گزینه مشخص می کند کدام کاربرها و گروه ها با استفاده از مجوز های Unix اجازه دارند در مخزن push/pull انجام دهند.

مثال ها

ساخت یک مخزن جدید برای پروژه ی موجود

cd /path/to/code \
git init \
git add . \
git commit

ساخت یک مخزن bare جدید

git init --bare /path/to/repo.git

ساخت یک قالب git init و تعریف مخزن جدید از آن قالب

mkdir -p /path/to/template \
echo "Hello World" >> /absolute/path/to/template/README \
git init /new/repo/path --template=/absolute/path/to/template \
cd /new/repo/path \
cat /new/repo/path/README

در این مثال ابتدا یک پوشه به نام template در آدرس مطلق داده شده می سازیم. سپس عبارت Hello World را در فایلی با نام README در آن مسیر قرار می دهیم. با کمک دستور git init یک مخزن جدید در آدرس مطلق داده شده می سازیم و همچنین با استفاده از گزینه ی template قالب مورد نظر را مشخص می کنیم. در نهایت برای اینکه مطمئن شویم مخزن با قالب ما درست شده است به آدرس مخزن رفته و با کمک دستور cat محتویات فایل README را می بینیم.

3-1
راه اندازی یک مخزن
سید علیرضا جزائری
۱۴۰۰/۰۳/۰۲
3-2
git init چیست؟
سید علیرضا جزائری
۱۴۰۰/۰۳/۰۵
3-3
Git Clone چیست؟
فاطمه خانکی
۱۴۰۰/۰۳/۱۱
3-4
git config چیست؟
فاطمه خانکی
۱۴۰۰/۰۳/۱۲
3-5
Git Alias چیست؟
سجاد رنجبر
۱۴۰۰/۰۳/۱۸
3-6
ذخیره تغییرها
فاطمه خانکی
۱۴۰۰/۰۳/۲۳
3-7
git commit چیست؟
تیم تولید محتوای سکان آکادمی
۱۴۰۰/۰۳/۲۶
3-8
مقایسه ی تغییرات با git diff
سید علیرضا جزائری
۱۴۰۰/۰۴/۰۱
3-9
Git stash
تیم تولید محتوای سکان آکادمی
۱۴۰۰/۰۴/۰۳
3-10
Gitignore چیست؟
سید علیرضا جزائری
۱۴۰۰/۰۴/۰۶
3-11
نظارت بر مخزن
تیم تولید محتوای سکان آکادمی
۱۴۰۰/۰۴/۰۸
3-12
git tag چیست؟
سجاد رنجبر
۱۴۰۰/۰۴/۱۰
3-13
Git Blame
فاطمه خانکی
۱۴۰۰/۰۴/۱۳
3-14
لغو تغییرها و commit ها
فاطمه خانکی
۱۴۰۰/۰۴/۱۶
3-15
لغو تغییرها و commit ها - بخش دوم
فاطمه خانکی
۱۴۰۰/۰۴/۱۷
3-16
Git clean چیست؟
سید علیرضا جزائری
۱۴۰۰/۰۴/۲۰
3-17
Git revert چیست؟
سید علیرضا جزائری
۱۴۰۰/۰۴/۲۲
3-18
Git Reset چیست؟ بخش اول
سجاد رنجبر
۱۴۰۰/۰۴/۲۴
3-19
git reset چیست بخش دوم
سجاد رنجبر
۱۴۰۰/۰۴/۲۷
3-20
Git RM چیست؟
فاطمه خانکی
۱۴۰۰/۰۴/۳۱
3-21
Rewriting history چیست؟
سجاد رنجبر
۱۴۰۰/۰۵/۰۳
3-22
Git Rebase
فاطمه خانکی
۱۴۰۰/۰۵/۰۵
3-23
git reflog چیست؟
تیم تولید محتوای سکان آکادمی
۱۴۰۰/۰۵/۰۶
دوره در دست تالیف است ... rocket
نظرات
اگر login نکردی برامون ایمیلت رو بنویس: