| GIT(1) | دستورات عمومی کاربر | GIT(1) |
نام (NAME)
git - ردیاب محتوای ساده (سامانه کنترل نسخه توزیعشده)
خلاصه دستور (SYNOPSIS)
git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
[--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
[--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
<command> [<args>]
توضیحات (DESCRIPTION)
گیت (Git) یک سامانه کنترل نسخه سریع، مقیاسپذیر و توزیعشده با مجموعهای کمنظیر و غنی از دستورات است که هم عملیات سطح بالا و هم دسترسی کامل به سازوکارهای داخلی را فراهم میکند.
برای شروع به gittutorial(7) مراجعه کنید، سپس برای آشنایی با حداقل مجموعهای مفید از دستورات، giteveryday(7) را ببینید. مستند Git User’s Manual[1] شامل معرفی دقیقتر و عمیقتری است.
پس از تسلط بر مفاهیم پایه، میتوانید به این صفحه بازگردید تا با دستوراتی که گیت ارائه میدهد آشنا شوید. با دستور "git help command" میتوانید درباره تکتک دستورات گیت اطلاعات بیشتری کسب کنید. صفحه راهنمای gitcli(7) مروری کلی بر ساختار نحو دستورات خط فرمان به شما ارائه میدهد.
نسخهای قالببندیشده و پیونددار از آخرین مستندات گیت در https://git.github.io/htmldocs/git.html یا https://git-scm.com/docs قابل مشاهده است.
گزینهها (OPTIONS)
-v, --version
این گزینه در داخل به git version ... تبدیل میشود و همان گزینههای دستور git-version(1) را میپذیرد. اگر --help نیز داده شود، بر --version اولویت خواهد داشت.
-h, --help
گزینههای دیگری برای کنترل نحوه نمایش صفحه راهنما در دسترس هستند. برای اطلاعات بیشتر به git-help(1) مراجعه کنید، زیرا git --help ... در داخل به git help ... تبدیل میشود.
-C <path>
این گزینه بر گزینههایی که نام مسیر میپذیرند مانند --git-dir و --work-tree تأثیر میگذارد، به این ترتیب که تفسیر آنها از نامهای مسیر نسبت به دایرکتوری کاری ناشی از گزینه -C صورت میگیرد. برای مثال فراخوانیهای زیر با یکدیگر معادل هستند:
git --git-dir=a.git --work-tree=b -C c status git --git-dir=c/a.git --work-tree=c/b status
-c <name>=<value>
توجه داشته باشید که حذف = در git -c foo.bar ... مجاز است و مقدار foo.bar را روی مقدار بولی true تنظیم میکند (درست همانند کاری که [foo]bar در یک فایل پیکربندی انجام میدهد). درج علامت مساوی با یک مقدار خالی (مانند git -c foo.bar= ...) مقدار foo.bar را روی رشته خالی تنظیم میکند که git config --type=bool آن را به false تبدیل خواهد کرد.
--config-env=<name>=<envvar>
این گزینه برای مواردی کاربرد دارد که میخواهید گزینههای پیکربندی موقت را به گیت منتقل کنید، اما در سیستمعاملهایی فعالیت میکنید که سایر فرایندها ممکن است قادر به خواندن خط فرمان شما باشند (مانند /proc/self/cmdline)، اما نتوانند متغیرهای محیطی شما را بخوانند (مانند /proc/self/environ). این رفتار در لینوکس به صورت پیشفرض است، اما ممکن است در سیستم شما اینگونه نباشد.
توجه داشته باشید که این ممکن است امنیت متغیرهایی مانند http.extraHeader را افزایش دهد که در آنها اطلاعات حساس بخشی از مقدار است، اما مثلاً برای url.<base>.insteadOf که اطلاعات حساس میتواند بخشی از کلید باشد، امنیتی ایجاد نمیکند.
--exec-path[=<path>]
--html-path
--man-path
--info-path
-p, --paginate
-P, --no-pager
--git-dir=<path>
مشخص کردن مکان دایرکتوری ".git" با استفاده از این گزینه (یا متغیر محیطی GIT_DIR) سازوکار شناسایی خودکار مخزن را که تلاش میکند دایرکتوری حاوی زیرپوشه ".git" را بیابد (روشی که مخزن و بالاترین سطح درخت کاری کشف میشوند) غیرفعال میکند و به گیت اعلام میدارد که شما در بالاترین سطح درخت کاری قرار دارید. اگر در دایرکتوری بالاترین سطح درخت کاری نیستید، باید با استفاده از گزینه --work-tree=<path> (یا متغیر محیطی GIT_WORK_TREE) مکان بالاترین سطح درخت کاری را به گیت معرفی کنید.
اگر فقط میخواهید گیت طوری اجرا شود که گویی در <path> آغاز به کار کرده است، از git -C <path> استفاده کنید.
--work-tree=<path>
--namespace=<path>
--bare
--no-replace-objects
--no-lazy-fetch
--no-optional-locks
--no-advice
--literal-pathspecs
--glob-pathspecs
--noglob-pathspecs
--icase-pathspecs
--list-cmds=<group>[,<group>...]
--attr-source=<tree-ish>
دستورات گیت (GIT COMMANDS)
ما گیت را به دستورات سطح بالا ("پورسلین") و دستورات سطح پایین ("پلامبینگ") تقسیم میکنیم. برای تعریف نامهای مستعار دستورات، به ?Bgit-config?R(1) مراجعه کرده و توضیحات ?Balias.*?R را بررسی کنید. برای نصب زیردستورهای سفارشی "git"، توضیحات مربوط به متغیر محیطی ?IPATH?R را در این راهنما ببینید.
دستورات سطح بالا (پورسلین) (HIGH-LEVEL COMMANDS (PORCELAIN))
ما دستورات پورسلین را به دستورات اصلی و برخی ابزارهای کمکی کاربر تفکیک میکنیم.
دستورات اصلی پورسلین (Main porcelain commands)
?Bgit-add?R(1)
?Bgit-am?R(1)
?Bgit-archive?R(1)
?Bgit-backfill?R(1)
?Bgit-bisect?R(1)
?Bgit-branch?R(1)
?Bgit-bundle?R(1)
?Bgit-checkout?R(1)
?Bgit-cherry-pick?R(1)
?Bgit-citool?R(1)
?Bgit-clean?R(1)
?Bgit-clone?R(1)
?Bgit-commit?R(1)
?Bgit-describe?R(1)
?Bgit-diff?R(1)
?Bgit-fetch?R(1)
?Bgit-format-patch?R(1)
?Bgit-gc?R(1)
?Bgit-grep?R(1)
?Bgit-gui?R(1)
?Bgit-history?R(1)
?Bgit-init?R(1)
?Bgit-log?R(1)
?Bgit-maintenance?R(1)
?Bgit-merge?R(1)
?Bgit-mv?R(1)
?Bgit-notes?R(1)
?Bgit-pull?R(1)
?Bgit-push?R(1)
?Bgit-range-diff?R(1)
?Bgit-rebase?R(1)
?Bgit-reset?R(1)
?Bgit-restore?R(1)
?Bgit-revert?R(1)
?Bgit-rm?R(1)
?Bgit-shortlog?R(1)
?Bgit-show?R(1)
?Bgit-sparse-checkout?R(1)
?Bgit-stash?R(1)
?Bgit-status?R(1)
?Bgit-submodule?R(1)
?Bgit-switch?R(1)
?Bgit-tag?R(1)
?Bgit-worktree?R(1)
?Bgitk?R(1)
دستورات کمکی (Ancillary Commands)
?Bgit-config?R(1)
?Bgit-fast-export?R(1)
?Bgit-fast-import?R(1)
?Bgit-filter-branch?R(1)
?Bgit-mergetool?R(1)
?Bgit-pack-refs?R(1)
?Bgit-prune?R(1)
?Bgit-reflog?R(1)
?Bgit-refs?R(1)
?Bgit-remote?R(1)
?Bgit-repack?R(1)
?Bgit-replace?R(1)
?Bgit-annotate?R(1)
?Bgit-blame?R(1)
?Bgit-bugreport?R(1)
?Bgit-count-objects?R(1)
?Bgit-diagnose?R(1)
?Bgit-difftool?R(1)
?Bgit-fsck?R(1)
?Bgit-help?R(1)
?Bgit-instaweb?R(1)
?Bgit-merge-tree?R(1)
?Bgit-rerere?R(1)
?Bgit-show-branch?R(1)
?Bgit-verify-commit?R(1)
?Bgit-verify-tag?R(1)
?Bgit-version?R(1)
?Bgit-whatchanged?R(1)
?Bgitweb?R(1)
تعامل با دیگران (Interacting with Others)
?Bgit-archimport?R(1)
?Bgit-cvsexportcommit?R(1)
?Bgit-cvsimport?R(1)
?Bgit-cvsserver?R(1)
?Bgit-imap-send?R(1)
?Bgit-p4?R(1)
?Bgit-quiltimport?R(1)
?Bgit-request-pull?R(1)
?Bgit-send-email?R(1)
?Bgit-svn?R(1)
بازنشانی، بازیابی و بازگردانی (Reset, restore and revert)
سه دستور با نامهای مشابه وجود دارند: ?Bgit?R ?Breset?R، ?Bgit?R ?Brestore?R و ?Bgit?R ?Brevert?R.
?Bgit?R ?Breset?R همچنین میتواند برای بازیابی ایندکس استفاده شود که با ?Bgit?R ?Brestore?R همپوشانی دارد.
دستورات سطح پایین (پلامبینگ) (LOW-LEVEL COMMANDS (PLUMBING))
اگرچه گیت شامل لایه پورسلین ویژه خود است، اما دستورات سطح پایین آن برای پشتیبانی از توسعه لایههای پورسلین جایگزین کافی هستند. توسعهدهندگان چنین پورسلینهایی میتوانند با مطالعه درباره ?Bgit-update-index?R(1) و ?Bgit-read-tree?R(1) شروع کنند.
رابط (ورودی، خروجی، مجموعه گزینهها و مفاهیم) این دستورات سطح پایین به مراتب پایدارتر از دستورات سطح پورسلین در نظر گرفته شده است، زیرا این دستورات عمدتاً برای استفاده در اسکریپتها طراحی شدهاند. از سوی دیگر، رابط دستورات پورسلین ممکن است به منظور بهبود تجربه کاربر نهایی دستخوش تغییر شود.
دستورات دستکاری (Manipulation commands)
?Bgit-apply?R(1)
?Bgit-checkout-index?R(1)
?Bgit-commit-graph?R(1)
?Bgit-commit-tree?R(1)
?Bgit-hash-object?R(1)
?Bgit-index-pack?R(1)
?Bgit-merge-file?R(1)
?Bgit-merge-index?R(1)
?Bgit-mktag?R(1)
?Bgit-mktree?R(1)
?Bgit-multi-pack-index?R(1)
?Bgit-pack-objects?R(1)
?Bgit-prune-packed?R(1)
?Bgit-read-tree?R(1)
?Bgit-replay?R(1)
?Bgit-symbolic-ref?R(1)
?Bgit-unpack-objects?R(1)
?Bgit-update-index?R(1)
?Bgit-update-ref?R(1)
?Bgit-write-tree?R(1)
دستورات پرسوجو (Interrogation commands)
?Bgit-cat-file?R(1)
?Bgit-cherry?R(1)
?Bgit-diff-files?R(1)
?Bgit-diff-index?R(1)
?Bgit-diff-pairs?R(1)
?Bgit-diff-tree?R(1)
?Bgit-for-each-ref?R(1)
?Bgit-for-each-repo?R(1)
?Bgit-format-rev?R(1)
?Bgit-get-tar-commit-id?R(1)
?Bgit-last-modified?R(1)
?Bgit-ls-files?R(1)
?Bgit-ls-remote?R(1)
?Bgit-ls-tree?R(1)
?Bgit-merge-base?R(1)
?Bgit-name-rev?R(1)
?Bgit-pack-redundant?R(1)
?Bgit-repo?R(1)
?Bgit-rev-list?R(1)
?Bgit-rev-parse?R(1)
?Bgit-show-index?R(1)
?Bgit-show-ref?R(1)
?Bgit-unpack-file?R(1)
?Bgit-var?R(1)
?Bgit-verify-pack?R(1)
همگامسازی مخازن (Syncing repositories)
?Bgit-daemon?R(1)
?Bgit-fetch-pack?R(1)
?Bgit-http-backend?R(1)
?Bgit-send-pack?R(1)
?Bgit-update-server-info?R(1)
?Bgit-http-fetch?R(1)
?Bgit-http-push?R(1)
?Bgit-receive-pack?R(1)
?Bgit-shell?R(1)
?Bgit-upload-archive?R(1)
?Bgit-upload-pack?R(1)
دستورات کمکی داخلی (Internal helper commands)
?Bgit-check-attr?R(1)
?Bgit-check-ignore?R(1)
?Bgit-check-mailmap?R(1)
?Bgit-check-ref-format?R(1)
?Bgit-column?R(1)
?Bgit-credential?R(1)
?Bgit-credential-cache?R(1)
?Bgit-credential-store?R(1)
?Bgit-fmt-merge-msg?R(1)
?Bgit-hook?R(1)
?Bgit-interpret-trailers?R(1)
?Bgit-mailinfo?R(1)
?Bgit-mailsplit?R(1)
?Bgit-merge-one-file?R(1)
?Bgit-patch-id?R(1)
?Bgit-sh-i18n?R(1)
?Bgit-sh-setup?R(1)
?Bgit-stripspace?R(1)
?Bgit-url-parse?R(1)
راهنماها (GUIDES)
صفحات مستندات زیر راهنماهایی پیرامون مفاهیم گیت هستند.
رابطهای مخزن، دستور و فایل (REPOSITORY, COMMAND AND FILE INTERFACES)
این مستندات به بررسی رابطهای مخزن و دستوری میپردازند که انتظار میرود کاربران مستقیماً با آنها تعامل داشته باشند. برای جزئیات بیشتر پیرامون این معیارها، مدخل --user-formats را در git-help(1) ببینید.
قالبهای فایل، پروتکلها و سایر رابطهای توسعهدهنده (FILE FORMATS, PROTOCOLS AND OTHER DEVELOPER INTERFACES)
این مستندات به بررسی قالبهای فایل، پروتکلهای ارتباطی شبکه و سایر رابطهای توسعهدهنده گیت میپردازند. مدخل --developer-interfaces را در git-help(1) ببینید.
سازوکار پیکربندی (CONFIGURATION MECHANISM)
گیت از یک قالب متنی ساده برای ذخیرهسازی سفارشیسازیهای مربوط به هر مخزن و هر کاربر استفاده میکند. چنین فایل پیکربندی ممکن است به این شکل باشد:
#
# نویسه '#' یا ';' بیانگر یک توضیح است.
#
; متغیرهای هسته
[core]
; به حالتهای فایل اعتماد نکن
filemode = false
; هویت کاربر
[user]
name = "Junio C Hamano"
email = "gitster@pobox.com"
دستورات گوناگون مقادیر را از فایل پیکربندی خوانده و عملکرد خود را بر همان اساس تنظیم میکنند. برای دریافت فهرست و جزئیات بیشتر پیرامون سازوکار پیکربندی به git-config(1) مراجعه کنید.
اصطلاحات شناسه (IDENTIFIER TERMINOLOGY)
<object>
<blob>
<tree>
<commit>
<tree-ish>
<commit-ish>
<type>
<file>
شناسههای نمادین (SYMBOLIC IDENTIFIERS)
هر دستور گیت که هر نوع <object> را میپذیرد میتواند از نشانهگذاری نمادین زیر نیز استفاده کند:
HEAD
<tag>
<head>
برای مشاهده فهرستی کاملتر از روشهای نگارش نامهای شیء، بخش "SPECIFYING REVISIONS" را در gitrevisions(7) ببینید.
ساختار فایل/دایرکتوری (FILE/DIRECTORY STRUCTURE)
لطفاً مستند gitrepository-layout(5) را ببینید.
برای جزئیات بیشتر درباره هر هوک، githooks(5) را بخوانید.
سامانههای مدیریت پیکربندی سطح بالاتر ممکن است اطلاعات بیشتری را در $GIT_DIR ارائه کرده و مدیریت کنند.
اصطلاحات (TERMINOLOGY)
لطفاً gitglossary(7) را ببینید.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
دستورات گوناگون گیت به متغیرهای محیطی توجه کرده و رفتار خود را تغییر میدهند. متغیرهای محیطی که به عنوان "بولی" (Boolean) مشخص شدهاند، مقادیر خود را به همان روش متغیرهای پیکربندی بولی دریافت میکنند؛ یعنی "true"، "yes"، "on" و اعداد مثبت به عنوان "yes"، در حالی که "false"، "no"، "off" و "0" به عنوان "no" در نظر گرفته میشوند.
این متغیرها به شرح زیر هستند:
سیستم (System)
HOME
PATH
مخزن گیت (The Git Repository)
این متغیرهای محیطی بر همه دستورات اصلی گیت اعمال میشوند. توجه: شایان ذکر است که این متغیرها ممکن است توسط سامانههای مدیریت نسخه مستقر بر روی گیت استفاده یا بازنویسی شوند؛ بنابراین هنگام استفاده از پیشخوانهای واسط خارجی دقت فرمایید.
GIT_INDEX_FILE
GIT_INDEX_VERSION
GIT_OBJECT_DIRECTORY
GIT_ALTERNATE_OBJECT_DIRECTORIES
مداخلاتی که با " (نقلقول دوتایی) آغاز میشوند به عنوان مسیرهای نقلقولشده به سبک C تفسیر میگردند، بدینصورت که نقلقولهای دوتایی ابتدایی و انتهایی حذف شده و نویسههای اسکیپ با بکاسلش رعایت میشوند. برای مثال مقدار "path-with-\"-and-:-in-it":vanilla-path دارای دو مسیر است: path-with-"-and-:-in-it و vanilla-path.
GIT_DIR
GIT_WORK_TREE
GIT_NAMESPACE
GIT_CEILING_DIRECTORIES
GIT_DISCOVERY_ACROSS_FILESYSTEM
GIT_COMMON_DIR
GIT_DEFAULT_HASH
GIT_DEFAULT_REF_FORMAT
GIT_REFERENCE_BACKEND
کامیتهای گیت (Git Commits)
GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_AUTHOR_DATE
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL
GIT_COMMITTER_DATE
تفاوتهای گیت (Git Diffs)
GIT_DIFF_OPTS
GIT_EXTERNAL_DIFF
path old-file old-hex old-mode new-file new-hex new-mode
که در آن:
<old|new>-file
<old|new>-hex
<old|new>-mode
پارامترهای فایل میتوانند به فایل کاری کاربر (مانند new-file در "git-diff-files")، /dev/null (مانند old-file هنگامی که یک فایل جدید افزوده میشود)، یا یک فایل موقت (مانند old-file در ایندکس) اشاره کنند. GIT_EXTERNAL_DIFF نباید نگران حذف کردن فایل موقت باشد — این فایل هنگام خروج GIT_EXTERNAL_DIFF حذف میشود.
برای مسیری که ادغامنشده است، GIT_EXTERNAL_DIFF با ۱ پارامتر، <path>، فراخوانی میشود.
به ازای هر مسیری که GIT_EXTERNAL_DIFF فراخوانی میشود، دو متغیر محیطی GIT_DIFF_PATH_COUNTER و GIT_DIFF_PATH_TOTAL تنظیم میشوند.
GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
GIT_DIFF_PATH_COUNTER
GIT_DIFF_PATH_TOTAL
سایر (other)
GIT_MERGE_VERBOSITY
GIT_PAGER
GIT_PROGRESS_DELAY
GIT_EDITOR
GIT_SEQUENCE_EDITOR
GIT_SSH, GIT_SSH_COMMAND
$GIT_SSH_COMMAND بر $GIT_SSH اولویت دارد و توسط پوسته تفسیر میشود، که این امر امکان گنجاندن آرگومانهای اضافی را فراهم میسازد. $GIT_SSH از سوی دیگر باید صرفاً مسیر یک برنامه باشد (در صورت نیاز به آرگومانهای اضافی، میتواند یک اسکریپت پوشاننده پوسته باشد).
معمولاً پیکربندی گزینههای مورد نظر از طریق فایل شخصی .ssh/config آسانتر است. لطفاً برای جزئیات بیشتر به مستندات ssh خود مراجعه فرمایید.
GIT_SSH_VARIANT
GIT_SSL_NO_VERIFY
GIT_ATTR_SOURCE
GIT_ASKPASS
GIT_TERMINAL_PROMPT
GIT_CONFIG_GLOBAL, GIT_CONFIG_SYSTEM
GIT_CONFIG_NOSYSTEM
GIT_FLUSH
GIT_TRACE
اگر این متغیر روی "1"، "2" یا "true" تنظیم شود (مقایسه حساس به بزرگی و کوچکی حروف نیست)، پیامهای ردیابی در stderr چاپ میشوند.
اگر متغیر روی یک مقدار عددی صحیح بزرگتر از ۲ و اکیداً کمتر از ۱۰ تنظیم شود، گیت این مقدار را به عنوان یک توصیفگر فایل باز تفسیر کرده و تلاش میکند پیامهای ردیابی را در این توصیفگر فایل بنویسد.
یا اینکه اگر متغیر روی یک مسیر مطلق تنظیم شود (که با نویسه / آغاز میشود)، گیت آن را به عنوان یک مسیر فایل تفسیر کرده و تلاش میکند پیامهای ردیابی را به انتهای آن اضافه کند.
تنظیمنکردن متغیر، یا تنظیم آن روی خالی، "0" یا "false" (بدون حساسیت به بزرگی و کوچکی حروف)، پیامهای ردیابی را غیرفعال میکند.
GIT_TRACE_FSMONITOR
GIT_TRACE_PACK_ACCESS
GIT_TRACE_PACKET
GIT_TRACE_PACKFILE
توجه داشته باشید که این ویژگی در حال حاضر فقط برای سمت کلاینت کلونها و واکشیها پیادهسازی شده است.
GIT_TRACE_PERFORMANCE
GIT_TRACE_REFS
GIT_TRACE_SETUP
GIT_TRACE_SHALLOW
GIT_TRACE_CURL
GIT_TRACE_CURL_NO_DATA
GIT_TRACE2
اگر این متغیر روی "1"، "2" یا "true" تنظیم شود (مقایسه حساس به بزرگی و کوچکی حروف نیست)، پیامهای ردیابی در stderr چاپ میشوند.
اگر متغیر روی یک مقدار عددی صحیح بزرگتر از ۲ و اکیداً کمتر از ۱۰ تنظیم شود، گیت این مقدار را به عنوان یک توصیفگر فایل باز تفسیر کرده و سعی میکند پیامهای ردیابی را در این توصیفگر فایل بنویسد.
یا اینکه اگر متغیر روی یک مسیر مطلق تنظیم شود (که با نویسه / شروع میشود)، گیت آن را به عنوان مسیر یک فایل تفسیر کرده و سعی میکند پیامهای ردیابی را به انتهای آن اضافه کند. اگر مسیر از قبل وجود داشته باشد و یک دایرکتوری باشد، پیامهای ردیابی در فایلهایی (یکی به ازای هر فرایند) در آن دایرکتوری نوشته میشوند که نام آنها بر اساس آخرین بخش SID و یک شمارنده اختیاری (جهت جلوگیری از تداخل نام فایلها) تعیین میگردد.
علاوه بر این، اگر متغیر روی af_unix:[<socket-type>:]<absolute-pathname> تنظیم شود، گیت تلاش میکند مسیر را به عنوان یک سوکت دامنه یونیکس باز کند. نوع سوکت میتواند stream یا dgram باشد.
تنظیمنکردن متغیر، یا تنظیم آن روی خالی، "0" یا "false" (بدون حساسیت به بزرگی و کوچکی حروف)، پیامهای ردیابی را غیرفعال میکند.
برای جزئیات کامل، Trace2 documentation[2] را ببینید.
GIT_TRACE2_EVENT
GIT_TRACE2_PERF
GIT_TRACE_REDACT
GIT_NO_REPLACE_OBJECTS
GIT_LITERAL_PATHSPECS
GIT_GLOB_PATHSPECS
GIT_NOGLOB_PATHSPECS
GIT_ICASE_PATHSPECS
GIT_NO_LAZY_FETCH
GIT_REFLOG_ACTION
GIT_REF_PARANOIA
GIT_COMMIT_GRAPH_PARANOIA
پیشفرض "false" است که رفتار یادشده را غیرفعال میکند. تنظیم این گزینه روی "true" بررسی وجود شیء را فعال میکند تا کامیتهای منقضی هرگز از commit-graph بازگردانده نشوند، به بهای کاهش کارایی.
GIT_ALLOW_PROTOCOL
GIT_PROTOCOL_FROM_USER
GIT_PROTOCOL
توجه داشته باشید که ممکن است لازم باشد سرورها طوری پیکربندی شوند که اجازه عبور این متغیر را از برخی روشهای انتقال بدهند. این متغیر هنگام دسترسی به مخازن محلی (یعنی file:// یا مسیر سیستم فایل) و همچنین بر روی پروتکل git:// به طور خودکار انتشار مییابد. برای git-over-http در بیشتر پیکربندیها باید به طور خودکار کار کند، اما به بحث موجود در git-http-backend(1) مراجعه فرمایید. برای git-over-ssh، ممکن است لازم باشد سرور ssh طوری پیکربندی شود که به کلاینتها اجازه ارسال این متغیر را بدهد (مثلاً با استفاده از AcceptEnv GIT_PROTOCOL در OpenSSH).
این پیکربندی اختیاری است. اگر متغیر منتشر نشود، کلاینتها به پروتکل اصلی "v0" تنزل مییابند (اما ممکن است برخی از بهبودهای کارایی یا ویژگیها را از دست بدهند). این متغیر در حال حاضر فقط بر کلونها و واکشیها تأثیر میگذارد؛ هنوز برای ارسالها (push) استفاده نمیشود (اما ممکن است در آینده به کار رود).
GIT_OPTIONAL_LOCKS
GIT_REDIRECT_STDIN, GIT_REDIRECT_STDOUT, GIT_REDIRECT_STDERR
دو مقدار ویژه پشتیبانی میشوند: off صرفاً دستگیره استاندارد مربوطه را میبندد، و اگر GIT_REDIRECT_STDERR برابر با 2>&1 باشد، خطای استاندارد به همان دستگیره خروجی استاندارد هدایت میشود.
GIT_PRINT_SHA1_ELLIPSIS (منسوخشده)
GIT_ADVICE
بحث و بررسی (DISCUSSION)
جزئیات بیشتر پیرامون موارد زیر در Git concepts chapter of the user-manual[3] و gitcore-tutorial(7) در دسترس است.
یک پروژه گیت معمولاً شامل یک دایرکتوری کاری با یک زیردایرکتوری ".git" در بالاترین سطح است. دایرکتوری git.، در میان موارد دیگر، شامل یک پایگاه داده فشرده شیء است که تاریخچه کامل پروژه را نمایش میدهد، یک فایل "index" که آن تاریخچه را به محتوای فعلی درخت کاری متصل میکند، و اشارهگرهای نامگذاریشده به درون آن تاریخچه مانند تگها و نوک شاخهها.
پایگاه داده شیء شامل شیءهایی از سه نوع اصلی است: blobها که دادههای فایل را نگهداری میکنند؛ درختها که به blobها و سایر درختها اشاره میکنند تا سلسلهمراتب دایرکتوری را بسازند؛ و کامیتها که هر یک به یک درخت واحد و تعدادی کامیت والد ارجاع میدهند.
کامیت، که معادل چیزی است که سایر سامانهها آن را "مجموعه تغییرات" (changeset) یا "نسخه" مینامند، یک گام در تاریخچه پروژه را نشان میدهد و هر والد نمایانگر گام بلافاصله پیشین آن است. کامیتهایی با بیش از یک والد نشاندهنده ادغام خطوط توسعه مستقل هستند.
تمامی شیءها با هش SHA-1 محتوای خود نامگذاری میشوند که معمولاً به صورت رشتهای از ۴۰ رقم هگزادسیمال نوشته میشود. چنین نامهایی در سطح جهانی یکتا هستند. کل تاریخچهای که به یک کامیت منتهی میشود را میتوان صرفاً با امضای همان کامیت تضمین کرد. نوع چهارمی از شیء به نام تگ (tag) برای همین منظور در نظر گرفته شده است.
هنگام ایجاد اولیه، شیءها در فایلهای جداگانه ذخیره میشوند، اما برای کارایی بیشتر ممکن است بعداً در قالب "فایلهای بسته" (pack files) به صورت فشرده با یکدیگر تجمیع شوند.
اشارهگرهای نامگذاریشده با نام ارجاعات (refs)، نقاط مهم در تاریخچه را علامتگذاری میکنند. یک ارجاع ممکن است شامل نام SHA-1 یک شیء یا نام یک ارجاع دیگر باشد (مورد دوم "ارجاع نمادین" نامیده میشود). ارجاعاتی با نامهایی که با refs/head/ آغاز میشوند حاوی نام SHA-1 تازهترین کامیت (یا "head") یک شاخه در حال توسعه هستند. نامهای SHA-1 تگهای مورد نظر در زیر refs/tags/ ذخیره میشوند. یک ارجاع نمادین به نام HEAD حاوی نام شاخهای است که هماکنون بررسی (checkout) شده است.
فایل ایندکس با فهرستی از همه مسیرها و برای هر مسیر، یک شیء blob و مجموعهای از ویژگیها مقداردهی اولیه میشود. شیء blob نشاندهنده محتوای فایل در وضعیت نوک شاخه فعلی است. ویژگیها (زمان آخرین تغییر، اندازه و غیره) از فایل متناظر در درخت کاری گرفته میشوند. تغییرات بعدی در درخت کاری را میتوان با مقایسه این ویژگیها پیدا کرد. ایندکس میتواند با محتوای جدید بهروزرسانی شود و کامیتهای جدید میتوانند از محتوای ذخیرهشده در ایندکس ایجاد شوند.
ایندکس همچنین قادر است چندین ورودی (موسوم به "stages") را برای یک مسیر مشخص نگهداری کند. این مراحل برای نگهداری نسخههای مختلف ادغامنشده یک فایل در زمانی که ادغام در حال انجام است استفاده میشوند.
امنیت (SECURITY)
برخی گزینههای پیکربندی و فایلهای هوک ممکن است باعث شوند گیت دستورات دلخواه پوسته را اجرا کند. از آنجا که پیکربندی و هوکها با استفاده از git clone کپی نمیشوند، کلون کردن مخازن راهدور با محتوای غیرقابل اعتماد، بازرسی آنها با git log و مواردی از این دست عموماً ایمن است.
با این حال، اجرای دستورات گیت در یک دایرکتوری .git (یا درخت کاری احاطهکننده آن) زمانی که خود آن دایرکتوری .git از یک منبع غیرقابل اعتماد باشد ایمن نیست. دستورات موجود در تنظیمات و هوکهای آن به روش معمول اجرا میشوند.
به طور پیشفرض، گیت در صورتی که مالک مخزن فردی غیر از کاربر اجراکننده دستور باشد از اجرا خودداری میکند. مدخل مربوط به safe.directory را در git-config(1) ببینید. اگرچه این امر میتواند به محافظت از شما در یک محیط چندکاربره کمک کند، توجه داشته باشید که ممکن است مخازن غیرقابل اعتمادی را نیز در اختیار داشته باشید که متعلق به خود شما هستند (مثلاً اگر یک فایل zip یا tarball را از یک منبع نامطمئن استخراج کنید). در چنین مواردی، باید ابتدا مخزن غیرقابل اعتماد را "پاکسازی" (sanitize) کنید.
اگر دایرکتوری .git غیرقابل اعتمادی دارید، باید ابتدا آن را با git clone --no-local کلون کنید تا نسخهای تمیز به دست آورید. گیت مجموعه گزینهها و هوکهایی را که توسط upload-pack (که سمت سرور یک کلون یا واکشی را مدیریت میکند) اجرا میشوند محدود میکند، اما آگاه باشید که سطح حمله علیه upload-pack وسیع است، بنابراین این کار خطراتی به همراه دارد. امنترین روش این است که مخزن را به عنوان یک کاربر بدون امتیاز سرویسدهی کنید (خواه از طریق git-daemon(1)، ssh، یا با استفاده از سایر ابزارها برای تغییر شناسههای کاربری). به بحث موجود در بخش SECURITY در git-upload-pack(1) مراجعه فرمایید.
مستندات بیشتر (FURTHER DOCUMENTATION)
برای شروع کار با گیت به مراجع موجود در بخش "توضیحات" مراجعه کنید. موارد زیر احتمالاً حاوی جزئیاتی فراتر از نیاز یک کاربر تازهکار است.
فصل Git concepts chapter of the user-manual[3] و همچنین gitcore-tutorial(7) هر دو مقدمهای بر معماری بنیادین گیت ارائه میدهند.
برای مروری بر جریانهای کاری توصیهشده، gitworkflows(7) را ببینید.
همچنین اسناد howto[4] را برای چند مثال کاربردی ببینید.
سازوکارهای داخلی در Git API documentation[5] مستندسازی شدهاند.
کاربرانی که از CVS مهاجرت میکنند نیز ممکن است مایل به خواندن gitcvs-migration(7) باشند.
نویسندگان (AUTHORS)
گیت توسط لینوس توروالدز (Linus Torvalds) آغاز شد و هماکنون توسط جونیو سی هامانو (Junio C Hamano) نگهداری میشود. مشارکتهای بیشماری از لیست پستی گیت <git@vger.kernel.org[6]> انجام شده است. نشانی https://openhub.net/p/git/contributors/summary فهرست کاملتری از مشارکتکنندگان را به شما ارائه میدهد.
اگر یک نسخه کلونشده از خود git.git دارید، خروجی دستورات git-shortlog(1) و git-blame(1) میتواند نویسندگان بخشهای خاصی از پروژه را نشان دهد.
گزارش اشکالات (REPORTING BUGS)
اشکالات را به لیست پستی گیت <git@vger.kernel.org[6]> که توسعه و نگهداری عمدتاً در آنجا صورت میگیرد گزارش دهید. برای ارسال پیام نیازی به عضویت در این لیست ندارید. برای مشاهده گزارشهای اشکال قبلی و سایر بحثها، آرشیو لیست را در https://lore.kernel.org/git ببینید.
مسائلی که دارای اهمیت امنیتی هستند باید به صورت محرمانه به لیست پستی امنیت گیت <git-security@googlegroups.com[7]> ارسال شوند.
همچنین ببینید (SEE ALSO)
gittutorial(7), gittutorial-2(7), giteveryday(7), gitcvs-migration(7), gitglossary(7), gitcore-tutorial(7), gitcli(7), The Git User’s Manual[1], gitworkflows(7)
گیت (GIT)
بخشی از مجموعه git(1)
یادداشتها (NOTES)
- 1.
- Git User’s Manual
- 2.
- Trace2 documentation
- 3.
- Git concepts chapter of the user-manual
- 4.
- howto
- 5.
- Git API documentation
- 6.
- git@vger.kernel.org
- 7.
- git-security@googlegroups.com
| 2026-06-29 | Git 2.55.0 |