Git Clone
در این بخش از مستند آموزشی Git قصد داریم دستور Git Clone را بررسی کنیم. Git Clone یک دستور خط فرمان Git است که برای هدف قرار دادن یک مخزن موجود و ایجاد یک Clone یا کپی از مخزن هدف، استفاده می شود. در این مقاله ما در مورد گزینه های پیکربندی و موارد استفاده ی معمول از Clone Git بحث خواهیم کرد. برخی از مواردی که در این جا پوشش می دهیم عبارت اند از:
- Clone یک مخزن محلی یا از راه دور
- Clone یک مخزن bare
- استفاده از گزینه های سطحی برای Clone مخزن ها
- Syntax مربوط به Git URL و پروتکل های پشتیبانی شده
در راهنمای راه اندازی یک مخزن، یک کاربرد اولیه از Clone Git قرار دارد. این مقاله، سناریوهای Clone کردن و پیکربندی پیچیده تر را بررسی می کند.
هدف: کپی توسعه ی همکاری مخزن به مخزن
اگر یک پروژه، قبلا در یک مخزن مرکزی تنظیم شده باشد، دستور Git Clone رایج ترین راه برای کاربران برای به دست آوردن یک نسخه ی کپی برای توسعه است. مانند git init، Clone کردن به طور کلی یک عملیات on-time است. هنگامی که یک توسعه دهنده، یک نسخه ی در حال کار را دریافت کرده است، تمام عملیات کنترل نسخه و همکاری ها از طریق مخزن محلی خودش مدیریت می شوند.
مشارکت مخزن به مخزن
درک این موضوع که ایده ی Git از یک "Working Copy" با checkout کردن کد از مخزن SVN بسیار متفاوت است، اهمیت دارد. بر خلاف SVN، Git هیچ تمایزی بین نسخه ی کاری و مخزن مرکزی قائل نیست، همه آن ها مخزن های تمام عیارGit هستند. این موضوع نشان می دهد که Git اساسا متفاوت از SVN است. در حالی که SVN به رابطه ی بین مخزن مرکزی و working copy بستگی دارد، مدل همکاریGit بر مبنای تعامل مخزن به مخزن است. شما به جای checkout یک working copy به مخزن مرکزی SVN، در Git، Commit ها را از یک مخزن در جایی دیگر که می خواهید، push یا pull می کنید.
البته، هیچ مانعی برای استفاده شما از برخی از ویژگی های خاص مخزن Git، وجود ندارد. برای مثال، به سادگی تعیین یک مخزن Git به عنوان مخزن "مرکزی"، می توان یک جریان کار متمرکز (centralized workflow) را با استفاده از Git تکرار کرد. نکته این است که این کار از طریق قراردادها، به جای این که به VCS (کنترل نسخه) خود متصل شود، انجام شود.
کاربرد
Git Clone در اصل برای این مورد استفاده قرار می گیرد تا به یک مخزن موجود اشاره کند و یک Clone یا کپی آن را در یک مسیر جدید، در یک مکان دیگر قرار دهد. مخزن اصلی می تواند در سیستم فایل محلی یا پروتکل های پشتیبانی شده از راه دور، قرار گیرد. دستور Git Clone، یک مخزن Git موجود را کپی می کند. این همان checkout در SVN است، به جز "working copy" یک مخزن Git کامل است (یعنی تاریخچه خود را دارد، فایل های خود را مدیریت می کند و یک محیط کاملا جدا شده از مخزن اصلی است.).
برای راحتی، Clone کردن به طور خودکار، یک اتصال از راه دور به نام "origin" ایجاد می کند که به مخزن اصلی اشاره دارد. این باعث می شود که با یک مخزن مرکزی ارتباط برقرار کنید. این اتصال خودکار، به وسیله Git به سر شاخه ی از راه دور زیر
refs/remotes/origin
و با راه اندازی Remote.Origin.url
و متغیرهای تنظیم شده Remote.origin.fetch
ایجاد شده است.
یک مثال برای نشان دادن نحوه استفاده از Clone Git را می توان در راهنمای راه اندازی یک مخزن پیدا کرد. مثال زیر نشان می دهد که چگونه یک کپی محلی، از یک مخزن مرکزی ذخیره شده در یک سرور به دست می آید. مخزن مرکزی، قابل دسترسی در example.com
است و با استفاده از SSH و نام کاربری علی، این کار انجام شده است:
git clone ssh://ali@example.com/path/to/my-project.git
cd my-project
# Start working on the project
دستور اول، یک مخزن جدید Git را در پوشه my-project
در ماشین محلی خود قرار می دهد و آن را با محتویات مخزن مرکزی پر می کند. سپس، شما می توانید با دستور cd وارد مسیر پروژه خود شده و ویرایش فایل ها، Commit های فوری، و تعامل با دیگر مخزن ها را شروع کنید. همچنین توجه داشته باشید که پسوند .git از مخزن clone شده، حذف شده است. این نشان دهنده وضعیت non-bare
کپی محلی است.
Clone کردن برای یک پوشه خاص
git clone <repo> <directory>
دستور بالا، مخزن واقع در <repo>
را به پوشه به نام ~<directory>!
در ماشین محلی، Clone می کند.
Clone کردن یک برچسب خاص
git clone --branch <tag> <repo>
دستور بالا، مخزن واقع در <repo>
و تنها منبع برای <tag>
را Clone می کند.
Shallow clone (Clone کم عمق)
git clone -depth=1 <repo>
دستور بالا، مخزن واقع در <repo>
و تنها کلون تاریخچه Commit مشخص شده توسط گزینه DEPTH= 1
را Clone می کند. در این مثال یک Clone از <repo>
ساخته شده است و تنها آخرین Commit های جدید در مخزن جدید Clone شده، گنجانده شده است. Clone کردن کم عمق، هنگام کار با مخزن هایی که دارای تاریخچه Commit گسترده است، مفید خواهد بود. تاریخچه Commit گسترده ممکن است باعث مشکلات مقیاس پذیری (scaling) مانند محدودیت استفاده از فضای دیسک و زمان انتظار طولانی در هنگام Clone کردن، شود. یک Clone کم عمق می تواند به کاهش این مسائل، کمک کند.
گزینه های پیکربندی
git clone -branch
پارامتر -branch
به شما اجازه می دهد تا یک شاخه خاص را به جای شاخه ای Clone کنید که HEAD از راه دور (remote)، به آن اشاره می کند و معمولا شاخه اصلی است. علاوه بر این شما می توانید یک برچسب (tag) را به جای شاخه، برای تاثیر یکسان، استفاده کنید.
git clone -branch new_feature git://remoterepository.git
مثال بالا تنها شاخه new_feature
را از مخزن Git از راه دور Clone می کند. این کاملا یک ابزار کاربردی برای صرفه جویی در وقت شما در دانلود مرجع HEAD از مخزن است. سپس شما نیاز دارید که مرجع را اضافه کنید.
Git Clone -Mirror در مقابل Git Clone -Bare
Git Clone --bare
مشابه دستور git init --bare
، وقتی که پارامتر --bare
با git clone استفاده شود، یک کپی از مخزن از راه دور با یک مسیر کار حذف شده، ساخته می شود. یعنی به یک مخزن با تاریخچه پروژه، می تواند push یا pull شده، اما نمی تواند به طور مستقیم ویرایش شود. علاوه بر این، هیچ شاخه از راه دوری برای مخزن با پارامتر --bare
پیکربندی نشده است. مانند دستور git init --bare
، برای ایجاد یک مخزن میزبان یا اصلی استفاده می شود که توسعه دهندگان به طور مستقیم آن را ویرایش نمی کنند.
Git Clone --mirror
پارامتر --mirror
به طور ضمنی پارامتر --bare
را نیز در بر دارد. این به این معنی است که رفتار --bare توسط --mirror
به ارث برده می شود. در نتیجه، یک مخزن bare، بدون فایل های کاری قابل ویرایش خواهیم داشت. علاوه بر این، --mirror
تمام مرجع های گسترش یافته از مخزن از راه دور را پوشش می دهد و پیکربندی شاخه ی از راه دور را حفظ می کند. سپس می توانید git remote update را روی mirror اجرا کنید و همه ی مرجع ها از مخزن اصلی را بازنویسی کنید. این کاربه شما قابلیت دقیق "mirror" را نشان می دهد.
سایر گزینه های پیکربندی
برای داشتن یک لیست جامع از گزینه های دیگر git clone، مستند رسمی Git را مشاهده کنید. در این مقاله، ما برخی از گزینه های رایج دیگر را به شما معرفی خواهیم کرد.
Git Clone - Template
git clone -branch new_feature git://remoterepository.git
دستور بالا، مخزن موجود در <Repo Location>
را clone کرده و قالب را از<template directory>
به شاخه جدید محلی ایجاد شده، اعمال می کند. مرجع کامل قالب های Git را می توانید در صفحه ی git init پیدا کنید.
URL های Git
Git، قواعد URL مخصوص به خود را دارد که برای انتقال مکان های مخزن از راه دور به دستورهای Git استفاده می شود. از آن جا که clone Git بیشتر در مخزن های از راه دور استفاده می شود، ما syntax یا قواعد Git URL را بررسی خواهیم کرد.
پروتکل های Git URL
-SSH
SSH مخفف Secure Shell ، یک پروتکل معتبر شبکه در همه جا است که معمولا به طور پیش فرض در اکثر سرورها پیکربندی شده است. از آنجا که SSH یک پروتکل معتبر است، شما قبل از اتصال، نیاز به اثبات اعتبار به سرور میزبان دارید.
ssh://[user@]host.xz[:port]/path/to/repo.git/
-GIT
یک پروتکل منحصر به فرد برای git است و همراه با یک daemon که روی پورت اجرا می شود (9418). پروتکل شبیه SSH است، اما هیچ گونه احراز هویتی ندارد.
git://host.xz[:port]/path/to/repo.git/
-HTTP
پروتکل انتقال متن و مخفف عبارت Hyper text transfer protocol می باشد. این پروتکل وب، اغلب برای انتقال داده های HTML صفحه وب در اینترنت استفاده می شود. Git را می توان پیکربندی کرد تا روی HTTP ارتباط برقرار کند.
http[s]://host.xz[:port]/path/to/repo.git/
خلاصه
در این مقاله ما نگاه عمیقی به git clone داشتیم. مهم ترین اهداف این بخش عبارتند از:
- Git Clone برای ایجاد یک کپی از یک مخزن هدف، استفاده می شود.
- مخزن هدف می تواند محلی یا از راه دور باشد.
- Git از چند پروتکل شبکه برای اتصال به مخزن های از راه دور، پشتیبانی می کند.
- گزینه های پیکربندی مختلفی وجود دارد که محتوای Clone را تغییر می دهد.
برای کسب اطلاعات بیشتر روی عملکرد Git Clone، با مستندهای رسمی Git مشورت کنید. همچنین نمونه های عملی Git Clone، در راهنمای راه اندازی یک مخزن وجود دارد.
منبع
https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-clone