| GIT-CLONE(1) | دستورات عمومی کاربر | GIT-CLONE(1) |
نام (NAME)
git-clone - کلون کردن یک مخزن درون یک دایرکتوری جدید
خلاصه دستور (SYNOPSIS)
git clone [--template=<template-directory>]
[-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
[-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
[--dissociate] [--separate-git-dir <git-dir>]
[--depth <depth>] [--[no-]single-branch] [--[no-]tags]
[--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
[--[no-]remote-submodules] [--jobs <n>] [--sparse] [--[no-]reject-shallow]
[--filter=<filter-spec> [--also-filter-submodules]] [--] <repository>
[<directory>]
توضیحات (DESCRIPTION)
یک مخزن را درون یک دایرکتوری تازهساختهشده کلون میکند، برای هر شاخه در مخزن کلونشده شاخههای ردگیری دوردست (قابل مشاهده با git branch --remotes) میسازد، و یک شاخه اولیه منشعبشده از شاخه فعال فعلی مخزن کلونشده را ایجاد و دریافت (checkout) میکند.
پس از انجام کلون، یک دستور ساده git fetch بدون آرگومان تمام شاخههای ردگیری دوردست را بهروزرسانی میکند، و یک دستور git pull بدون آرگومان علاوه بر آن، در صورت وجود شاخه اصلی (master/main) دوردست، آن را با شاخه اصلی محلی فعلی ادغام میکند (هنگامی که گزینه --single-branch داده شود این امر صادق نیست؛ در ادامه را ببینید).
این پیکربندی پیشفرض با ایجاد مراجعی به سرشاخههای دوردست در زیرمسیر refs/remotes/origin و با مقداردهی اولیه متغیرهای پیکربندی remote.origin.url و remote.origin.fetch حاصل میشود.
گزینهها (OPTIONS)
-l, --local
اگر مخزن بهصورت یک مسیر محلی مشخص شود (مانند /path/to/repo)، این حالت پیشفرض است و گزینه --local اساساً اثری ندارد (no-op). اگر مخزن بهصورت یک نشانی (URL) مشخص شده باشد، این فلگ نادیده گرفته میشود (و ما هرگز از بهینهسازیهای محلی استفاده نمیکنیم). مشخص کردن --no-local هنگام ارائه مسیر /path/to/repo حالت پیشفرض را لغو میکند و در عوض از سازوکار انتقال معمول گیت استفاده مینماید.
اگر $GIT_DIR/objects مخزن حاوی پیوندهای نمادین باشد یا خود یک پیوند نمادین باشد، کلون با شکست مواجه خواهد شد. این یک اقدام امنیتی برای جلوگیری از کپی ناخواسته فایلها با دنبال کردن پیوندهای نمادین است.
این گزینه به دلایل امنیتی روی مخازنی که متعلق به سایر کاربران هستند کار نمیکند، و برای اینکه عملیات کلون با موفقیت انجام شود، باید گزینه --no-local مشخص گردد.
نکته: این عملیات ممکن است با اصلاحات همزمان در مخزن مبدأ دچار شرایط رقابتی (race) شود، درست مانند اجرای دستور cp -r <src> <dst> در حالی که <src> در حال تغییر است.
--no-hardlinks
-s, --shared
نکته
این یک عملیات بالقوه خطرناک است؛ از آن استفاده نکنید مگر اینکه کاملاً متوجه کارکرد آن باشید. اگر مخزن خود را با این گزینه کلون کنید و سپس در مخزن مبدأ شاخههایی را حذف کنید (یا هر دستور گیت دیگری را اجرا کنید که هر کامیت موجودی را بدون ارجاع کند)، ممکن است برخی از اشیاء بدون ارجاع (یا آویزان) شوند. این اشیاء ممکن است توسط عملیات عادی گیت (مانند git commit) که بهطور خودکار دستور git maintenance run --auto را فراخوانی میکنند حذف شوند. (نگاه کنید به git-maintenance(1).) اگر این اشیاء حذف شوند و توسط مخزن کلونشده ارجاع داده شده باشند، مخزن کلونشده آسیب دیده و خراب خواهد شد.
اگر میخواهید وابستگی مخزنی را که با --shared کلون شده به مخزن مبدأ آن قطع کنید، میتوانید به سادگی دستور git repack -a را اجرا کنید تا تمام اشیاء از مخزن مبدأ به درون یک بسته در مخزن کلونشده کپی شوند.
--reference=<repository>, --reference-if-able=<repository>
نکته
نکته مربوط به گزینه --shared و همچنین گزینه --dissociate را ببینید.
--dissociate
-q, --quiet
-v, --verbose
--progress
--server-option=<option>
-n, --no-checkout
--no-reject-shallow, --reject-shallow
--bare
--sparse
--filter=<filter-spec>
اگر --filter=auto استفاده شود، مشخصات فیلتر بهطور خودکار از طریق پروتکل promisor-remote (نگاه کنید به gitprotocol-v2(5)) با ترکیب مشخصات فیلتر اعلامشده توسط سرور برای مخازن دوردست ضامن (promisor remotes) که کلاینت میپذیرد (گزینه پیکربندی promisor.acceptFromServer در git-config(1) را ببینید) تعیین میگردد. این به سرور اجازه میدهد تا فیلتر بهینه را برای مخازن دوردست ضامن موجود پیشنهاد دهد.
مانند سایر مشخصات فیلتر، مقدار "auto" در پیکربندی ذخیره و ماندگار میشود. این تضمین میکند که واکشیهای آینده همچنان با پیشنهاد فعلی سرور سازگار شوند.
برای جزئیات مربوط به تمام مشخصات فیلتر موجود، گزینه --filter=<filter-spec> در git-rev-list(1) را ببینید.
برای نمونه، --filter=blob:none تمام blobها (محتویات فایلها) را تا زمانی که گیت به آنها نیاز پیدا کند فیلتر میکند. همچنین، --filter=blob:limit=<size> تمام blobهای با اندازه دستکم <size> را فیلتر میکند.
--also-filter-submodules
--mirror
-o<name>, --origin=<name>
-b<name>, --branch=<name>
--revision=<rev>
-u<upload-pack>, --upload-pack=<upload-pack>
--template=<template-directory>
-c<key>=<value>, --config=<key>=<value>
به دلیل محدودیتهای پیادهسازی فعلی، برخی متغیرهای پیکربندی تا پس از واکشی و checkout اولیه اثر نمیگذارند. متغیرهای پیکربندی شناختهشدهای که اثر نمیگذارند عبارتند از: remote.<name>.mirror و remote.<name>.tagOpt. به جای آنها از گزینههای متناظر --mirror و --no-tags استفاده کنید.
--depth=<depth>
--shallow-since=<date>
--shallow-exclude=<ref>
--single-branch, --no-single-branch
--tags, --no-tags
بهطور پیشفرض، تگها کلون میشوند و ارسال --tags بنابراین معمولاً اثری ندارد (no-op)، مگر اینکه گزینه قبلی --no-tags را خنثی کند.
میتواند همراه با --single-branch استفاده شود تا شاخهای بدون هیچ مرجع دیگری غیر از یک شاخه کلونشده نگهداری و اداره شود. این موضوع برای نمونه برای نگهداری کلونهای کمینه از شاخه پیشفرض یک مخزن به منظور نمایهسازی جستجو مفید است.
--recurse-submodules[=<pathspec>]
زیرماژولها با استفاده از تنظیمات پیشفرض خود مقداردهی اولیه و کلون میشوند. این معادل با اجرای بلافاصله دستور git submodule update --init --recursive <pathspec> پس از پایان عملیات کلون است. اگر مخزن کلونشده درخت کاری/checkout نداشته باشد (یعنی اگر هر یک از گزینههای --no-checkout/-n، --bare، یا --mirror داده شده باشد) این گزینه نادیده گرفته میشود.
--shallow-submodules, --no-shallow-submodules
--remote-submodules, --no-remote-submodules
--separate-git-dir=<git-dir>
--ref-format=<ref-format>
files
reftable
-j<n>, --jobs=<n>
<repository>
<directory>
--bundle-uri=<uri>
نشانیهای گیت (GIT URLS)
بهطور کلی، نشانیها (URL) حاوی اطلاعاتی درباره پروتکل انتقال، نشانی سرور دوردست و مسیر مخزن هستند. بسته به پروتکل انتقال، ممکن است برخی از این اطلاعات وجود نداشته باشند.
گیت از پروتکلهای ssh، git، http و https پشتیبانی میکند (علاوه بر این، ftp و ftps میتوانند برای واکشی استفاده شوند، اما این کار ناکارآمد و منسوخ است؛ از آنها استفاده نکنید).
انتقال بومی (یعنی نشانی git://) هیچگونه احراز هویتی انجام نمیدهد و باید در شبکههای ناامن با احتیاط استفاده شود.
قالبهای ساختاری زیر میتوانند با آنها استفاده شوند:
همچنین میتوان یک نحو جایگزین شبیه scp را با پروتکل ssh استفاده کرد:
این نحو تنها در صورتی تشخیص داده میشود که هیچ اسلشی قبل از اولین دونقطه نباشد. این امر به تمایز مسیر محلی که حاوی دونقطه است کمک میکند. برای نمونه، مسیر محلی foo:bar میتواند بهصورت یک مسیر مطلق یا ./foo:bar مشخص شود تا از تفسیر نادرست آن بهعنوان یک نشانی ssh جلوگیری شود.
پروتکلهای ssh و git علاوه بر این از بسط ~<username> پشتیبانی میکنند:
برای مخازن محلی، که بهطور بومی توسط گیت نیز پشتیبانی میشوند، میتوان از نحوهای زیر استفاده کرد:
این دو نحو عمدتاً معادل هستند، به جز اینکه اولی متضمن گزینه --local است.
دستورهای git clone، git fetch و git pull (اما نه git push) یک فایل باندل مناسب را نیز میپذیرند. نگاه کنید به git-bundle(1).
هنگامی که گیت روش کار با یک پروتکل انتقال معین را نمیداند، تلاش میکند از دستیار دوردست remote-<transport> در صورت وجود استفاده کند. برای درخواست صریح یک دستیار دوردست، میتوان از نحو زیر استفاده کرد:
که در آن <address> میتواند یک مسیر، یک سرور و مسیر، یا یک رشته دلخواه شبیه نشانی باشد که توسط دستیار دوردست مربوطه فراخوانیشده شناسایی میشود. برای جزئیات به gitremote-helpers(7) مراجعه کنید.
اگر تعداد زیادی مخزن دوردست با نامهای مشابه وجود دارد و میخواهید فرمت متفاوتی برای آنها استفاده کنید (به گونهای که نشانیهای مورداستفاده شما به نشانیهایی که کار میکنند بازنویسی شوند)، میتوانید یک بخش پیکربندی به این شکل بسازید:
[url "<actual-url-base>"]
insteadOf = <other-url-base>
برای نمونه، با این تنظیم:
[url "git://git.host.xz/"]
insteadOf = host.xz:/path/to/
insteadOf = work:
یک نشانی مانند "work:repo.git" یا مانند "host.xz:/path/to/repo.git" در هر زمینهای که یک نشانی میپذیرد به "git://git.host.xz/repo.git" بازنویسی خواهد شد.
اگر میخواهید نشانیها را فقط برای push بازنویسی کنید، میتوانید یک بخش پیکربندی به این شکل بسازید:
[url "<actual-url-base>"]
pushInsteadOf = <other-url-base>
برای نمونه، با این تنظیم:
[url "ssh://example.org/"]
pushInsteadOf = git://example.org/
یک نشانی مانند "git://example.org/path/to/repo.git" برای ارسالها (push) به "ssh://example.org/path/to/repo.git" بازنویسی میشود، اما دریافتها (pull) همچنان از نشانی اصلی استفاده خواهند کرد.
مثالها (EXAMPLES)
$ git clone git://git.kernel.org/pub/scm/.../linux.git my-linux $ cd my-linux $ make
$ git clone -l -s -n . ../copy $ cd ../copy $ git show-branch
$ git clone --reference /git/linux.git \
git://git.kernel.org/pub/scm/.../linux.git \
my-linux
$ cd my-linux
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
$ git clone --no-local /home/otheruser/proj.git /pub/scm/proj.git
پیکربندی (CONFIGURATION)
تمام موارد زیر این خط در این بخش بهصورت گزینشی از مستندات git-config(1) گنجانده شده است. محتوای آن همان چیزی است که در آنجا یافت میشود:
init.templateDir
init.defaultBranch
init.defaultObjectFormat
init.defaultRefFormat
init.defaultSubmodulePathConfig
clone.defaultRemoteName
clone.rejectShallow
clone.filterSubmodules
گیت (GIT)
بخشی از مجموعه git(1)
| 2026-06-29 | Git 2.55.0 |