GIT-CONFIG(1) Git Manual GIT-CONFIG(1) نام (NAME) git-config - دریافت و تنظیم گزینه‌های مخزن یا سراسری خلاصه دستور (SYNOPSIS) git config list [] [] [--includes] git config get [] [] [--includes] [--all] [--regexp] [--value=] [--fixed-value] [--default=] [--url=] git config set [] [--type=] [--all] [--value=] [--fixed-value] git config unset [] [--all] [--value=] [--fixed-value] git config rename-section [] git config remove-section [] git config edit [] git config [] --get-colorbool [] توضیحات (DESCRIPTION) با استفاده از این دستور می‌توانید گزینه‌ها را پرس‌وجو، تنظیم، جایگزین یا لغو (unset) کنید. نام در واقع متشکل از بخش و کلید است که با یک نقطه از هم جدا شده‌اند، و مقدار اسکیپ خواهد شد. با استفاده از گزینه --append می‌توان چندین خط را به یک گزینه اضافه کرد. اگر می‌خواهید گزینه‌ای را که می‌تواند در چندین خط وجود داشته باشد به‌روزرسانی یا لغو کنید، باید --value= (که یک عبارت منظم گسترش‌یافته است، مگر اینکه گزینه --fixed-value داده شده باشد) مشخص شود. تنها مقادیر موجودی که با الگو مطابقت دارند به‌روزرسانی یا لغو می‌شوند. اگر می‌خواهید خطوطی را مدیریت کنید که با الگو مطابقت ندارند، کافی است یک علامت تعجب منفرد در ابتدای آن قرار دهید (همچنین بخش «مثال‌ها (EXAMPLES)» را ببینید)، اما توجه داشته باشید که این کار تنها زمانی کار می‌کند که گزینه --fixed-value در حال استفاده نباشد. گزینه --type= به git config دستور می‌دهد تا اطمینان حاصل کند مقادیر ورودی و خروجی تحت داده‌شده قابلیت استانداردسازی (canonicalize) دارند. اگر هیچ --type= مشخص نشود، هیچ استانداردسازی انجام نخواهد شد. فراخوانندگان می‌توانند مشخص‌کننده موجود --type را با --no-type لغو کنند. هنگام خواندن، مقادیر به صورت پیش‌فرض از فایل‌های پیکربندی سراسری سیستم (system)، سراسری کاربر (global) و محلی مخزن (local) خوانده می‌شوند، و می‌توان از گزینه‌های --system، --global، --local، --worktree و --file استفاده کرد تا به دستور گفته شود فقط از همان مکان بخواند (بخش «فایل‌ها (FILES)» را ببینید). هنگام نوشتن، مقدار جدید به صورت پیش‌فرض در فایل پیکربندی محلی مخزن نوشته می‌شود، و می‌توان از گزینه‌های --system، --global، --worktree و --file استفاده کرد تا به دستور گفته شود در آن مکان بنویسد (می‌توانید --local را مشخص کنید اما این حالت پیش‌فرض است). این دستور در صورت بروز خطا با وضعیتی غیر از صفر خارج می‌شود. برخی از کدهای خروج عبارتند از: • بخش یا کلید نامعتبر است (ret=1)، • هیچ بخش یا نامی ارائه نشده است (ret=2)، • فایل پیکربندی نامعتبر است (ret=3)، • نوشتن در فایل پیکربندی امکان‌پذیر نیست (ret=4)، • تلاش برای لغو گزینه‌ای که وجود ندارد (ret=5)، • تلاش برای لغو/تنظیم گزینه‌ای که چندین خط با آن مطابقت دارند (ret=5)، یا • تلاش برای استفاده از عبارت منظم نامعتبر (ret=6). در صورت موفقیت، این دستور با کد خروج 0 خارج می‌شود. فهرستی از تمام متغیرهای پیکربندی موجود را می‌توان با استفاده از دستور git help --config به دست آورد. دستورها (COMMANDS) list فهرست کردن تمام متغیرهای تنظیم‌شده در فایل پیکربندی، همراه با مقادیر آن‌ها. get مقدار کلید مشخص‌شده را برمی‌گرداند. اگر کلید چندین بار در پیکربندی وجود داشته باشد، آخرین مقدار را برمی‌گرداند. اگر --all مشخص شده باشد، تمام مقادیر مرتبط با کلید را برمی‌گرداند. اگر کلید وجود نداشته باشد، کد خطای 1 را برمی‌گرداند. set تنظیم مقدار برای یک یا چند گزینه پیکربندی. به صورت پیش‌فرض، این دستور از نوشتن گزینه‌های پیکربندی چندمقداری خودداری می‌کند. ارسال --all تمام گزینه‌های پیکربندی چندمقداری را با مقدار جدید جایگزین می‌کند، در حالی که --value= تمام گزینه‌های پیکربندی را که مقادیرشان با الگوی داده‌شده مطابقت دارد جایگزین خواهد کرد. unset لغو مقدار برای یک یا چند گزینه پیکربندی. به صورت پیش‌فرض، این دستور از لغو کلیدهای چندمقداری خودداری می‌کند. ارسال --all تمام گزینه‌های پیکربندی چندمقداری را لغو می‌کند، در حالی که --value تمام گزینه‌های پیکربندی را که مقادیرشان با الگوی داده‌شده مطابقت دارد لغو خواهد کرد. rename-section تغییر نام بخش داده‌شده به نام جدید. remove-section حذف بخش داده‌شده از فایل پیکربندی. edit یک ویرایشگر را برای تغییر فایل پیکربندی مشخص‌شده باز می‌کند؛ شامل --system، --global، --local (پیش‌فرض)، --worktree، یا --file . گزینه‌ها (OPTIONS) --replace-all رفتار پیش‌فرض، جایگزینی حداکثر یک خط است. این گزینه تمام خطوط منطبق با کلید (و به صورت اختیاری --value=) را جایگزین می‌کند. --append بدون تغییر هیچ‌یک از مقادیر موجود، یک خط جدید به گزینه اضافه می‌کند. این کار همانند ارائه --value=^$ در set است. --comment افزودن یک توضیح (کامنت) در انتهای خطوط جدید یا تغییریافته. اگر با یک یا چند نویسه فاصله و به دنبال آن # شروع شود، همان‌طور که هست استفاده می‌شود. اگر با # شروع شود، پیش از استفاده یک فاصله به ابتدای آن اضافه می‌شود. در غیر این صورت، رشته " # " (یک فاصله و سپس علامت هش و سپس یک فاصله) به ابتدای آن اضافه خواهد شد. رشته حاصل بلافاصله پس از مقدار تعریف‌شده برای متغیر قرار می‌گیرد. نباید حاوی نویسه‌های خط جدید (linefeed) باشد (توضیحات چندخطی مجاز نیستند). --all همراه با get، تمام مقادیر یک کلید چندمقداری را برمی‌گرداند. --regexp همراه با get، نام را به عنوان یک عبارت منظم تفسیر می‌کند. تطبیق عبارت منظم در حال حاضر به حروف بزرگ و کوچک حساس است و روی نسخه استانداردشده کلید انجام می‌شود که در آن نام‌های بخش و متغیر با حروف کوچک نوشته شده‌اند، اما نام زیربخش‌ها تغییر نیافته‌اند. --url= هنگامی که یک دوبخشی به صورت
. داده شود، مقداری برای
.. که بخش آن بهترین تطابق را با URL داده‌شده دارد برگردانده می‌شود (اگر چنین کلیدی وجود نداشته باشد، مقدار
. به عنوان جایگزین استفاده می‌شود). هنگامی که فقط
به عنوان نام داده شود، این کار برای تمام کلیدهای آن بخش انجام شده و فهرست می‌شوند. در صورتی که مقداری پیدا نشود کد خطای 1 را برمی‌گرداند. --global برای گزینه‌های نوشتن: به جای فایل .git/config مخزن، در فایل سراسری ~/.gitconfig می‌نویسد، یا در فایل $XDG_CONFIG_HOME/git/config اگر این فایل موجود باشد و فایل ~/.gitconfig وجود نداشته باشد. برای گزینه‌های خواندن: به جای تمام فایل‌های موجود، فقط از فایل سراسری ~/.gitconfig و از $XDG_CONFIG_HOME/git/config می‌خواند. همچنین بخش «فایل‌ها (FILES)» را ببینید. --system برای گزینه‌های نوشتن: به جای فایل .git/config مخزن، در فایل سراسری سیستم $(prefix)/etc/gitconfig می‌نویسد. برای گزینه‌های خواندن: به جای تمام فایل‌های موجود، فقط از فایل سراسری سیستم $(prefix)/etc/gitconfig می‌خواند. همچنین بخش «فایل‌ها (FILES)» را ببینید. --local برای گزینه‌های نوشتن: در فایل .git/config مخزن می‌نویسد. این رفتار پیش‌فرض است. برای گزینه‌های خواندن: به جای تمام فایل‌های موجود، فقط از فایل .git/config مخزن می‌خواند. همچنین بخش «فایل‌ها (FILES)» را ببینید. --worktree مشابه --local است، به جز اینکه اگر extensions.worktreeConfig فعال باشد، از $GIT_DIR/config.worktree خوانده یا در آن نوشته می‌شود. در غیر این صورت همانند --local خواهد بود. توجه داشته باشید که $GIT_DIR برای درخت کاری اصلی برابر با $GIT_COMMON_DIR است، اما برای سایر درخت‌های کاری به شکل $GIT_DIR/worktrees// است. برای یادگیری نحوه فعال‌سازی extensions.worktreeConfig به git-worktree(1) مراجعه کنید. -f , --file برای گزینه‌های نوشتن: به جای فایل .git/config مخزن، در فایل مشخص‌شده می‌نویسد. برای گزینه‌های خواندن: به جای تمام فایل‌های موجود، فقط از فایل مشخص‌شده می‌خواند. همچنین بخش «فایل‌ها (FILES)» را ببینید. --blob مشابه --file است اما به جای فایل از blob داده‌شده استفاده می‌کند. برای مثال می‌توانید از master:.gitmodules برای خواندن مقادیر از فایل .gitmodules در شاخه master استفاده کنید. برای فهرست کامل‌تری از روش‌های نگارش نام‌های blob، بخش «SPECIFYING REVISIONS» در gitrevisions(7) را ببینید. --value=, --no-value همراه با get، set و unset، تنها با تطبیق داده می‌شود. این الگو یک عبارت منظم گسترش‌یافته است مگر اینکه --fixed-value داده شده باشد. از --no-value برای لغو استفاده کنید. --fixed-value هنگامی که همراه با --value= استفاده شود، با به عنوان یک رشته دقیق به جای عبارت منظم رفتار می‌کند. این کار جفت‌های نام/مقداری را که مطابقت داده می‌شوند تنها به مواردی محدود می‌کند که مقدار دقیقاً برابر با باشد. --type دستور git config اطمینان حاصل خواهد کرد که هر ورودی یا خروجی تحت محدودیت(های) نوع داده‌شده معتبر باشد، و مقادیر خروجی را به شکل استاندارد 's تبدیل خواهد کرد. انواع معتبر 's عبارتند از: • bool: استانداردسازی مقادیر true، yes، on و اعداد مثبت به عنوان "true"، و مقادیر false، no، off و 0 به عنوان "false". • int: استانداردسازی مقادیر به صورت اعداد ده‌دهی ساده. یک پسوند اختیاری از k، m یا g باعث می‌شود که مقدار در هنگام ورودی در 1024، 1048576 یا 1073741824 ضرب شود. • bool-or-int: استانداردسازی بر اساس bool یا int، همان‌طور که در بالا توضیح داده شد. • path: استانداردسازی با گسترش ~ ابتدایی به مقدار $HOME و ~user به دایرکتوری خانگی کاربر مشخص‌شده. این مشخص‌کننده هنگام تنظیم مقدار هیچ اثری ندارد (اما می‌توانید از git config section.variable ~/ از خط فرمان استفاده کنید تا پوسته شما عمل گسترش را انجام دهد.) • expiry-date: استانداردسازی با تبدیل از یک رشته تاریخ ثابت یا نسبی به یک برچسب زمان (timestamp). این مشخص‌کننده هنگام تنظیم مقدار هیچ اثری ندارد. • color: هنگام دریافت مقدار، با تبدیل به یک توالی گریز رنگ ANSI استانداردسازی می‌شود. هنگام تنظیم مقدار، یک بررسی صحت انجام می‌شود تا اطمینان حاصل شود که مقدار داده‌شده به عنوان یک رنگ ANSI قابلیت استانداردسازی دارد، اما همان‌طور که هست نوشته می‌شود. اگر دستور در حالت list باشد، آنگاه آرگومان --type برای هر مقدار پیکربندی فهرست‌شده اعمال خواهد شد. اگر مقدار با موفقیت در آن قالب تجزیه نشود، از فهرست حذف خواهد شد. --bool, --int, --bool-or-int, --path, --expiry-date گزینه‌های قدیمی برای انتخاب یک مشخص‌کننده نوع. در عوض ترجیحاً از --type استفاده کنید (بالا را ببینید). --no-type مشخص‌کننده نوعی را که پیش‌تر تنظیم شده بود لغو می‌کند (اگر پیش‌تر تنظیم شده باشد). این گزینه درخواست می‌کند که git config متغیر بازیابی‌شده را استانداردسازی نکند. --no-type بدون --type= یا -- هیچ اثری ندارد. -z, --null برای تمام گزینه‌هایی که مقادیر و/یا کلیدها را خروجی می‌دهند، همواره مقادیر را با نویسه null خاتمه می‌دهد (به جای خط جدید). در عوض از خط جدید به عنوان جداکننده میان کلید و مقدار استفاده می‌کند. این کار امکان تجزیه امن خروجی را فراهم می‌آورد بدون اینکه برای مثال به دلیل وجود مقادیری که حاوی شکست خط هستند دچار سردرگمی شود. --name-only تنها نام‌های متغیرهای پیکربندی را برای list یا get خروجی می‌دهد. --show-names, --no-show-names همراه با get، کلیدهای پیکربندی را علاوه بر مقادیر آن‌ها نشان می‌دهد. حالت پیش‌فرض --no-show-names است، مگر اینکه --url داده شده باشد و هیچ زیربخشی در وجود نداشته باشد. --show-origin خروجی تمام گزینه‌های پیکربندی پرس‌وجوشده را با نوع مبدا (فایل، ورودی استاندارد، blob، خط فرمان) و مبدا واقعی (مسیر فایل پیکربندی، ref، یا شناسه blob در صورت کاربرد) تکمیل می‌کند. --show-scope مشابه --show-origin است از این نظر که خروجی تمام گزینه‌های پیکربندی پرس‌وجوشده را با محدوده (scope) آن مقدار (worktree، local، global، system، command) تکمیل می‌کند. --get-colorbool [] تنظیمات رنگ را برای (برای مثال color.diff) پیدا کرده و "true" یا "false" را خروجی می‌دهد. باید "true" یا "false" باشد، و هنگامی که پیکربندی روی "auto" باشد در نظر گرفته می‌شود. اگر وجود نداشته باشد، خروجی استاندارد خود دستور را بررسی می‌کند و اگر قرار باشد از رنگ استفاده شود با وضعیت 0 خارج می‌شود، و در غیر این صورت با وضعیت 1 خارج می‌شود. هنگامی که تنظیمات رنگ برای name تعریف نشده باشد، دستور از color.ui به عنوان پشتیبان استفاده می‌کند. --includes, --no-includes دستورالعمل‌های include.* را در فایل‌های پیکربندی هنگام جستجوی مقادیر رعایت می‌کند. هنگام مشخص شدن یک فایل خاص (برای مثال، با استفاده از --file، --global و غیره) به طور پیش‌فرض روی off و هنگام جستجو در تمام فایل‌های پیکربندی روی on قرار دارد. --default هنگام استفاده از get، اگر متغیر درخواستی یافت نشود، به گونه‌ای رفتار می‌کند که گویی مقدار تخصیص‌یافته به آن متغیر است. حالت‌های منسوخ‌شده (DEPRECATED MODES) حالت‌های زیر به نفع زیردستورها منسوخ شده‌اند. توصیه می‌شود به نحو (syntax) جدید مهاجرت کنید. git config جایگزین‌شده با git config get . git config [] جایگزین‌شده با git config set [--value=] . -l, --list جایگزین‌شده با git config list. --get [] جایگزین‌شده با git config get [--value=] . --get-all [] جایگزین‌شده با git config get [--value=] --all . --get-regexp جایگزین‌شده با git config get --all --show-names --regexp . --get-urlmatch جایگزین‌شده با git config get --url= . --get-color [] جایگزین‌شده با git config get --type=color [--default=] . --add جایگزین‌شده با git config set --append . --unset [] جایگزین‌شده با git config unset [--value=] . --unset-all [] جایگزین‌شده با git config unset [--value=] --all . --rename-section جایگزین‌شده با git config rename-section . --remove-section جایگزین‌شده با git config remove-section . -e, --edit جایگزین‌شده با git config edit. پیکربندی (CONFIGURATION) مقدار pager.config تنها هنگام فهرست کردن پیکربندی رعایت می‌شود، یعنی هنگام استفاده از list یا get که ممکن است چندین نتیجه را برگردانند. حالت پیش‌فرض استفاده از صفحه‌بند (pager) است. فایل‌ها (FILES) به صورت پیش‌فرض، git config گزینه‌های پیکربندی را از چندین فایل خواهد خواند: $(prefix)/etc/gitconfig فایل پیکربندی سراسری سیستم. $XDG_CONFIG_HOME/git/config, ~/.gitconfig فایل‌های پیکربندی مختص کاربر. هنگامی که متغیر محیطی XDG_CONFIG_HOME تنظیم نشده باشد یا خالی باشد، $HOME/.config/ به عنوان $XDG_CONFIG_HOME استفاده می‌شود. به این فایل‌ها همچنین فایل‌های پیکربندی «سراسری» (global) گفته می‌شود. اگر هر دو فایل وجود داشته باشند، هر دو فایل به ترتیبی که در بالا ذکر شد خوانده می‌شوند. $GIT_DIR/config فایل پیکربندی مختص مخزن. $GIT_DIR/config.worktree این فایل اختیاری است و تنها زمانی جستجو می‌شود که extensions.worktreeConfig در $GIT_DIR/config وجود داشته باشد. همچنین می‌توانید هنگام اجرای هر دستور گیت با استفاده از گزینه -c پارامترهای پیکربندی اضافی را مشخص کنید. برای جزئیات به git(1) مراجعه کنید. گزینه‌ها از تمام فایل‌های موجود از این میان خوانده خواهند شد. اگر فایل‌های پیکربندی سراسری کاربر یا سراسری سیستم وجود نداشته باشند یا غیرقابل خواندن باشند، نادیده گرفته می‌شوند. اگر فایل پیکربندی مخزن وجود نداشته باشد یا غیرقابل خواندن باشد، git config با یک کد خطای غیرصفر خارج خواهد شد. اگر فایل غیرقابل خواندن باشد پیام خطا صادر می‌شود، اما اگر وجود نداشته باشد پیامی صادر نمی‌شود. فایل‌ها به ترتیبی که در بالا آمده است خوانده می‌شوند، به طوری که آخرین مقدار یافت‌شده نسبت به مقادیری که زودتر خوانده شده‌اند اولویت دارد. هنگامی که چندین مقدار گرفته شود، آنگاه تمام مقادیر یک کلید از تمام فایل‌ها استفاده خواهد شد. به صورت پیش‌فرض، گزینه‌ها تنها در فایل پیکربندی مختص مخزن نوشته می‌شوند. توجه داشته باشید که این موضوع بر گزینه‌هایی مانند set و unset نیز اثر می‌گذارد. git config در هر بار فقط یک فایل را تغییر خواهد داد. می‌توانید منابع پیکربندی قابل خواندن یا نوشتن را با مشخص کردن مسیر یک فایل با گزینه --file، یا با مشخص کردن یک محدوده پیکربندی با --system، --global، --local یا --worktree محدود کنید. برای اطلاعات بیشتر، بخش «گزینه‌ها (OPTIONS)» در بالا را ببینید. محدوده‌ها (SCOPES) هر منبع پیکربندی درون یک محدوده (scope) پیکربندی قرار می‌گیرد. این محدوده‌ها عبارتند از: system $(prefix)/etc/gitconfig global $XDG_CONFIG_HOME/git/config ~/.gitconfig local $GIT_DIR/config worktree $GIT_DIR/config.worktree command متغیرهای محیطی GIT_CONFIG_{COUNT,KEY,VALUE} (بخش «متغیرهای محیطی (ENVIRONMENT)» در زیر را ببینید) گزینه -c به استثنای command، هر محدوده متناظر با یک گزینه خط فرمان است: --system، --global، --local، --worktree. هنگام خواندن گزینه‌ها، تعیین یک محدوده تنها گزینه‌ها را از فایل‌های درون آن محدوده می‌خواند. هنگام نوشتن گزینه‌ها، تعیین یک محدوده در فایل‌های درون آن محدوده خواهد نوشت (به جای فایل پیکربندی مختص مخزن). برای توضیحات کامل بخش «گزینه‌ها (OPTIONS)» در بالا را ببینید. اکثر گزینه‌های پیکربندی صرف‌نظر از محدوده‌ای که در آن تعریف شده‌اند رعایت می‌شوند، اما برخی گزینه‌ها فقط در محدوده‌های خاصی رعایت می‌گردند. برای جزئیات کامل به مستندات گزینه مربوطه مراجعه کنید. پیکربندی محافظت‌شده (Protected configuration) پیکربندی محافظت‌شده به محدوده‌های system، global و command اشاره دارد. به دلایل امنیتی، گزینه‌های خاصی تنها زمانی رعایت می‌شوند که در پیکربندی محافظت‌شده مشخص شده باشند، و در غیر این صورت نادیده گرفته می‌شوند. گیت با این محدوده‌ها طوری رفتار می‌کند که گویی توسط کاربر یا یک مدیر سیستم مورد اعتماد کنترل می‌شوند. دلیل این امر آن است که یک مهاجم که این محدوده‌ها را کنترل کند می‌تواند بدون استفاده از گیت آسیب‌های قابل توجهی وارد سازد، بنابراین فرض بر این است که محیط کاربر از این محدوده‌ها در برابر مهاجمان محافظت می‌کند. متغیرهای محیطی (ENVIRONMENT) GIT_CONFIG_GLOBAL, GIT_CONFIG_SYSTEM پیکربندی را به جای پیکربندی در سطح سراسری (global) یا سطح سیستم (system) از فایل‌های داده‌شده دریافت می‌کند. برای جزئیات به git(1) مراجعه کنید. GIT_CONFIG_NOSYSTEM اینکه آیا خواندن تنظیمات از فایل سراسری سیستم $(prefix)/etc/gitconfig نادیده گرفته شود یا خیر. برای جزئیات به git(1) مراجعه کنید. همچنین بخش «فایل‌ها (FILES)» را ببینید. GIT_CONFIG_COUNT, GIT_CONFIG_KEY_, GIT_CONFIG_VALUE_ اگر GIT_CONFIG_COUNT روی یک عدد مثبت تنظیم شده باشد، تمام جفت‌های محیطی GIT_CONFIG_KEY_ و GIT_CONFIG_VALUE_ تا آن عدد به پیکربندی زمان اجرای فرایند اضافه خواهند شد. جفت‌های پیکربندی با اندیس صفر شروع می‌شوند. هر کلید یا مقدار مفقود به عنوان یک خطا در نظر گرفته می‌شود. یک GIT_CONFIG_COUNT خالی همانند GIT_CONFIG_COUNT=0 در نظر گرفته می‌شود، یعنی هیچ جفتی پردازش نخواهد شد. این متغیرهای محیطی مقادیر موجود در فایل‌های پیکربندی را بازنویسی (override) خواهند کرد، اما توسط هر گزینه صریحی که از طریق git -c ارسال شود بازنویسی می‌شوند. این متغیر برای مواردی مفید است که می‌خواهید چندین دستور گیت را با یک پیکربندی مشترک اجرا کنید اما نمی‌توانید به یک فایل پیکربندی وابسته باشید، برای مثال هنگام نوشتن اسکریپت‌ها. GIT_CONFIG اگر هیچ گزینه --file به git config ارائه نشود، از فایل ارائه‌شده توسط GIT_CONFIG به گونه‌ای استفاده می‌کند که گویی از طریق --file ارائه شده است. این متغیر هیچ اثری بر سایر دستورات گیت ندارد و عمدتاً برای سازگاری گذشته حفظ شده است؛ به طور کلی هیچ دلیلی برای استفاده از آن به جای گزینه --file وجود ندارد. مثال‌ها (EXAMPLES) با فرض یک فایل .git/config مانند این: # # This is the config file, and # a '#' or ';' character indicates # a comment # ; core variables [core] ; Don't trust file modes filemode = false ; Our diff algorithm [diff] external = /usr/local/bin/diff-wrapper renames = true ; Proxy settings [core] gitproxy=proxy-command for kernel.org gitproxy=default-proxy ; for all the rest ; HTTP [http] sslVerify [http "https://weak.example.com"] sslVerify = false cookieFile = /tmp/cookie.txt می‌توانید filemode را با دستور زیر روی true تنظیم کنید: % git config set core.filemode true مدخل‌های فرضی دستور پروکسی در واقع دارای یک پسوند هستند تا مشخص شود برای چه URL اعمال می‌شوند. در اینجا نحوه تغییر مدخل برای kernel.org به "ssh" آمده است: % git config set --value='for kernel.org$' core.gitproxy '"ssh" for kernel.org' این کار اطمینان حاصل می‌کند که تنها جفت کلید/مقدار مربوط به kernel.org جایگزین شود. برای حذف مدخل renames، این دستور را اجرا کنید: % git config unset diff.renames اگر می‌خواهید مدخلی را برای یک متغیر چندمقداری (مانند core.gitproxy در بالا) حذف کنید، باید یک عبارت منظم ارائه دهید که دقیقاً با مقدار یک خط مطابقت داشته باشد. برای پرس‌وجوی مقدار یک کلید مشخص، این دستور را اجرا کنید: % git config get core.filemode یا، برای پرس‌وجوی یک متغیر چندمقداری: % git config get --value="for kernel.org$" core.gitproxy اگر می‌خواهید تمام مقادیر یک متغیر چندمقداری را بدانید، دستور زیر را اجرا کنید: % git config get --all --show-names core.gitproxy اگر اهل ریسک هستید، می‌توانید تمام مقادیر core.gitproxy را با یک مقدار جدید جایگزین کنید: % git config set --all core.gitproxy ssh با این حال، اگر واقعاً فقط می‌خواهید خط مربوط به پروکسی پیش‌فرض را جایگزین کنید، یعنی خطی که پسوند "for ..." ندارد، کاری شبیه به این انجام دهید: % git config set --value='! for ' core.gitproxy ssh برای تطبیق واقعی تنها مقادیری که دارای علامت تعجب هستند، باید به این صورت عمل کنید: % git config set --value='[!]' section.key value برای افزودن یک پروکسی جدید، بدون تغییر هیچ‌یک از گزینه‌های موجود، از این دستور استفاده کنید: % git config set --append core.gitproxy '"proxy-command" for example.com' یک مثال برای استفاده از رنگ سفارشی‌شده از پیکربندی در اسکریپت شما: #!/bin/sh WS=$(git config get --type=color --default="blue reverse" color.diff.whitespace) RESET=$(git config get --type=color --default="reset" "") echo "${WS}your whitespace color or blue reverse${RESET}" برای نشانی‌های وب در https://weak.example.com، مقدار http.sslVerify روی false تنظیم شده است، در حالی که برای سایر نشانی‌ها روی true تنظیم شده است: % git config get --type=bool --url=https://good.example.com http.sslverify true % git config get --type=bool --url=https://weak.example.com http.sslverify false % git config get --url=https://weak.example.com http http.cookieFile /tmp/cookie.txt http.sslverify false فایل پیکربندی (CONFIGURATION FILE) فایل پیکربندی گیت شامل تعدادی متغیر است که بر رفتار دستورات گیت تأثیر می‌گذارند. فایل‌های .git/config و به صورت اختیاری config.worktree (بخش "CONFIGURATION FILE" از git-worktree(1) را ببینید) در هر مخزن برای ذخیره پیکربندی آن مخزن استفاده می‌شوند، و $HOME/.gitconfig برای ذخیره یک پیکربندی به ازای هر کاربر به عنوان مقادیر پشتیبان برای فایل .git/config استفاده می‌شود. فایل /etc/gitconfig می‌تواند برای ذخیره یک پیکربندی پیش‌فرض در سطح سیستم استفاده شود. متغیرهای پیکربندی هم توسط دستورات سطح پایین (plumbing) و هم دستورات سطح بالا (porcelain) گیت استفاده می‌شوند. این متغیرها به بخش‌ها تقسیم شده‌اند، که در آن نام کامل متغیر، آخرین بخش جداشده با نقطه است و نام بخش، تمام چیزهای قبل از آخرین نقطه می‌باشد. نام متغیرها به حروف بزرگ و کوچک حساس نیستند، تنها حروف الفبایی-عددی و - را مجاز می‌دانند، و باید با یک نویسه الفبایی آغاز شوند. برخی از متغیرها ممکن است چندین بار ظاهر شوند؛ در این حالت می‌گوییم که متغیر چندمقداری است. قواعد نحوی (Syntax) قواعد نحوی نسبتاً انعطاف‌پذیر و آسان‌گیرانه است. نویسه‌های فاصله سفید، که در این زمینه شامل نویسه فاصله (SP) و تب افقی (HT) هستند، عمدتاً نادیده گرفته می‌شوند. نویسه‌های # و ; آغازگر توضیحات تا پایان خط هستند. خطوط خالی نادیده گرفته می‌شوند. فایل از بخش‌ها و متغیرها تشکیل شده است. یک بخش با نام بخش در کروشه‌ها آغاز می‌شود و تا زمان شروع بخش بعدی ادامه می‌یابد. نام‌های بخش‌ها به حروف بزرگ و کوچک حساس نیستند. در نام‌های بخش‌ها تنها نویسه‌های الفبایی-عددی، - و . مجاز هستند. هر متغیر باید به بخشی تعلق داشته باشد، به این معنی که قبل از اولین تنظیم یک متغیر باید یک سربرگ بخش وجود داشته باشد. بخش‌ها می‌توانند به زیربخش‌ها تقسیم شوند. برای شروع یک زیربخش، نام آن را در گیومه دوتایی قرار داده و با یک فاصله از نام بخش جدا کنید و در سربرگ بخش قرار دهید، مانند مثال زیر: [section "subsection"] نام‌های زیربخش‌ها به حروف بزرگ و کوچک حساس هستند و می‌توانند شامل هر نویسه‌ای به جز خط جدید و بایت تهی (null) باشند. گیومه دوتایی " و بک‌اسلش را می‌توان به ترتیب با اسکیپ کردن آن‌ها به صورت \" و \\ گنجاند. بک‌اسلش‌های قبل از سایر نویسه‌ها هنگام خواندن حذف می‌شوند؛ برای مثال، \t به صورت t و \0 به صورت 0 خوانده می‌شود. سربرگ‌های بخش نمی‌توانند در چندین خط امتداد یابند. متغیرها ممکن است مستقیماً به یک بخش یا به یک زیربخش مشخص تعلق داشته باشند. در صورت داشتن [section "subsection"] می‌توانید [section] را نیز داشته باشید، اما الزامی به آن نیست. همچنین یک نحو منسوخ‌شده [section.subsection] وجود دارد. با این نحو، نام زیربخش به حروف کوچک تبدیل شده و همچنین به صورت حساس به حروف بزرگ و کوچک مقایسه می‌شود. این نام‌های زیربخش از همان محدودیت‌های نام‌های بخش پیروی می‌کنند. تمام خطوط دیگر (و باقی‌مانده خط پس از سربرگ بخش) به عنوان متغیرهای تنظیم‌کننده شناخته می‌شوند، به شکل name = value (یا صرفاً name که یک میان‌بر برای بیان این است که متغیر دارای مقدار بولی "true" است). نام‌های متغیرها به حروف بزرگ و کوچک حساس نیستند، تنها نویسه‌های الفبایی-عددی و - را مجاز می‌دانند، و باید با یک نویسه الفبایی آغاز شوند. نویسه‌های فاصله سفید در اطراف name، = و value دور ریخته می‌شوند. فاصله‌های سفید داخلی درون value عیناً حفظ می‌شوند. توضیحاتی که با # یا ; شروع شده و تا پایان خط امتداد می‌یابند دور ریخته می‌شوند. خطی که مقداری را تعریف می‌کند می‌تواند با پایان یافتن با یک بک‌اسلش (\) به خط بعدی ادامه یابد؛ بک‌اسلش و نویسه‌های پایان خط دور ریخته می‌شوند. اگر value نیاز دارد که دارای نویسه‌های فاصله سفید ابتدایی یا انتهایی باشد، باید در گیومه دوتایی (") محصور شود. در داخل گیومه دوتایی، نویسه‌های گیومه دوتایی (") و بک‌اسلش (\) باید اسکیپ شوند: از \" برای " و \\ برای \ استفاده کنید. توالی‌های گریز زیر (علاوه بر \" و \\) شناخته شده‌اند: \n برای نویسه خط جدید (NL)، \t برای تب افقی (HT, TAB) و \b برای پس‌بر (BS). سایر توالی‌های گریز نویسه (شامل توالی‌های گریز هشت‌هشتی) نامعتبر هستند. درج‌ها (Includes) بخش‌های include و includeIf به شما امکان می‌دهند دستورالعمل‌های پیکربندی را از منبع دیگری درج کنید. این بخش‌ها عملکرد یکسانی با یکدیگر دارند با این استثنا که بخش‌های includeIf ممکن است در صورتی که شرط آن‌ها به true ارزیابی نشود نادیده گرفته شوند؛ بخش «درج‌های مشروط (Conditional includes)» در زیر را ببینید. می‌توانید با تنظیم متغیر ویژه include.path (یا includeIf.*.path) به نام فایلی که قرار است درج شود، یک فایل پیکربندی را از فایل دیگری درج کنید. این متغیر یک نام مسیر را به عنوان مقدار خود می‌پذیرد و مشمول گسترش مد (tilde expansion) است. این متغیرها را می‌توان چندین بار مشخص کرد. محتویات فایل درج‌شده بلافاصله وارد می‌شود، گویی در محل دستورالعمل درج پیدا شده است. اگر مقدار متغیر یک مسیر نسبی باشد، مسیر نسبت به فایل پیکربندی که دستورالعمل درج در آن یافت شده است نسبی در نظر گرفته می‌شود. برای مثال‌ها به زیر مراجعه کنید. درج‌های مشروط (Conditional includes) می‌توانید با تنظیم یک متغیر includeIf..path به نام فایلی که قرار است درج شود، یک فایل پیکربندی را به صورت مشروط از فایل دیگری درج کنید. شرط با یک کلمه کلیدی آغاز می‌شود و به دنبال آن یک دونقطه (:) و سپس داده‌هایی قرار می‌گیرد که قالب و معنای آن‌ها به کلمه کلیدی بستگی دارد. کلمات کلیدی پشتیبانی‌شده عبارتند از: gitdir داده‌هایی که بعد از کلمه کلیدی gitdir و دونقطه می‌آیند به عنوان یک الگوی تطبیق مسیر (glob) استفاده می‌شوند. اگر مکان دایرکتوری .git با این الگو مطابقت داشته باشد، شرط درج برآورده می‌شود. مکان .git ممکن است به صورت خودکار شناسایی شود یا از متغیر محیطی $GIT_DIR به دست آید. اگر مخزن از طریق یک فایل .git شناسایی شود (برای مثال از زیرماژول‌ها یا یک درخت کاری پیوند داده‌شده)، مکان .git مکان نهایی خواهد بود که دایرکتوری .git در آن قرار دارد، نه مکانی که فایل .git در آن است. الگو می‌تواند شامل نویسه‌های عام استاندارد globbing و دو نویسه اضافی، **/ و /** باشد که می‌توانند چندین جزء مسیر را مطابقت دهند. لطفاً برای جزئیات به gitignore(5) مراجعه کنید. جهت سهولت: • اگر الگو با ~/ آغاز شود، ~ با محتوای متغیر محیطی HOME جایگزین خواهد شد. • اگر الگو با ./ آغاز شود، با دایرکتوری حاوی فایل پیکربندی فعلی جایگزین می‌شود. • اگر الگو با هیچ‌کدام از ~/، ./ یا / آغاز نشود، **/ به صورت خودکار به ابتدای آن اضافه خواهد شد. برای مثال، الگوی foo/bar تبدیل به **/foo/bar می‌شود و با /any/path/to/foo/bar مطابقت خواهد داشت. • اگر الگو با / پایان یابد، ** به صورت خودکار اضافه خواهد شد. برای مثال، الگوی foo/ تبدیل به foo/** می‌شود. به عبارت دیگر، با "foo" و هر آنچه در داخل آن است به صورت بازگشتی مطابقت خواهد داشت. gitdir/i این مورد همانند gitdir است، به جز اینکه تطبیق بدون حساسیت به حروف بزرگ و کوچک انجام می‌شود (برای مثال در سیستم‌های فایلی غیرحساس به حروف). onbranch داده‌هایی که بعد از کلمه کلیدی onbranch و دونقطه می‌آیند به عنوان الگویی با نویسه‌های عام استاندارد globbing و دو نویسه اضافی، **/ و /** در نظر گرفته می‌شوند که می‌توانند چندین جزء مسیر را مطابقت دهند. اگر در یک درخت کاری باشیم که در آن نام شاخه فعلی چک‌اوت‌شده با الگو مطابقت داشته باشد، شرط درج برآورده می‌شود. اگر الگو با / پایان یابد، ** به صورت خودکار اضافه خواهد شد. برای مثال، الگوی foo/ تبدیل به foo/** می‌شود. به عبارت دیگر، با تمام شاخه‌هایی که با foo/ آغاز می‌شوند مطابقت دارد. این مورد زمانی مفید است که شاخه‌های شما به صورت سلسله‌مراتبی سازماندهی شده باشند و بخواهید یک پیکربندی را برای تمام شاخه‌ها در آن سلسله‌مراتب اعمال کنید. hasconfig:remote.*.url داده‌هایی که بعد از این کلمه کلیدی و دونقطه می‌آیند به عنوان الگویی با نویسه‌های عام استاندارد globbing و دو نویسه اضافی، **/ و /** در نظر گرفته می‌شوند که می‌توانند چندین جزء را مطابقت دهند. نخستین باری که این کلمه کلیدی دیده شود، باقی‌مانده فایل‌های پیکربندی برای یافتن URLهای ریموت اسکن خواهند شد (بدون اعمال هیچ‌گونه مقداری). اگر حداقل یک URL ریموت وجود داشته باشد که با این الگو مطابقت کند، شرط درج برآورده می‌شود. فایل‌هایی که توسط این گزینه درج می‌شوند (به طور مستقیم یا غیرمستقیم) مجاز نیستند حاوی URLهای ریموت باشند. توجه داشته باشید که برخلاف سایر شرایط includeIf، حل این شرط متکی بر اطلاعاتی است که در زمان خواندن شرط هنوز مشخص نیست. یک مورد استفاده معمول این است که این گزینه در یک پیکربندی سطح سیستم یا سطح سراسری وجود داشته باشد، و URL ریموت در یک پیکربندی سطح محلی باشد؛ از این رو هنگام حل این شرط نیاز به پیش‌اسکن است. به منظور اجتناب از مسئله «مرغ و تخم‌مرغ» که در آن فایل‌های به طور بالقوه درج‌شده می‌توانند بر اینکه آیا چنین فایل‌هایی به طور بالقوه درج می‌شوند یا خیر اثر بگذارند، گیت با منع این فایل‌ها از اثرگذاری بر حل این شرایط (و در نتیجه منع آن‌ها از اعلان URLهای ریموت)، این چرخه را می‌شکند. در مورد نام‌گذاری این کلمه کلیدی، این نام‌گذاری برای سازگاری آینده با طرح نام‌گذاری‌ای است که از شرایط درج مبتنی بر متغیرهای بیشتر پشتیبانی کند، اما در حال حاضر گیت تنها از همان کلمه کلیدی دقیق توضیح‌داده‌شده در بالا پشتیبانی می‌کند. چند نکته بیشتر در مورد تطبیق از طریق gitdir و gitdir/i: • پیوندهای نمادین (Symlinks) در $GIT_DIR پیش از تطبیق حل نمی‌شوند. • هر دو نسخه پیوند نمادین و مسیر واقعی (realpath) در خارج از $GIT_DIR مطابقت داده خواهند شد. برای مثال اگر git/~ یک پیوند نمادین به mnt/storage/git/ باشد، هر دو gitdir:~/git و gitdir:/mnt/storage/git مطابقت خواهند داشت. این موضوع در نسخه اولیه این قابلیت در v2.13.0 وجود نداشت، که تنها نسخه مسیر واقعی را مطابقت می‌داد. پیکربندی‌ای که می‌خواهد با نسخه اولیه این قابلیت سازگار باشد باید یا تنها نسخه مسیر واقعی را مشخص کند، یا هر دو نسخه را. • توجه داشته باشید که "../" خاص نیست و به صورت لفظی مطابقت داده خواهد شد، که احتمالاً چیزی نیست که شما می‌خواهید. مثال (Example) # Core variables [core] ; Don't trust file modes filemode = false # Our diff algorithm [diff] external = /usr/local/bin/diff-wrapper renames = true [branch "devel"] remote = origin merge = refs/heads/devel # Proxy settings [core] gitProxy="ssh" for "kernel.org" gitProxy=default-proxy ; for the rest [include] path = /path/to/foo.inc ; include by absolute path path = foo.inc ; find "foo.inc" relative to the current file path = ~/foo.inc ; find "foo.inc" in your `$HOME` directory ; include if $GIT_DIR is /path/to/foo/.git [includeIf "gitdir:/path/to/foo/.git"] path = /path/to/foo.inc ; include for all repositories inside /path/to/group [includeIf "gitdir:/path/to/group/"] path = /path/to/foo.inc ; include for all repositories inside $HOME/to/group [includeIf "gitdir:~/to/group/"] path = /path/to/foo.inc ; relative paths are always relative to the including ; file (if the condition is true); their location is not ; affected by the condition [includeIf "gitdir:/path/to/group/"] path = foo.inc ; include only if we are in a worktree where foo-branch is ; currently checked out [includeIf "onbranch:foo-branch"] path = foo.inc ; include only if a remote with the given URL exists (note ; that such a URL may be provided later in a file or in a ; file read after this file is read, as seen in this example) [includeIf "hasconfig:remote.*.url:https://example.com/**"] path = foo.inc [remote "origin"] url = https://example.com/git مقادیر (Values) مقادیر بسیاری از متغیرها به عنوان یک رشته ساده در نظر گرفته می‌شوند، اما متغیرهایی وجود دارند که مقادیری از انواع خاص را می‌پذیرند و قوانینی در مورد نحوه نگارش آن‌ها وجود دارد. boolean هنگامی که گفته می‌شود یک متغیر مقدار بولی (boolean) می‌پذیرد، مترادف‌های متعددی برای true و false پذیرفته می‌شوند؛ تمامی این موارد غیرحساس به حروف بزرگ و کوچک هستند. true مقدارهای لیترال برای true بولی عبارتند از yes، on، true و 1. همچنین، متغیری که بدون = تعریف شود به عنوان true در نظر گرفته می‌شود. false مقدارهای لیترال برای false بولی عبارتند از no، off، false، 0 و رشته خالی. هنگام تبدیل یک مقدار به شکل استاندارد آن با استفاده از مشخص‌کننده نوع --type=bool، git config اطمینان حاصل خواهد کرد که خروجی "true" یا "false" باشد (نوشته‌شده با حروف کوچک). integer مقدار بسیاری از متغیرها که اندازه‌های مختلف را مشخص می‌کنند می‌تواند با پسوندهای k، M و غیره همراه باشد تا به معنای «مقیاس‌بندی عدد در 1024»، «در 1024x1024» و غیره باشد. color مقدار متغیری که یک رنگ را می‌پذیرد، فهرستی از رنگ‌ها (حداکثر دو رنگ، یکی برای پیش‌زمینه و یکی برای پس‌زمینه) و ویژگی‌ها (هر تعداد که بخواهید) است که با فاصله از هم جدا شده‌اند. رنگ‌های پایه‌ای پذیرفته‌شده عبارتند از normal، black، red، green، yellow، blue، magenta، cyan، white و default. اولین رنگ داده‌شده برای پیش‌زمینه و دومین رنگ برای پس‌زمینه است. تمام رنگ‌های پایه به جز normal و default دارای یک حالت روشن (bright) هستند که می‌توان با افزودن پیشوند bright به رنگ، مانند brightred، آن‌ها را مشخص کرد. رنگ normal هیچ تغییری در رنگ ایجاد نمی‌کند. این رنگ همانند یک رشته خالی است، اما می‌توان از آن به عنوان رنگ پیش‌زمینه در هنگام مشخص کردن رنگ پس‌زمینه به تنهایی استفاده کرد (برای مثال، "normal red"). رنگ default به طور صریح رنگ را به حالت پیش‌فرض ترمینال بازنشانی می‌کند، برای مثال برای مشخص کردن یک پس‌زمینه پاک‌شده. اگرچه این مورد بین ترمینال‌ها متفاوت است، اما معمولاً مشابه تنظیم روی "white black" نیست. رنگ‌ها همچنین می‌توانند به عنوان اعدادی بین 0 تا 255 داده شوند؛ این رنگ‌ها از حالت 256 رنگی ANSI استفاده می‌کنند (اما توجه داشته باشید که ممکن است همه ترمینال‌ها از آن پشتیبانی نکنند). اگر ترمینال شما پشتیبانی کند، می‌توانید مقادیر RGB بیست‌وچهار بیتی را نیز به صورت هگزادسیمال مشخص کنید، مانند #ff0ab3، یا مقادیر RGB دوازده بیتی مانند #f1b که معادل رنگ 24 بیتی #ff11bb است. ویژگی‌های پذیرفته‌شده عبارتند از bold، dim، ul، blink، reverse، italic و strike (برای خط‌خورده یا حروفی با خط روی آن‌ها). موقعیت هر ویژگی نسبت به رنگ‌ها (قبل، بعد یا در بین آن‌ها) اهمیتی ندارد. ویژگی‌های خاص را می‌توان با افزودن پیشوند no یا no- (مانند noreverse، no-ul و غیره) غیرفعال کرد. شبه‌ویژگی reset تمام رنگ‌ها و ویژگی‌ها را پیش از اعمال رنگ‌آمیزی مشخص‌شده بازنشانی می‌کند. برای مثال، reset green باعث یک پیش‌زمینه سبز و پس‌زمینه پیش‌فرض بدون هیچ ویژگی فعالی خواهد شد. یک رشته رنگ خالی هیچ اثر رنگی ایجاد نمی‌کند. از این مورد می‌توان برای اجتناب از رنگ‌آمیزی المان‌های خاص بدون غیرفعال کردن کامل رنگ استفاده کرد. برای جایگاه‌های رنگی پیش‌تعریف‌شده در گیت، ویژگی‌ها به گونه‌ای در نظر گرفته شده‌اند که در ابتدای هر مورد در خروجی رنگی بازنشانی شوند. بنابراین تنظیم color.decorate.branch روی black آن نام شاخه را به رنگ ساده black درمی‌آورد، حتی اگر مورد قبلی در همان خط خروجی (مانند پرانتز بازکننده قبل از فهرست نام‌های شاخه‌ها در خروجی log --decorate) تنظیم شده باشد که با bold یا ویژگی دیگری رنگ‌آمیزی شود. با این حال، قالب‌های سفارشی لاگ ممکن است رنگ‌آمیزی‌های پیچیده‌تر و لایه‌بندی‌شده‌ای انجام دهند و حالت‌های منفی‌شده ممکن است در آنجا مفید باشند. pathname به متغیری که مقدار pathname (نام مسیر) را می‌پذیرد می‌توان رشته‌ای داد که با "~/" یا "~user/" آغاز می‌شود، و گسترش معمولی مد (tilde) برای چنین رشته‌ای رخ می‌دهد: ~/ به مقدار $HOME و ~user/ به دایرکتوری خانگی کاربر مشخص‌شده گسترش می‌یابد. اگر یک مسیر با %(prefix)/ آغاز شود، باقی‌مانده آن به عنوان یک مسیر نسبی به «پیشوند زمان اجرا» (runtime prefix) گیت، یعنی نسبت به مکانی که گیت در آن نصب شده است، تفسیر می‌شود. برای مثال، %(prefix)/bin/ به دایرکتوری‌ای اشاره دارد که فایل اجرایی گیت در آن قرار دارد. اگر گیت بدون پشتیبانی از پیشوند زمان اجرا کامپایل شده باشد، پیشوند کامپایل‌شده به جای آن جایگزین خواهد شد. در صورت نادری که نیاز باشد یک مسیر لفظی مشخص شود که نباید not گسترش یابد، لازم است پیشوند ./ به آن اضافه شود، مانند: ./%(prefix)/bin. اگر با پیشوند :(optional) همراه باشد، در صورتی که مسیر نام‌برده وجود نداشته باشد، با متغیر پیکربندی به گونه‌ای رفتار می‌شود که گویی وجود ندارد. متغیرها (Variables) توجه داشته باشید که این فهرست جامع نیست و لزوماً کامل نمی‌باشد. برای متغیرهای مخصوص هر دستور، توضیحات دقیق‌تر را در صفحه راهنمای مربوطه خواهید یافت. سایر ابزارهای مرتبط با گیت نیز ممکن است از متغیرهای اختصاصی خود استفاده کنند و این کار را انجام می‌دهند. هنگام تعریف متغیرهای جدید برای استفاده در ابزار خود، اطمینان حاصل کنید که نام آن‌ها با متغیرهای مورد استفاده توسط خود Git و سایر ابزارهای پرکاربرد تداخل نداشته باشد، و آن‌ها را در مستندات خود شرح دهید. add.ignoreErrors, add.ignore-errors (منسوخ‌شده) به git add می‌گوید زمانی که برخی از فایل‌ها به دلیل خطاهای ایندکس‌گذاری قابل افزودن نیستند، به افزودن فایل‌ها ادامه دهد. معادل گزینه --ignore-errors در git-add(1). add.ignore-errors منسوخ شده است، زیرا از قرارداد نام‌گذاری معمول برای متغیرهای پیکربندی پیروی نمی‌کند. advice.* این متغیرها پیام‌های راهنمای اختیاری مختلفی را کنترل می‌کنند که برای کمک به کاربران جدید طراحی شده‌اند. اگر پیکربندی نشوند، Git پیام را همراه با دستورالعمل‌هایی درباره نحوه بی‌صدا کردن آن نمایش می‌دهد. می‌توانید با تنظیم متغیر مربوطه روی false به Git اعلام کنید که موضوع را متوجه شده‌اید و دیگر به آن پیام راهنمای خاص نیازی ندارید. از آنجا که این پیام‌ها برای کمک به کاربران انسانی در نظر گرفته شده‌اند، در خروجی خطای استاندارد (standard error) چاپ می‌شوند. هنگامی که ابزارهایی که Git را به عنوان یک زیرفرآیند اجرا می‌کنند آن‌ها را مخل می‌دانند، می‌توانند GIT_ADVICE=0 را در محیط تنظیم کنند تا تمام پیام‌های راهنما بی‌صدا شوند. addEmbeddedRepo زمانی نشان داده می‌شود که کاربر به طور تصادفی یک مخزن گیت را درون مخزن دیگری اضافه می‌کند. addEmptyPathspec زمانی نشان داده می‌شود که کاربر git add را بدون ارائه پارامتر مشخصه مسیر (pathspec) اجرا می‌کند. addIgnoredFile زمانی نشان داده می‌شود که کاربر تلاش می‌کند فایلی نادیده‌گرفته‌شده (ignored) را به ایندکس اضافه کند. amWorkDir زمانی نشان داده می‌شود که git-am(1) در اعمال یک فایل وصله ناموفق است، تا مکان فایل را به کاربر اطلاع دهد. ambiguousFetchRefspec زمانی نشان داده می‌شود که یک مشخصه مرجع واکشی (fetch refspec) برای چند ریموت به همان فضای نام شاخه ردیابی ریموت (remote-tracking branch) نگاشت می‌شود و باعث شکست در راه‌اندازی ردیابی شاخه می‌گردد. checkoutAmbiguousRemoteBranchName زمانی نشان داده می‌شود که آرگومان داده‌شده به git-checkout(1) و git-switch(1) به طور مبهم به یک شاخه ردیابی ریموت در بیش از یک ریموت حل‌وفصل می‌شود، در شرایطی که یک آرگومان غیرمبهم در غیر این صورت باعث تحویل گرفتن (checkout) یک شاخه ردیابی ریموت می‌شد. برای چگونگی تنظیم یک ریموت معین برای استفاده پیش‌فرض در برخی شرایطی که این راهنما چاپ می‌شود، متغیر پیکربندی checkout.defaultRemote را ببینید. commitBeforeMerge زمانی نشان داده می‌شود که git-merge(1) برای جلوگیری از رونویسی تغییرات محلی، از ادغام خودداری می‌کند. detachedHead زمانی نشان داده می‌شود که کاربر از git-switch(1) یا git- checkout(1) برای رفتن به وضعیت HEAD جداشده (detached HEAD) استفاده می‌کند، تا نحوه ایجاد یک شاخه محلی را پس از وقوع به کاربر بگوید. diverging زمانی نشان داده می‌شود که فوروارد سریع (fast-forward) امکان‌پذیر نیست. fetchShowForcedUpdates زمانی نشان داده می‌شود که git-fetch(1) زمان زیادی را صرف محاسبه به‌روزرسانی‌های اجباری پس از به‌روزرسانی مراجع می‌کند، یا برای هشدار دادن درباره اینکه این بررسی غیرفعال است. forceDeleteBranch زمانی نشان داده می‌شود که کاربر تلاش می‌کند شاخه‌ای را که به طور کامل ادغام نشده است بدون تنظیم گزینه اجبار (force) حذف کند. ignoredHook زمانی نشان داده می‌شود که یک هوک نادیده گرفته می‌شود زیرا به عنوان قابل اجرا تنظیم نشده است. implicitIdentity زمانی نشان داده می‌شود که اطلاعات کاربر از روی نام کاربری سیستم و نام دامنه حدس زده می‌شود، تا به کاربر بگوید چگونه پیکربندی هویت خود را تنظیم کند. mergeConflict زمانی نشان داده می‌شود که دستورات مختلف به دلیل تعارض‌ها متوقف می‌شوند. nestedTag زمانی نشان داده می‌شود که کاربر تلاش می‌کند به طور بازگشتی روی یک شیء تگ، تگ بزند. pushAlreadyExists زمانی نشان داده می‌شود که git-push(1) به‌روزرسانی‌ای را که شرایط فوروارد سریع را ندارد رد می‌کند (مانند یک تگ). pushFetchFirst زمانی نشان داده می‌شود که git-push(1) به‌روزرسانی‌ای را که سعی دارد یک مرجع ریموت اشاره‌کننده به شیئی را که ما نداریم رونویسی کند، رد می‌نماید. pushNeedsForce زمانی نشان داده می‌شود که git-push(1) به‌روزرسانی‌ای را که قصد دارد یک مرجع ریموت اشاره‌کننده به شیئی غیر از شبه‌کامیت (commit-ish) را رونویسی کند، یا باعث شود مرجع ریموت به شیئی که شبه‌کامیت نیست اشاره کند، رد می‌نماید. pushNonFFCurrent زمانی نشان داده می‌شود که git-push(1) به دلیل به‌روزرسانی غیر فوروارد سریع (non-fast-forward) در شاخه فعلی با شکست مواجه می‌شود. pushNonFFMatching زمانی نشان داده می‌شود که کاربر git-push(1) را اجرا کرده و مراجع منطبق («matching refs») را به صراحت ارسال نموده است (یعنی از : استفاده کرده، یا مشخصه مرجعی را تعیین نموده که شاخه فعلی نیست) و این کار منجر به خطای غیر فوروارد سریع شده است. pushRefNeedsUpdate زمانی نشان داده می‌شود که git-push(1) به‌روزرسانی اجباری یک شاخه را رد می‌کند هنگامی که مرجع ردیابی ریموت آن دارای به‌روزرسانی‌هایی است که ما به صورت محلی نداریم. pushUnqualifiedRefname زمانی نشان داده می‌شود که git-push(1) از تلاش برای حدس زدن فضای نام مرجع ریموتی که مبدأ به آن تعلق دارد بر اساس مراجع مبدأ و مقصد منصرف می‌شود، اما در جایی که هنوز می‌توانیم بر اساس نوع شیء مبدأ به کاربر پیشنهاد دهیم که به refs/heads/* یا refs/tags/* ارسال کند. pushUpdateRejected این متغیر را روی false تنظیم کنید اگر می‌خواهید pushNonFFCurrent، pushNonFFMatching، pushAlreadyExists، pushFetchFirst، pushNeedsForce و pushRefNeedsUpdate را به طور همزمان غیرفعال کنید. rebaseTodoError زمانی نشان داده می‌شود که پس از ویرایش فهرست کارهای بازسازی (rebase todo list) خطایی رخ دهد. refSyntax زمانی نشان داده می‌شود که کاربر یک نام مرجع نامعتبر ارائه دهد، تا کاربر را از مستندات نحو مرجع مطلع کند. resetNoRefresh زمانی نشان داده می‌شود که git-reset(1) برای بازخوانی ایندکس پس از ریست بیش از ۲ ثانیه طول می‌کشد، تا به کاربر بگوید می‌تواند از گزینه --no-refresh استفاده کند. resolveConflict توسط دستورات مختلف زمانی نشان داده می‌شود که تعارض‌ها مانع از انجام عملیات می‌شوند. rmHints هنگام شکست در خروجی git-rm(1) نشان داده می‌شود تا راهنمایی‌هایی درباره نحوه ادامه کار از وضعیت فعلی ارائه دهد. sequencerInUse زمانی نشان داده می‌شود که یک دستور توالی‌ساز (sequencer) در حال حاضر در حال اجرا است. skippedCherryPicks زمانی نشان داده می‌شود که git-rebase(1) کامیتی را که قبلاً به صورت گلچین (cherry-pick) بر روی شاخه بالادست اعمال شده نادیده می‌گیرد. sparseIndexExpanded زمانی نشان داده می‌شود که یک ایندکس پراکنده (sparse index) به یک ایندکس کامل گسترش می‌یابد، که احتمالاً به دلیل وجود مجموعه‌ای غیرمنتظره از فایل‌ها در خارج از تحویل پراکنده (sparse-checkout) است. statusAheadBehind زمانی نشان داده می‌شود که git-status(1) تعداد جلو/عقب بودن (ahead/behind) یک مرجع محلی را در مقایسه با مرجع ردیابی ریموت آن محاسبه می‌کند و این محاسبه بیش از حد انتظار طول می‌کشد. اگر status.aheadBehind روی false باشد یا گزینه --no-ahead-behind داده شود ظاهر نخواهد شد. statusHints راهنمایی‌هایی درباره نحوه ادامه کار از وضعیت فعلی را در خروجی git-status(1)، در الگوی نمایش داده‌شده هنگام نوشتن پیام کامیت در git-commit(1)، و در پیام راهنمای نمایش داده‌شده توسط git- switch(1) یا git-checkout(1) هنگام جابجایی شاخه‌ها نمایش می‌دهد. statusUoption زمانی نشان داده می‌شود که git-status(1) برای شمارش فایل‌های ردیابی‌نشده بیش از ۲ ثانیه طول می‌کشد، تا به کاربر بگوید می‌تواند از گزینه -u استفاده کند. submoduleAlternateErrorStrategyDie زمانی نشان داده می‌شود که تنظیم گزینه submodule.alternateErrorStrategy روی «die» باعث بروز یک خطای مهلک (fatal) می‌شود. submoduleMergeConflict راهنمایی نمایش‌داده‌شده هنگام مواجهه با یک تعارض ادغام زیرماژول غیربدیهی. submodulesNotUpdated زمانی نشان داده می‌شود که کاربر دستور زیرماژولی را اجرا می‌کند که به دلیل عدم اجرای git submodule update --init با شکست مواجه می‌شود. suggestDetachingHead زمانی نشان داده می‌شود که git-switch(1) از جدا کردن HEAD بدون گزینه صریح --detach خودداری می‌کند. updateSparsePath زمانی نشان داده می‌شود که از git-add(1) یا git-rm(1) خواسته می‌شود ورودی‌های ایندکس خارج از تحویل پراکنده (sparse checkout) فعلی را به‌روزرسانی کنند. waitingForEditor زمانی نشان داده می‌شود که Git منتظر ورودی ویرایشگر است. به عنوان مثال زمانی کاربرد دارد که ویرایشگر در داخل ترمینال اجرا نمی‌شود. worktreeAddOrphan زمانی نشان داده می‌شود که کاربر تلاش می‌کند یک درخت کاری (worktree) را از روی یک مرجع نامعتبر ایجاد کند، تا به کاربر بگوید چگونه به جای آن یک شاخه متولدنشده (unborn) جدید ایجاد کند. alias.*, alias.*.command نام‌های مستعار دستور برای بسته‌بند دستور git(1). نام‌های مستعار را می‌توان با استفاده از دو نحو تعریف کرد: 1. بدون زیربخش (subsection)، برای مثال: [alias] co = checkout. نام مستعار (در این مثال «co») به نویسه‌های الفبایی-عددی ASCII و - محدود است و بدون حساسیت به حروف بزرگ و کوچک مطابقت داده می‌شود. 2. با یک زیربخش، برای مثال: [alias "co"] command = checkout. نام مستعار می‌تواند شامل هر نویسه‌ای (به جز خط جدید و بایت‌های NUL) باشد، از جمله UTF-8، و به صورت بایت‌های خام و با حساسیت به حروف بزرگ و کوچک مطابقت داده می‌شود. شما عمل نام مستعار را در command تعریف می‌کنید. مثال‌ها: # Without subsection (ASCII alphanumeric and dash only) [alias] co = checkout st = status # With subsection (allows any characters, including UTF-8) [alias "hämta"] command = fetch [alias "rätta till"] command = commit --amend با تعریف یک نام مستعار گیت، به عنوان مثال: $ git config --global alias.last "cat-file commit HEAD" # Which is equivalent to $ git config --global alias.last.command "cat-file commit HEAD" دستور git last معادل است با git cat-file commit HEAD. برای جلوگیری از سردرگمی و بروز مشکل در استفاده اسکریپت‌ها، نام‌های مستعاری که دستورات موجود Git را پنهان می‌کنند، به جز در مورد دستورات منسوخ‌شده، نادیده گرفته می‌شوند. آرگومان‌ها با فاصله از هم جدا می‌شوند و نقل‌قول و گریز معمول شل پشتیبانی می‌شوند. می‌توان از یک جفت نقل‌قول یا یک بک‌اسلش برای نقل‌قول کردن آن‌ها استفاده کرد. توجه داشته باشید که کلمه اول یک نام مستعار لزوماً نباید یک دستور باشد. می‌تواند یک گزینه خط فرمان باشد که به فراخوانی git ارسال می‌شود. به ویژه، این قابلیت هنگام استفاده با -c برای ارسال پیکربندی‌های یک‌باره یا -p برای اجبار به صفحه‌بندی خروجی مفید است. برای مثال، loud-rebase = -c commit.verbose=true rebase را می‌توان طوری تعریف کرد که اجرای git loud-rebase معادل با git -c commit.verbose=true rebase باشد. همچنین، ps = -p status یک نام مستعار مفید خواهد بود، زیرا git ps خروجی git status را صفحه‌بندی می‌کند در حالی که دستور اصلی این کار را انجام نمی‌دهد. اگر ابتدای بسط نام مستعار با یک علامت تعجب همراه باشد، به عنوان یک دستور شل در نظر گرفته می‌شود. برای مثال، با تعریف alias.new = !gitk --all --not ORIG_HEAD، فراخوانی git new معادل با اجرای دستور شل gitk --all --not ORIG_HEAD خواهد بود. توجه: • دستورات شل از پوشه سطح بالای (top-level) مخزن اجرا خواهند شد، که لزوماً پوشه فعلی نیست. • مقدار GIT_PREFIX همان‌طور که از اجرای git rev-parse --show-prefix از پوشه فعلی اولیه بازگردانده می‌شود تنظیم می‌گردد. git-rev-parse(1) را ببینید. • نام‌های مستعار دستور شل همیشه آرگومان‌های اضافی ارائه‌شده به خط فرمان Git را به عنوان آرگومان‌های موضعی (positional arguments) دریافت می‌کنند. • اگر نام مستعار شل شما یک اسکریپت «یک‌خطی» با چند دستور است (مثلاً در یک خط‌لوله)، به چندین آرگومان ارجاع می‌دهد، یا به هر نحو قادر به مدیریت آرگومان‌های موضعی اضافه‌شده در انتها نیست، باید دقت به خرج دهید. برای مثال: alias.cmd = "!echo $1 | grep $2" که به صورت git cmd 1 2 فراخوانی شود، به این شکل اجرا خواهد شد: echo $1 | grep $2 1 2، که مورد نظر شما نیست. • یک راه مناسب برای رفع این مشکل این است که عملیات اسکریپت خود را در یک تابع درون‌خطی (inline function) بنویسید که سپس با هر آرگومان ارائه‌شده از خط فرمان فراخوانی شود. برای مثال: alias.cmd = "!c() { echo $1 | grep $2 ; }; c" مثال قبلی را به درستی اجرا خواهد کرد. • تنظیم GIT_TRACE=1 می‌تواند به شما در اشکال‌زدایی دستوری که برای نام مستعارتان اجرا می‌شود کمک کند. am.keepcr اگر true باشد، git-am(1) برای وصله‌ها در قالب mbox، git-mailsplit(1) را با پارامتر --keep-cr فراخوانی می‌کند. در این حالت git- mailsplit(1) کاراکتر \r را از خطوطی که به \r\n ختم می‌شوند حذف نمی‌کند. با ارائه --no-keep-cr از خط فرمان قابل بازنویسی است. am.threeWay به طور پیش‌فرض، اگر وصله به طور تمیز اعمال نشود، git-am(1) با شکست مواجه خواهد شد. اگر روی true تنظیم شود، این تنظیم به git-am(1) می‌گوید که در صورت ثبت هویت حباب‌ها (blobs) در وصله که قرار است روی آن‌ها اعمال شود و در صورت در دسترس بودن محلی آن حباب‌ها، به ادغام ۳-طرفه (3-way merge) بازگردد (معادل دادن گزینه --3way از خط فرمان). مقدار پیش‌فرض false است. am.messageId هنگام استفاده از git-am(1)، یک دنباله (trailer) با عنوان Message-ID بر اساس سرآیند ایمیل به کامیت اضافه می‌کند (به git-interpret- trailers(1) مراجعه کنید). همچنین گزینه‌های --message-id و --no-message-id را ببینید. apply.ignoreWhitespace زمانی که روی change تنظیم شود، به git apply می‌گوید که تغییرات در فاصله‌های خالی (whitespace) را نادیده بگیرد، همانند گزینه --ignore-space-change. هنگامی که روی یکی از مقادیر: no، none، never، false تنظیم شود، به git apply می‌گوید تمام تفاوت‌های فاصله‌های خالی را رعایت کند. به git-apply(1) مراجعه کنید. apply.whitespace به git apply می‌گوید که چگونه فاصله‌های خالی را مدیریت کند، همانند گزینه --whitespace. به git-apply(1) مراجعه کنید. attr.tree مرجعی به یک درخت (tree) در مخزن که ویژگی‌ها به جای فایل .gitattributes در درخت کاری از آن خوانده شود. اگر مقدار به یک شیء درخت معتبر حل‌وفصل نشود، به جای آن یک درخت خالی استفاده می‌شود. هنگامی که متغیر محیطی GIT_ATTR_SOURCE یا گزینه خط فرمان --attr-source استفاده شوند، این متغیر پیکربندی هیچ اثری ندارد. یادداشت (Note) گزینه‌های پیکربندی در bitmapPseudoMerge.* آزمایشی (EXPERIMENTAL) در نظر گرفته می‌شوند و ممکن است در آینده دستخوش تغییر شده یا به طور کامل حذف شوند. برای اطلاعات بیشتر درباره ویژگی نگاشت‌بیتی شبه‌ادغام (pseudo-merge bitmap)، بخش «Pseudo-merge bitmaps» در gitpacking(7) را ببینید. bitmapPseudoMerge..pattern عبارت منظم مورد استفاده برای تطبیق نام‌های مرجع. کامیت‌هایی که توسط مراجع منطبق با این الگو اشاره می‌شوند (و معیارهای زیر را برآورده می‌کنند، مانند bitmapPseudoMerge..sampleRate و bitmapPseudoMerge..threshold) برای گنجاندن در یک نگاشت‌بیتی شبه‌ادغام در نظر گرفته خواهند شد. کامیت‌ها بر اساس اینکه آیا هر مرجعی که به یک کامیت مشخص اشاره می‌کند با الگو (که یک عبارت منظم گسترش‌یافته است) تطابق دارد یا خیر، در گروه‌های شبه‌ادغام دسته‌بندی می‌شوند. درون یک گروه شبه‌ادغام، کامیت‌ها ممکن است بر اساس گروه‌های تسخیر (capture groups) در الگو، بیشتر به زیرگروه‌ها تقسیم شوند. این زیرگروه‌بندی‌ها از عبارات منظم با الحاق هر گروه تسخیر از عبارت منظم، با یک خط تیره - در این میان تشکیل می‌شوند. برای مثال، اگر الگو refs/tags/ باشد، آنگاه تمام تگ‌ها (به شرطی که معیارهای زیر را برآورده کنند) به عنوان نامزدهای همان گروه شبه‌ادغام در نظر گرفته می‌شوند. اما اگر الگو در عوض refs/remotes/([0-9])+/tags/ باشد، آنگاه تگ‌های ریموت‌های مختلف بر اساس شماره ریموت در گروه‌های شبه‌ادغام جداگانه دسته‌بندی خواهند شد. bitmapPseudoMerge..decay نرخی را تعیین می‌کند که با آن گروه‌های نگاشت‌بیتی شبه‌ادغام متوالی اندازه خود را کاهش می‌دهند. باید نامنفی باشد. این پارامتر را می‌توان به عنوان k در تابع f(n) = C * n^-k در نظر گرفت، که در آن f(n) اندازه گروه n-اُم است. تنظیم نرخ زوال (decay rate) برابر با 0 باعث می‌شود همه گروه‌ها اندازه یکسانی داشته باشند. تنظیم نرخ زوال برابر با 1 باعث می‌شود گروه n-اُم اندازه‌ای معادل `1/n` اندازه گروه اولیه داشته باشد. مقادیر بالاتر نرخ زوال باعث می‌شود که گروه‌های متوالی با نرخ فزاینده‌ای کوچک‌تر شوند. مقدار پیش‌فرض 1 است. اگر همه گروه‌ها هم‌اندازه باشند، این احتمال وجود دارد که گروه‌های حاوی کامیت‌های جدیدتر کمتر از گروه‌های قبلی قابل استفاده باشند، زیرا این احتمال بیشتر است که مراجع اشاره‌کننده به کامیت‌های جدیدتر مکرراً به‌روزرسانی شوند تا مرجعی که به یک کامیت قدیمی اشاره دارد. bitmapPseudoMerge..sampleRate نسبت کامیت‌های بدون نگاشت‌بیتی (در میان نوک‌های مرجع) را که برای گنجاندن در یک نگاشت‌بیتی شبه‌ادغام ناپایدار انتخاب می‌شوند تعیین می‌کند. باید بزرگ‌تر از 0 و کوچک‌تر یا مساوی با 1 باشد. مقدار پیش‌فرض 1 است. bitmapPseudoMerge..threshold حداقل سن کامیت‌های بدون نگاشت‌بیتی (در میان نوک‌های مرجع، مانند بالا) را که نامزد گنجاندن در یک نگاشت‌بیتی شبه‌ادغام ناپایدار هستند تعیین می‌کند. مقدار پیش‌فرض 1.week.ago است. bitmapPseudoMerge..maxMerges حداکثر تعداد کامیت‌های شبه‌ادغام را که کامیت‌ها ممکن است در میان آن‌ها توزیع شوند تعیین می‌کند. برای گروه‌های شبه‌ادغام که الگوی آن‌ها شامل هیچ گروه تسخیری نیست، این تنظیم برای تمام کامیت‌های منطبق با عبارت منظم اعمال می‌شود. برای الگوهایی که یک یا چند گروه تسخیر دارند، این تنظیم برای هر گروه تسخیر متمایز اعمال می‌گردد. برای مثال، اگر گروه تسخیر شما refs/tags/ باشد، این تنظیم تمام تگ‌ها را حداکثر در maxMerges کامیت شبه‌ادغام توزیع می‌کند. با این حال، اگر گروه تسخیر شما مثلاً refs/remotes/([0-9]+)/tags/ باشد، این تنظیم برای مجموعه تگ‌های هر ریموت به طور جداگانه اعمال خواهد شد. باید نامنفی باشد. مقدار پیش‌فرض 64 است. bitmapPseudoMerge..stableThreshold حداقل سن کامیت‌ها (در میان نوک‌های مرجع، همان‌طور که در بالا گفته شد، هرچند کامیت‌های پایدار حتی در صورتی که توسط یک نگاشت‌بیتی پوشش داده شده باشند همچنان نامزد در نظر گرفته می‌شوند) را که نامزد یک نگاشت‌بیتی شبه‌ادغام پایدار هستند تعیین می‌کند. مقدار پیش‌فرض 1.month.ago است. تنظیم این آستانه روی مقداری کوچک‌تر (مثلاً 1.week.ago) باعث می‌شود گروه‌های پایدار بیشتری ایجاد شوند (که هزینه تولید یک‌باره را تحمیل می‌کنند) اما این گروه‌ها احتمالاً با گذشت زمان کهنه می‌شوند. استفاده از یک مقدار بزرگ‌تر جریمه معکوس را به همراه دارد (گروه‌های پایدار کمتر که مفیدتر هستند). bitmapPseudoMerge..stableSize اندازه (بر حسب تعداد کامیت‌ها) یک نگاشت‌بیتی شبه‌ادغام پایدار را تعیین می‌کند. مقدار پیش‌فرض 512 است. blame.blankBoundary نمایش نام شیء کامیت خالی برای کامیت‌های مرزی در git-blame(1). این گزینه به طور پیش‌فرض روی false است. blame.coloring این متغیر طرح رنگ‌آمیزی اعمال‌شده بر خروجی blame را تعیین می‌کند. می‌تواند repeatedLines، highlightRecent یا none باشد که پیش‌فرض است. blame.date قالب مورد استفاده برای خروجی تاریخ‌ها در git-blame(1) را مشخص می‌کند. در صورت عدم تنظیم، از قالب iso استفاده می‌شود. برای مقادیر پشتیبانی‌شده، توضیحات گزینه --date را در git-log(1) ببینید. blame.showEmail نمایش ایمیل نویسنده به جای نام نویسنده در git-blame(1). این گزینه به طور پیش‌فرض روی false است. blame.showRoot عدم برخورد با کامیت‌های ریشه به عنوان مرز در git-blame(1). این گزینه به طور پیش‌فرض روی false است. blame.ignoreRevsFile ویرایش‌های (revisions) فهرست‌شده در فایل را (یک نام شیء خلاصه‌نشده در هر خط) در git-blame(1) نادیده می‌گیرد. فاصله‌های خالی و توضیحاتی که با # شروع می‌شوند نادیده گرفته می‌شوند. این گزینه ممکن است چندین بار تکرار شود. نام‌های فایل خالی، فهرست ویرایش‌های نادیده‌گرفته‌شده را بازنشانی می‌کنند. این گزینه پیش از گزینه خط فرمان --ignore-revs-file پردازش خواهد شد. blame.markUnblamableLines خطوطی را که توسط یک ویرایش نادیده‌گرفته‌شده تغییر یافته‌اند و نتوانسته‌ایم آن‌ها را به کامیت دیگری نسبت دهیم، با یک * در خروجی git- blame(1) علامت‌گذاری می‌کند. blame.markIgnoredLines خطوطی را که توسط یک ویرایش نادیده‌گرفته‌شده تغییر یافته‌اند و ما آن‌ها را به کامیت دیگری نسبت داده‌ایم، با یک ? در خروجی git-blame(1) علامت‌گذاری می‌کند. branch.autoSetupMerge به git branch، git switch و git checkout می‌گوید شاخه‌های جدید را طوری تنظیم کنند که git-pull(1) به طور مناسب از شاخه نقطه شروع ادغام شود. توجه داشته باشید که حتی اگر این گزینه تنظیم نشده باشد، این رفتار را می‌توان برای هر شاخه با استفاده از گزینه‌های --track و --no-track انتخاب کرد. این گزینه به طور پیش‌فرض روی true است. تنظیمات معتبر عبارتند از: false هیچ راه‌اندازی خودکاری انجام نمی‌شود true راه‌اندازی خودکار زمانی انجام می‌شود که نقطه شروع یک شاخه ردیابی ریموت باشد always راه‌اندازی خودکار زمانی انجام می‌شود که نقطه شروع یک شاخه محلی یا یک شاخه ردیابی ریموت باشد inherit اگر نقطه شروع دارای پیکربندی ردیابی باشد، به شاخه جدید کپی می‌شود simple راه‌اندازی خودکار تنها زمانی انجام می‌شود که نقطه شروع یک شاخه ردیابی ریموت باشد و شاخه جدید همان نام شاخه ریموت را داشته باشد. branch.autoSetupRebase هنگامی که یک شاخه جدید با git branch، git switch یا git checkout ایجاد می‌شود که شاخه دیگری را ردیابی می‌کند، این متغیر به Git می‌گوید pull را طوری تنظیم کند که به جای ادغام (merge)، بازسازی (rebase) انجام دهد (به branch..rebase مراجعه کنید). تنظیمات معتبر عبارتند از: never rebase هرگز به طور خودکار روی true تنظیم نمی‌شود. local rebase برای شاخه‌های ردیابی‌شده سایر شاخه‌های محلی روی true تنظیم می‌شود. remote rebase برای شاخه‌های ردیابی‌شده شاخه‌های ردیابی ریموت روی true تنظیم می‌شود. always rebase برای همه شاخه‌های ردیابی روی true تنظیم خواهد شد. برای جزئیات بیشتر در مورد نحوه تنظیم یک شاخه برای ردیابی شاخه دیگر، branch.autoSetupMerge را ببینید. این گزینه به طور پیش‌فرض روی never است. branch.sort این متغیر ترتیب مرتب‌سازی شاخه‌ها را هنگام نمایش توسط git-branch(1) کنترل می‌کند. بدون ارائه گزینه --sort=، مقدار این متغیر به عنوان پیش‌فرض استفاده خواهد شد. برای مقادیر معتبر، نام فیلدهای git- for-each-ref(1) را ببینید. branch..remote هنگامی که در شاخه هستید، به git fetch و git push می‌گوید از کدام ریموت واکشی کرده یا به کدام ارسال کنند. ریموت مقصد ارسال ممکن است با remote.pushDefault (برای همه شاخه‌ها) بازنویسی شود. ریموت مقصد ارسال، برای شاخه فعلی، ممکن است بیشتر توسط branch..pushRemote بازنویسی گردد. اگر هیچ ریموتی پیکربندی نشده باشد، یا اگر در هیچ شاخه‌ای نباشید و بیش از یک ریموت در مخزن تعریف شده باشد، مقدار پیش‌فرض برای واکشی origin و برای ارسال remote.pushDefault است. علاوه بر این، . (یک نقطه) نشان‌دهنده مخزن محلی فعلی است (یک مخزن نقطه‌ای یا dot-repository)، یادداشت نهایی branch..merge را در زیر ببینید. branch..pushRemote هنگامی که در شاخه هستید، branch..remote را برای ارسال (push) بازنویسی می‌کند. همچنین remote.pushDefault را برای ارسال از شاخه بازنویسی می‌نماید. هنگامی که از یک مکان (مثلاً بالادست خود) pull می‌کنید و به مکان دیگری (مثلاً مخزن انتشار اختصاصی خود) push انجام می‌دهید، ممکن است بخواهید remote.pushDefault را برای مشخص کردن ریموت مقصد ارسال برای همه شاخه‌ها تنظیم کنید و از این گزینه برای بازنویسی آن برای یک شاخه خاص استفاده نمایید. branch..merge به همراه branch..remote، شاخه بالادست را برای شاخه داده‌شده تعریف می‌کند. به git fetch/git pull/git rebase می‌گوید کدام شاخه را ادغام کنند و همچنین می‌تواند بر git push تأثیر بگذارد (به push.default مراجعه کنید). هنگامی که در شاخه هستید، به git fetch مشخصه مرجع (refspec) پیش‌فرضی را که باید برای ادغام در FETCH_HEAD علامت‌گذاری شود می‌گوید. مقدار مانند بخش ریموت یک مشخصه مرجع مدیریت می‌شود و باید با مرجعی مطابقت داشته باشد که از ریموت ارائه‌شده توسط branch..remote واکشی شده است. اطلاعات ادغام توسط git pull (که ابتدا git fetch را فراخوانی می‌کند) برای یافتن شاخه پیش‌فرض ادغام استفاده می‌شود. بدون این گزینه، git pull به طور پیش‌فرض اولین مشخصه مرجع واکشی‌شده را ادغام می‌کند. مقادیر متعددی را برای دستیابی به یک ادغام هشت‌پا (octopus merge) مشخص کنید. اگر می‌خواهید git pull را طوری تنظیم کنید که از شاخه دیگری در مخزن محلی در ادغام شود، می‌توانید branch..merge را به شاخه مورد نظر اشاره دهید و از تنظیم مسیر نسبی . (یک نقطه) برای branch..remote استفاده نمایید. branch..mergeOptions گزینه‌های پیش‌فرض را برای ادغام در شاخه تنظیم می‌کند. نحو و گزینه‌های پشتیبانی‌شده مانند گزینه‌های git-merge(1) هستند، اما مقادیر گزینه‌های حاوی نویسه‌های فاصله خالی در حال حاضر پشتیبانی نمی‌شوند. branch..rebase هنگامی که روی true باشد، در زمان اجرای git pull، شاخه را به جای ادغام شاخه پیش‌فرض از ریموت پیش‌فرض، بر روی شاخه واکشی‌شده بازسازی (rebase) می‌کند. برای انجام این کار به شیوه‌ای غیر وابسته به شاخه، pull.rebase را ببینید. هنگامی که روی merges (یا صرفاً m) باشد، گزینه --rebase-merges را به git rebase ارسال می‌کند تا کامیت‌های ادغام محلی در rebase گنجانده شوند (برای جزئیات به git-rebase(1) مراجعه کنید). هنگامی که مقدار interactive (یا صرفاً i) باشد، بازسازی در حالت تعاملی اجرا می‌شود. توجه: این عملیاتی بالقوه خطرناک است؛ از آن استفاده نکنید مگر اینکه پیامدهای آن را درک کرده باشید (برای جزئیات به git-rebase(1) مراجعه کنید). branch..description توضیحات شاخه، با git branch --edit-description قابل ویرایش است. توضیحات شاخه به طور خودکار به نامه مقدماتی (cover letter) در format-patch یا خلاصه request-pull اضافه می‌شود. browser..cmd دستور فراخوانی مرورگر مشخص‌شده را تعیین می‌کند. دستور مشخص‌شده در شل ارزیابی شده و نشانی‌های اینترنتی به عنوان آرگومان به آن ارسال می‌شوند. (به git-web--browse(1) مراجعه کنید). browser..path مسیر ابزار داده‌شده را که ممکن است برای مرور راهنمای HTML (گزینه -w در git-help(1) را ببینید) یا یک مخزن کاری در gitweb (به git- instaweb(1) مراجعه کنید) استفاده شود، بازنویسی می‌کند. bundle.* کلیدهای bundle.* ممکن است در یک فایل فهرست بسته (bundle list) که از طریق گزینه git clone --bundle-uri یافت شده ظاهر شوند. این کلیدها در حال حاضر در صورت قرار گرفتن در فایل پیکربندی مخزن هیچ اثری ندارند، اگرچه این موضوع در آینده تغییر خواهد کرد. برای جزئیات بیشتر به the bundle URI design document[1] مراجعه کنید. bundle.version این مقدار عدد صحیح نسخه قالب فهرست بسته مورد استفاده توسط فهرست بسته را اعلان می‌کند. در حال حاضر، تنها مقدار پذیرفته‌شده 1 است. bundle.mode این مقدار رشته‌ای باید all یا any باشد. این مقدار مشخص می‌کند که آیا تمام بسته‌های اعلان‌شده برای باز کردن بسته و دستیابی به درک کاملی از اطلاعات بسته‌بندی‌شده مورد نیاز هستند (all) یا اینکه هر یک از URIهای بسته فهرست‌شده کافی است (any). bundle.heuristic اگر این کلید با مقدار رشته‌ای وجود داشته باشد، فهرست بسته به گونه‌ای طراحی شده است که با دستورات افزایشی git fetch به خوبی کار کند. این اکتشاف (heuristic) نشان می‌دهد که کلیدهای اضافی برای هر بسته در دسترس هستند که به تعیین زیرمجموعه‌ای از بسته‌ها که کلاینت باید دانلود کند کمک می‌نمایند. تنها مقداری که در حال حاضر قابل درک است creationToken می‌باشد. bundle..* کلیدهای bundle..* برای توصیف یک آیتم منفرد در فهرست بسته استفاده می‌شوند که برای اهداف شناسایی تحت گروه‌بندی شده‌اند. bundle..uri این مقدار رشته‌ای، نشانی URI را مشخص می‌کند که Git از طریق آن می‌تواند به محتویات این دسترسی پیدا کند. این URI ممکن است یک فایل بسته یا یک فهرست بسته دیگر باشد. checkout.defaultRemote هنگامی که شما git checkout یا git switch را اجرا می‌کنید و فقط یک ریموت دارید، ممکن است به طور ضمنی به تحویل گرفتن و ردیابی به عنوان مثال origin/ بازگردد. به محض اینکه بیش از یک ریموت با مرجع داشته باشید، این عملکرد متوقف می‌شود. این تنظیم اجازه می‌دهد نام یک ریموت ترجیحی تنظیم شود که همیشه هنگام رفع ابهام اولویت داشته باشد. کاربرد معمول این است که این گزینه روی origin تنظیم شود. در حال حاضر این متغیر توسط git-switch(1) و git-checkout(1) زمانی استفاده می‌شود که git checkout یا git switch شاخه را روی ریموت دیگری تحویل بگیرند، و همچنین توسط git-worktree(1) زمانی که git worktree add به یک شاخه ریموت ارجاع می‌دهد. این تنظیم ممکن است در آینده برای سایر دستورات یا قابلیت‌های مشابه checkout نیز استفاده شود. checkout.guess مقدار پیش‌فرض را برای گزینه --guess یا --no-guess در git checkout و git switch فراهم می‌کند. git-switch(1) و git-checkout(1) را ببینید. checkout.workers تعداد کارگرهای موازی (parallel workers) مورد استفاده هنگام به‌روزرسانی درخت کاری. مقدار پیش‌فرض یک است، یعنی اجرای متوالی. اگر روی مقداری کمتر از یک تنظیم شود، Git به تعداد هسته‌های منطقی در دسترس از کارگرها استفاده خواهد کرد. این تنظیم و checkout.thresholdForParallelism بر تمام دستوراتی که عمل چک‌اوت را انجام می‌دهند تأثیر می‌گذارند؛ مانند checkout، clone، reset، sparse-checkout و غیره. یادداشت چک‌اوت موازی معمولاً برای مخازن قرارگرفته روی SSD یا روی NFS عملکرد بهتری ارائه می‌دهد. برای مخازن روی دیسک‌های چرخان یا ماشین‌هایی با تعداد هسته‌های اندک، چک‌اوت متوالی پیش‌فرض اغلب عملکرد بهتری دارد. اندازه و سطح فشرده‌سازی یک مخزن نیز ممکن است بر میزان کارایی نسخه موازی تأثیر بگذارد. checkout.thresholdForParallelism هنگام اجرای چک‌اوت موازی با تعداد اندکی فایل، هزینه ایجاد زیرفرآیند و ارتباط بین‌فرآیندی ممکن است بر مزایای موازی‌سازی بچربد. این تنظیم به شما اجازه می‌دهد حداقل تعداد فایل‌هایی را که چک‌اوت موازی باید برای آن‌ها امتحان شود تعیین کنید. مقدار پیش‌فرض 100 است. clean.requireForce یک مقدار بولی برای اینکه git-clean از حذف فایل‌ها خودداری کند مگر آنکه گزینه -f مشخص شده باشد. به‌طور پیش‌فرض true است. clone.defaultRemoteName نام ریموتی که هنگام کلون کردن یک مخزن ایجاد می‌شود. مقدار پیش‌فرض origin است. می‌توان آن را با ارسال گزینه خط فرمان --origin به git- clone(1) بازنویسی کرد. clone.rejectShallow رد کردن کلون یک مخزن در صورتی که کم‌عمق (shallow) باشد؛ این رفتار را می‌توان با ارسال گزینه --reject-shallow در خط فرمان لغو کرد. به git- clone(1) مراجعه کنید. clone.filterSubmodules اگر یک فیلتر کلون جزئی ارائه شده باشد (به --filter در git-rev- list(1) مراجعه کنید) و --recurse-submodules استفاده شود، فیلتر را برای زیرماژول‌ها نیز اعمال می‌کند. color.advice یک مقدار بولی برای فعال/غیرفعال کردن رنگ در پیام‌های راهنما (مثلاً هنگامی که یک push ناموفق بود، برای مشاهده فهرست به advice.* مراجعه کنید). ممکن است روی always، false (یا never) یا auto (یا true) تنظیم شود، که در این حالت رنگ‌ها تنها زمانی استفاده می‌شوند که خروجی خطا به یک ترمینال ارسال شود. اگر تنظیم نشده باشد، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.advice.hint استفاده از رنگ سفارشی برای پیام‌های راهنما. color.blame.highlightRecent تعیین رنگ حاشیه‌نویسی خطوط برای git blame --color-by-age بسته به قدمت خط. این تنظیم باید روی فهرستی از رنگ‌ها و تاریخ‌های جداشده با کاما تنظیم شود، که با یک رنگ آغاز شده و با یک رنگ پایان می‌یابد؛ تاریخ‌ها باید از قدیمی‌ترین به جدیدترین مرتب شوند. فراداده در صورتی که خط قبل از برچسب زمانی داده‌شده ایجاد شده باشد با رنگ‌های مشخص‌شده رنگ‌آمیزی می‌شود، و رنگ‌های برچسب زمانی قدیمی‌تر را بازنویسی می‌کند. به جای برچسب زمانی مطلق، برچسب‌های زمانی نسبی نیز کار می‌کنند، مثلاً 2.weeks.ago برای اشاره به هر موردی قدیمی‌تر از ۲ هفته معتبر است. مقدار پیش‌فرض آن blue,12 month ago,white,1 month ago,red است، که هر چیزی قدیمی‌تر از یک سال را آبی می‌کند، تغییرات اخیر بین یک ماه تا یک سال سفید نگه داشته می‌شوند، و خطوط ایجادشده در طول یک ماه گذشته به رنگ قرمز درمی‌آیند. color.blame.repeatedLines استفاده از رنگ مشخص‌شده برای رنگ‌آمیزی حاشیه‌نویسی خطوط در git blame --color-lines، در صورتی که از همان کامیت خط قبلی آمده باشند. مقدار پیش‌فرض cyan است. color.branch یک مقدار بولی برای فعال/غیرفعال کردن رنگ در خروجی git-branch(1). می‌تواند روی always، false (یا never) یا auto (یا true) تنظیم شود، که در این حالت رنگ‌ها تنها زمانی استفاده می‌شوند که خروجی به یک ترمینال ارسال شود. در صورت تنظیم نشدن، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.branch. استفاده از رنگ سفارشی برای رنگ‌آمیزی شاخه. یکی از موارد زیر است: current (شاخه فعلی)، local (یک شاخه محلی)، remote (یک شاخه ردیابی از راه دور در refs/remotes/)، upstream (شاخه ردیابی بالادست)، plain (سایر ارجاع‌ها). color.diff آیا از دنباله‌های گریز ANSI برای افزودن رنگ به پچ‌ها استفاده شود یا خیر. اگر این مقدار روی always تنظیم شود، دستورات git-diff(1)، git- log(1) و git-show(1) برای تمام پچ‌ها از رنگ استفاده خواهند کرد. اگر روی true یا auto تنظیم شود، این دستورات تنها زمانی که خروجی به ترمینال می‌رود از رنگ استفاده می‌کنند. اگر تنظیم نشده باشد، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). این تنظیم روی git-format-patch(1) یا دستورات لوله‌کشی (plumbing) git-diff-* تأثیری ندارد. می‌تواند در خط فرمان با گزینه --color[=] لغو شود. color.diff. استفاده از رنگ سفارشی برای رنگ‌آمیزی diff. مشخص می‌کند که کدام بخش از پچ از رنگ مشخص‌شده استفاده کند، و یکی از موارد زیر است: context (متن زمینه - plain یک مترادف قدیمی است)، meta (اطلاعات متا)، frag (هدر تکه تغییرات)، func (تابع در هدر تکه تغییرات)، old (خطوط حذف‌شده)، new (خطوط اضافه‌شده)، commit (هدرهای کامیت)، whitespace (برجسته‌سازی خطاهای فاصله‌گذاری)، oldMoved (خطوط حذف‌شده)، newMoved (خطوط اضافه‌شده)، oldMovedDimmed، oldMovedAlternative، oldMovedAlternativeDimmed، newMovedDimmed، newMovedAlternative newMovedAlternativeDimmed (برای جزئیات به تنظیم در گزینه --color-moved از git-diff(1) مراجعه کنید)، contextDimmed، oldDimmed، newDimmed، contextBold، oldBold و newBold (برای جزئیات به git-range-diff(1) مراجعه کنید). color.decorate. استفاده از رنگ سفارشی برای خروجی git log --decorate. به ترتیب یکی از مقادیر branch، remoteBranch، tag، stash یا HEAD برای شاخه‌های محلی، شاخه‌های ردیابی ریموت، برچسب‌ها، استش و HEAD است و grafted برای کامیت‌های پیوندخورده (grafted). color.grep هنگامی که روی always تنظیم شود، همیشه موارد منطبق را برجسته می‌کند. هنگامی که false (یا never) باشد، هرگز. هنگامی که روی true یا auto تنظیم شود، رنگ را تنها زمانی استفاده می‌کند که خروجی در ترمینال نوشته شود. اگر تنظیم نشده باشد، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.grep. استفاده از رنگ سفارشی برای رنگ‌آمیزی grep. مشخص می‌کند کدام بخش از خط از رنگ مشخص‌شده استفاده کند، و یکی از موارد زیر است: context متن غیرمنطبق در خطوط زمینه (هنگام استفاده از -A، -B یا -C) filename پیشوند نام فایل (هنگامی که از -h استفاده نمی‌شود) function خطوط نام تابع (هنگام استفاده از -p) lineNumber پیشوند شماره خط (هنگام استفاده از -n) column پیشوند شماره ستون (هنگام استفاده از --column) match متن منطبق (مشابه تنظیم matchContext و matchSelected) matchContext متن منطبق در خطوط زمینه matchSelected متن منطبق در خطوط انتخاب‌شده. همچنین برای سفارشی‌سازی زیردستورهای زیر از git-log(1) استفاده می‌شود: --grep، --author و --committer. selected متن غیرمنطبق در خطوط انتخاب‌شده. همچنین برای سفارشی‌سازی زیردستورهای زیر از git-log(1) استفاده می‌شود: --grep، --author و --committer. separator جداکننده‌های بین فیلدها در یک خط (:، - و =) و بین تکه‌ها (--) color.interactive هنگامی که روی always تنظیم شود، همیشه از رنگ‌ها برای اعلانات و نمایش‌های تعاملی استفاده کن (مانند مواردی که توسط "git-add --interactive" و "git-clean --interactive" استفاده می‌شود). هنگامی که false (یا never) باشد، هرگز. هنگامی که روی true یا auto تنظیم شود، رنگ‌ها تنها زمانی استفاده می‌شوند که خروجی به ترمینال باشد. در صورت تنظیم نشدن، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.interactive. استفاده از رنگ سفارشی برای خروجی‌های git add --interactive و git clean --interactive. می‌تواند prompt، header، help یا error برای چهار نوع متمایز از خروجی‌های عادی دستورات تعاملی باشد. color.pager یک مقدار بولی برای مشخص کردن اینکه آیا حالت‌های رنگی auto باید خروجی ارسال‌شده به صفحه‌بندی‌کننده (pager) را رنگ‌آمیزی کنند یا خیر. پیش‌فرض true است؛ اگر صفحه‌بندی‌کننده شما کدهای رنگی ANSI را درک نمی‌کند، این را روی false تنظیم کنید. color.push یک مقدار بولی برای فعال/غیرفعال کردن رنگ در خطاهای push. ممکن است روی always، false (یا never) یا auto (یا true) تنظیم شود، که در این حالت رنگ‌ها تنها زمانی استفاده می‌شوند که خروجی خطا به یک ترمینال ارسال شود. در صورت تنظیم نشدن، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.push.error استفاده از رنگ سفارشی برای خطاهای push. color.remote در صورت تنظیم، کلمات کلیدی در ابتدای خط برجسته می‌شوند. این کلمات کلیدی شامل "error" ،"warning" ،"hint" و "success" هستند و بدون حساسیت به بزرگی و کوچکی حروف تطبیق داده می‌شوند. ممکن است روی always، false (یا never) یا auto (یا true) تنظیم شود. در صورت تنظیم نشدن، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.remote. استفاده از رنگ سفارشی برای هر کلمه کلیدی ریموت. می‌تواند hint، warning، success یا error باشد که با کلمه کلیدی متناظر تطبیق می‌یابد. color.showBranch یک مقدار بولی برای فعال/غیرفعال کردن رنگ در خروجی git-show- branch(1). می‌تواند روی always، false (یا never) یا auto (یا true) تنظیم شود، که در این صورت رنگ‌ها تنها زمانی که خروجی به ترمینال ارسال می‌شود به کار می‌روند. در صورت تنظیم نشدن، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.status یک مقدار بولی برای فعال/غیرفعال کردن رنگ در خروجی git-status(1). می‌تواند روی always، false (یا never) یا auto (یا true) تنظیم شود، که در این حالت رنگ‌ها فقط زمانی که خروجی به یک ترمینال می‌رود استفاده می‌شوند. در صورت تنظیم نشدن، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.status. استفاده از رنگ سفارشی برای رنگ‌آمیزی وضعیت. یکی از موارد زیر است: header (متن هدر پیام وضعیت)، added یا updated (فایل‌هایی که اضافه شده‌اند اما هنوز کامیت نشده‌اند)، changed (فایل‌هایی که تغییر یافته‌اند اما در ایندکس اضافه نشده‌اند)، untracked (فایل‌هایی که توسط Git ردیابی نمی‌شوند)، branch (شاخه فعلی)، nobranch (رنگی که هشدار no branch با آن نشان داده می‌شود، با پیش‌فرض قرمز)، localBranch یا remoteBranch (به ترتیب نام شاخه محلی و ریموت، زمانی که اطلاعات شاخه و ردیابی در قالب کوتاه وضعیت نمایش داده می‌شود)، یا unmerged (فایل‌هایی که تغییرات ادغام‌نشده دارند). color.transport یک مقدار بولی برای فعال/غیرفعال کردن رنگ هنگام رد شدن pushها. ممکن است روی always، false (یا never) یا auto (یا true) تنظیم شود، که در این حالت رنگ‌ها فقط زمانی که خروجی خطا به یک ترمینال ارسال می‌شود استفاده می‌گردند. در صورت تنظیم نشدن، مقدار color.ui استفاده می‌شود (به‌طور پیش‌فرض auto). color.transport.rejected استفاده از رنگ سفارشی هنگامی که یک push رد شده باشد. color.ui این متغیر مقدار پیش‌فرض را برای متغیرهایی مانند color.diff و color.grep تعیین می‌کند که استفاده از رنگ را در هر خانواده دستور کنترل می‌نمایند. دامنه آن با پشتیبانی دستورات بیشتر از قابلیت پیکربندی جهت تعیین پیش‌فرض برای گزینه --color گسترش خواهد یافت. اگر ترجیح می‌دهید دستورات Git از رنگ استفاده نکنند مگر اینکه صریحاً با پیکربندی دیگری یا گزینه --color فعال شده باشد، آن را روی false یا never تنظیم کنید. اگر می‌خواهید تمام خروجی‌هایی که برای پردازش ماشینی در نظر گرفته نشده‌اند از رنگ استفاده کنند آن را روی always، و اگر می‌خواهید این خروجی‌ها هنگام ارسال به ترمینال از رنگ استفاده کنند آن را روی true یا auto تنظیم نمایید (این گزینه از Git 1.8.4 مقدار پیش‌فرض است). column.ui مشخص می‌کند که آیا دستورات پشتیبانی‌شده باید خروجی را در ستون‌ها نمایش دهند یا خیر. این متغیر شامل فهرستی از توکن‌ها است که با فاصله یا کاما از هم جدا شده‌اند: این گزینه‌ها زمان فعال بودن این ویژگی را کنترل می‌کنند (به‌طور پیش‌فرض never): always همیشه در ستون‌ها نمایش داده شود never هرگز در ستون‌ها نمایش داده نشود auto اگر خروجی به ترمینال برود در ستون‌ها نمایش داده شود این گزینه‌ها چیدمان را کنترل می‌کنند (به‌طور پیش‌فرض column). تنظیم هر یک از این موارد در صورتی که هیچ‌یک از مقادیر always، never یا auto مشخص نشده باشند، به معنای always خواهد بود. column ستون‌ها قبل از سطرها پر شوند row سطرها قبل از ستون‌ها پر شوند plain در یک ستون نمایش داده شود در نهایت، این گزینه‌ها را می‌توان با یک گزینه چیدمان ترکیب کرد (به‌طور پیش‌فرض nodense): dense ایجاد ستون‌هایی با اندازه نابرابر برای بهره‌گیری از فضای بیشتر nodense ایجاد ستون‌هایی با اندازه برابر column.branch مشخص می‌کند که آیا خروجی فهرست شاخه‌ها در git branch به صورت ستونی نمایش داده شود یا خیر. برای جزئیات به column.ui مراجعه کنید. column.clean تعیین چیدمان هنگام فهرست کردن موارد در git clean -i، که همیشه فایل‌ها و پوشه‌ها را در ستون‌ها نشان می‌دهد. برای جزئیات به column.ui مراجعه کنید. column.status مشخص می‌کند که آیا فایل‌های ردیابی‌نشده در git status به صورت ستونی نمایش داده شوند یا خیر. برای جزئیات به column.ui مراجعه کنید. column.tag مشخص می‌کند که آیا فهرست برچسب‌ها در git tag به صورت ستونی نمایش داده شود یا خیر. برای جزئیات به column.ui مراجعه کنید. commit.cleanup این تنظیم پیش‌فرض گزینه --cleanup را در git commit بازنویسی می‌کند. برای جزئیات به git-commit(1) مراجعه کنید. تغییر مقدار پیش‌فرض زمانی مفید است که می‌خواهید خطوطی را که با نویسه توضیح (core.commentChar، پیش‌فرض #) شروع می‌شوند همیشه در پیام گزارش خود نگه دارید، که در این حالت دستور زیر را اجرا می‌کنید: git config commit.cleanup whitespace (توجه داشته باشید که اگر این کار را انجام دهید، خودتان باید خطوط راهنما را که با نویسه توضیح در الگوی گزارش کامیت شروع می‌شوند، حذف کنید). commit.gpgSign یک مقدار بولی برای مشخص کردن اینکه آیا تمام کامیت‌ها باید با GPG امضا شوند یا خیر. استفاده از این گزینه هنگام انجام عملیاتی مانند rebase می‌تواند به امضا شدن تعداد زیادی کامیت منجر شود. برای جلوگیری از تایپ چندباره عبارت عبور GPG، ممکن است استفاده از یک agent مناسب باشد. commit.status یک مقدار بولی برای فعال/غیرفعال کردن درج اطلاعات وضعیت در الگوی پیام کامیت هنگام استفاده از ویرایشگر برای آماده‌سازی پیام کامیت. به‌طور پیش‌فرض true است. commit.template مسیر فایلی را مشخص می‌کند که به عنوان الگو برای پیام‌های کامیت جدید استفاده شود. commit.verbose یک مقدار بولی یا عددی برای تعیین سطح جزئیات خروجی در git commit. برای جزئیات به git-commit(1) مراجعه کنید. commitGraph.generationVersion نوع نسخه شماره نسل را برای استفاده هنگام نوشتن یا خواندن فایل commit-graph مشخص می‌کند. اگر نسخه 1 مشخص شود، تاریخ‌های تصحیح‌شده کامیت نوشته یا خوانده نخواهند شد. به‌طور پیش‌فرض 2 است. commitGraph.maxNewFilters مقدار پیش‌فرض را برای گزینه --max-new-filters در دستور git commit-graph write مشخص می‌کند (قیاس کنید با git-commit-graph(1)). commitGraph.changedPaths اگر true باشد، git commit-graph write به‌طور پیش‌فرض فیلترهای بلوم مسیرهای تغییریافته را محاسبه کرده و می‌نویسد، که معادل با ارسال --changed-paths است. اگر false یا تنظیم‌نشده باشد، فیلترهای بلوم مسیرهای تغییریافته در حین git commit-graph write فقط در صورتی نوشته می‌شوند که این فیلترها از قبل در فایل commit-graph فعلی وجود داشته باشند. این با رفتار پیش‌فرض git commit-graph write بدون هیچ گزینه --[no-]changed-paths مطابقت دارد. برای بازنویسی فایل commit-graph بدون فیلترها، از گزینه --no-changed-paths استفاده کنید. گزینه خط فرمان --[no-]changed-paths همیشه بر این پیکربندی اولویت دارد. مقدار پیش‌فرض تنظیم‌نشده است. commitGraph.readChangedPaths منسوخ شده است. معادل commitGraph.changedPathsVersion=-1 در صورت true بودن، و commitGraph.changedPathsVersion=0 در صورت false بودن است. (اگر commitGraph.changedPathVersion نیز تنظیم شده باشد، commitGraph.changedPathsVersion اولویت دارد.) commitGraph.changedPathsVersion نسخه فیلترهای بلوم مسیرهای تغییریافته را که Git می‌خواند و می‌نویسد مشخص می‌کند. ممکن است -1، 0، 1 یا 2 باشد. توجه داشته باشید که مقادیر بزرگتر از 1 ممکن است با نسخه‌های قدیمی‌تر Git که هنوز آن نسخه‌ها را درک نمی‌کنند ناسازگار باشند. هنگام کار در محیطی با نسخه‌های ترکیبی احتیاط کنید. پیش‌فرض -1 است. اگر -1 باشد، Git از نسخه فیلترهای بلوم مسیرهای تغییریافته موجود در مخزن استفاده می‌کند، و اگر هیچ‌کدام وجود نداشته باشد پیش‌فرض 1 خواهد بود. اگر 0 باشد، Git هیچ فیلتر بلومی را نمی‌خواند، و هنگام صدور دستور نوشتن، فیلترهای بلوم نسخه 1 را می‌نویسد. اگر 1 باشد، Git فقط فیلترهای بلوم نسخه 1 را می‌خواند، و فیلترهای بلوم نسخه 1 را می‌نویسد. اگر 2 باشد، Git فقط فیلترهای بلوم نسخه 2 را می‌خواند، و فیلترهای بلوم نسخه 2 را می‌نویسد. برای اطلاعات بیشتر به git-commit-graph(1) مراجعه کنید. completion.commands این متغیر تنها توسط git-completion.bash برای افزودن یا حذف دستورات از فهرست دستورات تکمیل خودکار استفاده می‌شود. معمولاً فقط دستورات سطوح بالا (porcelain) و تعداد معدودی دستور منتخب دیگر تکمیل می‌شوند. می‌توانید دستورات بیشتری را که با فاصله از هم جدا شده‌اند به این متغیر اضافه کنید. قرار دادن پیشوند - پیش از دستور، آن را از فهرست موجود حذف می‌کند. core.fileMode به Git می‌گوید که آیا بیت اجرایی (executable bit) فایل‌ها در درخت کاری رعایت شود یا خیر. برخی سیستم‌های فایل هنگام چک‌اوت فایلی که به عنوان قابل اجرا علامت‌گذاری شده است، بیت اجرایی را از دست می‌دهند، یا فایلی غیرقابل اجرا را با بیت اجرایی فعال چک‌اوت می‌کنند. git-clone(1) یا git- init(1) سیستم فایل را بررسی می‌کنند تا ببینند آیا بیت قابل اجرا را به درستی مدیریت می‌کند یا خیر و این متغیر در صورت نیاز به‌طور خودکار تنظیم می‌شود. با این حال، ممکن است یک مخزن روی سیستم فایلی باشد که حالت فایل را به درستی مدیریت می‌کند، و این متغیر هنگام ایجاد روی true تنظیم شده باشد، اما بعداً از محیط دیگری در دسترس قرار گیرد که حالت فایل را از بین می‌برد (مانند صادر کردن ext4 از طریق مانت CIFS، یا بازدید از مخزن ایجادشده در Cygwin توسط Git for Windows یا Eclipse). در چنین حالتی ممکن است لازم باشد این متغیر روی false تنظیم شود. به git- update-index(1) مراجعه کنید. مقدار پیش‌فرض true است (زمانی که core.filemode در فایل پیکربندی مشخص نشده باشد). core.hideDotFiles (فقط ویندوز) اگر true باشد، پوشه‌ها و فایل‌های تازه‌ایجادشده را که نام آن‌ها با نقطه آغاز می‌شود به عنوان پنهان علامت‌گذاری می‌کند. اگر dotGitOnly باشد، تنها پوشه .git/ پنهان می‌شود، اما فایل‌های دیگر که با نقطه شروع می‌شوند پنهان نخواهند شد. حالت پیش‌فرض dotGitOnly است. core.ignoreCase متغیر داخلی که راهکارهای مختلفی را برای کارکرد بهتر Git در سیستم‌های فایلی که به بزرگی و کوچکی حروف حساس نیستند (مانند APFS، HFS+، FAT، NTFS و غیره) فعال می‌کند. برای مثال، اگر فهرست یک پوشه شامل "makefile" باشد در حالی که Git انتظار "Makefile" را دارد، Git فرض می‌کند که واقعاً همان فایل است و همچنان آن را به عنوان "Makefile" به یاد می‌سپارد. پیش‌فرض false است، به جز اینکه git-clone(1) یا git-init(1) هنگام ایجاد مخزن، سیستم را بررسی کرده و در صورت لزوم core.ignoreCase را روی true تنظیم می‌کنند. عملکرد صحیح Git به پیکربندی درست این متغیر متناسب با سیستم عامل و سیستم فایل شما وابسته است. تغییر این مقدار ممکن است رفتارهای غیرمنتظره‌ای ایجاد کند. core.precomposeUnicode این گزینه تنها توسط پیاده‌سازی Mac OS از Git استفاده می‌شود. هنگامی که core.precomposeUnicode=true باشد، Git تجزیه یونیکد (unicode decomposition) نام فایل‌ها را که توسط Mac OS انجام شده به حالت اولیه بازمی‌گرداند. این قابلیت هنگام اشتراک‌گذاری یک مخزن میان Mac OS و لینوکس یا ویندوز مفید است. (Git for Windows نسخه 1.7.10 یا بالاتر مورد نیاز است، یا Git تحت cygwin 1.7). هنگامی که false باشد، نام فایل‌ها توسط Git به صورت کاملاً شفاف پردازش می‌شوند که با نسخه‌های قدیمی‌تر Git سازگار است. core.protectHFS اگر روی true تنظیم شود، اجازه چک‌اوت مسیرهایی را که در سیستم فایل HFS+ معادل .git محسوب می‌شوند نمی‌دهد. به‌طور پیش‌فرض روی Mac OS برابر true و در سایر جاها false است. core.protectNTFS اگر روی true تنظیم شود، اجازه چک‌اوت مسیرهایی را که ممکن است در سیستم فایل NTFS مشکلاتی ایجاد کنند (مانند تداخل با نام‌های "کوتاه" 8.3) نمی‌دهد. به‌طور پیش‌فرض در ویندوز برابر true و در سایر جاها false است. core.fsmonitor اگر روی true تنظیم شود، دیمن پایشگر داخلی سیستم فایل را برای این درخت کاری فعال می‌کند (git-fsmonitor--daemon(1)). همانند پایشگرهای سیستم فایل مبتنی بر هوک، پایشگر داخلی سیستم فایل می‌تواند سرعت دستورات Git را که نیاز به تازه‌سازی ایندکس Git دارند (مانند git status) در یک درخت کاری با فایل‌های پرتعداد افزایش دهد. پایشگر داخلی نیاز به نصب و نگهداری یک ابزار خارجی شخص ثالث را برطرف می‌کند. پایشگر داخلی سیستم فایل در حال حاضر فقط روی پلتفرم‌های پشتیبانی‌شده محدودی در دسترس است. در حال حاضر این پلتفرم‌ها شامل Windows و MacOS هستند. در غیر این صورت، این متغیر شامل مسیر دستور هوک "fsmonitor" است. این دستور هوک برای شناسایی تمام فایل‌هایی که ممکن است از تاریخ/زمان درخواستی تغییر کرده باشند استفاده می‌شود. این اطلاعات برای افزایش سرعت git از طریق اجتناب از اسکن غیرضروری فایل‌هایی که تغییر نکرده‌اند به کار می‌رود. به بخش "fsmonitor-watchman" از githooks(5) مراجعه کنید. توجه داشته باشید که اگر همزمان از چند نسخه Git استفاده می‌کنید (مانند یک نسخه در خط فرمان و نسخه دیگر در یک ابزار IDE)، تعریف core.fsmonitor گسترش یافته تا علاوه بر مسیرهای هوک، مقادیر بولی را نیز بپذیرد. نسخه‌های Git 2.35.1 و قبل از آن، مقادیر بولی را متوجه نمی‌شوند و مقادیر "true" یا "false" را به عنوان مسیر هوکی که باید اجرا شود در نظر می‌گیرند. نسخه‌های Git بین 2.26 تا 2.35.1 به‌طور پیش‌فرض از پروتکل هوک V2 استفاده می‌کنند و به حالت بدون fsmonitor (اسکن کامل) بازمی‌گردند. نسخه‌های Git قبل از 2.26 به‌طور پیش‌فرض از پروتکل هوک V1 استفاده می‌کنند و بدون هشدار فرض می‌کنند هیچ تغییری برای گزارش وجود ندارد (بدون اسکن)، بنابراین دستورات status ممکن است نتایج ناقص گزارش کنند. به همین دلیل، بهتر است پیش از استفاده از پایشگر داخلی سیستم فایل، تمام نسخه‌های Git خود را ارتقا دهید. core.fsmonitorHookVersion نسخه پروتکل مورد استفاده هنگام فراخوانی هوک "fsmonitor" را تعیین می‌کند. در حال حاضر نسخه‌های 1 و 2 وجود دارند. هنگامی که این تنظیم نشده باشد، ابتدا نسخه 2 امتحان می‌شود و اگر با شکست مواجه شد، نسخه 1 امتحان خواهد شد. نسخه 1 از یک برچسب زمانی به عنوان ورودی برای تعیین فایل‌هایی که از آن زمان تغییر کرده‌اند استفاده می‌کند، اما برخی پایشگرها مانند Watchman در صورت استفاده با برچسب زمانی دچار شرایط رقابتی (race conditions) می‌شوند. نسخه 2 از یک رشته مات (opaque string) استفاده می‌کند تا پایشگر بتواند چیزی را بازگرداند که بتوان از آن برای تعیین فایل‌های تغییریافته بدون شرایط رقابتی استفاده کرد. core.trustctime اگر false باشد، تفاوت‌های ctime بین ایندکس و درخت کاری نادیده گرفته می‌شوند؛ زمانی مفید است که زمان تغییر inode مرتباً توسط چیزی خارج از Git (خزنده‌های سیستم فایل و برخی سیستم‌های پشتیبان‌گیری) تغییر داده می‌شود. به git-update-index(1) مراجعه کنید. به‌طور پیش‌فرض true است. core.splitIndex اگر true باشد، از ویژگی split-index در ایندکس استفاده خواهد شد. به git-update-index(1) مراجعه کنید. به‌طور پیش‌فرض false است. core.untrackedCache تعیین می‌کند که با ویژگی حافظه موقت ردیابی‌نشده در ایندکس چه رفتاری شود. اگر این متغیر تنظیم نشده باشد یا روی keep تنظیم گردد، حفظ خواهد شد. اگر روی true تنظیم شود، به‌طور خودکار اضافه خواهد شد. و اگر روی false تنظیم شود، به‌طور خودکار حذف خواهد شد. پیش از تنظیم آن روی true، باید بررسی کنید که mtime در سیستم شما به درستی کار می‌کند. به git-update-index(1) مراجعه کنید. به‌طور پیش‌فرض keep است، مگر اینکه feature.manyFiles فعال باشد که این تنظیم را به‌طور پیش‌فرض روی true قرار می‌دهد. core.checkStat هنگامی که وجود نداشته باشد یا روی default تنظیم شده باشد، بسیاری از فیلدهای ساختار stat بررسی می‌شوند تا مشخص شود آیا فایلی از زمان بررسی توسط Git تغییر کرده است یا خیر. هنگامی که این متغیر پیکربندی روی minimal تنظیم شود، بخش زیرثانیه‌ای mtime و ctime، شناسه‌های uid و gid مالک فایل، شماره inode (و شماره دستگاه، در صورتی که Git طوری کامپایل شده باشد که از آن استفاده کند)، از میان این فیلدها از بررسی مستثنی می‌شوند، و تنها بخش ثانیه کامل mtime (و ctime، در صورتی که core.trustCtime تنظیم شده باشد) و اندازه فایل برای بررسی باقی می‌مانند. پیاده‌سازی‌هایی از Git وجود دارند که مقادیر قابل استفاده‌ای در برخی فیلدها باقی نمی‌گذارند (مانند JGit)؛ با مستثنی کردن این فیلدها از مقایسه، حالت minimal ممکن است به سازگاری متقابل هنگام استفاده همزمان از همان مخزن توسط این سیستم‌های دیگر کمک کند. core.quotePath دستوراتی که مسیرها را در خروجی نمایش می‌دهند (مانند ls-files، diff)، نویسه‌های «غیرعادی» را در نام مسیر با قرار دادن مسیر در گیومه دوتایی (double-quotes) و اسکیپ کردن آن نویسه‌ها با بک‌اسلش به همان روشی که C نویسه‌های کنترلی را اسکیپ می‌کند (مانند \t برای TAB، \n برای LF، \\ برای بک‌اسلش) یا بایت‌هایی با مقادیر بزرگتر از 0x80 (مانند هشت‌هشتی \302\265 برای "micro" در UTF-8) نقل‌قول می‌کنند. اگر این متغیر روی false تنظیم شود، بایت‌های بالاتر از 0x80 دیگر «غیرعادی» در نظر گرفته نمی‌شوند. گیومه‌ها، بک‌اسلش و نویسه‌های کنترلی صرف‌نظر از مقدار این متغیر همیشه اسکیپ می‌شوند. نویسه فاصله ساده «غیرعادی» تلقی نمی‌شود. بسیاری از دستورات می‌توانند با استفاده از گزینه -z نام مسیرها را کاملاً دست‌نخورده در خروجی نمایش دهند. مقدار پیش‌فرض true است. core.eol نوع پایان خط را برای استفاده در درخت کاری جهت فایل‌هایی که به عنوان متن علامت‌گذاری شده‌اند (خواه از طریق تنظیم بودن صفت text، یا داشتن text=auto و تشخیص خودکار محتویات به عنوان متن توسط Git) مشخص می‌کند. گزینه‌ها عبارتند از lf، crlf و native، که از پایان خط بومی پلتفرم استفاده می‌کند. مقدار پیش‌فرض native است. برای اطلاعات بیشتر درباره تبدیل پایان خط به gitattributes(5) مراجعه کنید. توجه داشته باشید که اگر core.autocrlf روی true یا input تنظیم شده باشد، این مقدار نادیده گرفته می‌شود. core.safecrlf اگر true باشد، Git بررسی می‌کند که آیا تبدیل CRLF هنگام فعال بودن تبدیل پایان خط برگشت‌پذیر است یا خیر. Git بررسی خواهد کرد که آیا دستوری، فایلی را در درخت کاری چه به طور مستقیم و چه غیرمستقیم تغییر می‌دهد یا خیر. برای مثال، کامیت کردن یک فایل و سپس چک‌اوت کردن همان فایل باید همان فایل اصلی را در درخت کاری ایجاد کند. اگر برای تنظیم فعلی core.autocrlf چنین نباشد، Git فایل را رد خواهد کرد. متغیر می‌تواند روی "warn" تنظیم شود، که در این حالت Git تنها درباره تبدیل برگشت‌ناپذیر هشدار می‌دهد اما عملیات را ادامه خواهد داد. تبدیل CRLF خطر اندکی برای خراب کردن داده‌ها به همراه دارد. هنگامی که فعال است، Git در حین کامیت CRLF را به LF و در حین چک‌اوت LF را به CRLF تبدیل می‌کند. فایلی که قبل از کامیت حاوی ترکیبی از LF و CRLF باشد، توسط Git قابل بازسازی نیست. برای فایل‌های متنی این کار مناسبی است: پایان خطوط را اصلاح می‌کند تا تنها پایان خطوط LF در مخزن داشته باشیم. اما برای فایل‌های باینری که تصادفاً به عنوان متن طبقه‌بندی شده‌اند، تبدیل می‌تواند داده‌ها را تخریب کند. اگر چنین خرابی را زود تشخیص دهید، می‌توانید به سادگی با تعیین نوع تبدیل به طور صریح در .gitattributes آن را برطرف کنید. درست پس از کامیت کردن، هنوز فایل اصلی را در درخت کاری خود دارید و این فایل هنوز آسیب ندیده است. می‌توانید صریحاً به Git بگویید که این فایل باینری است و Git به درستی با فایل رفتار خواهد کرد. متأسفانه، اثر مطلوب پاکسازی فایل‌های متنی با پایان خطوط مختلط و اثر نامطلوب تخریب فایل‌های باینری از یکدیگر قابل تمایز نیستند. در هر دو حالت CRLFها به روشی برگشت‌ناپذیر حذف می‌شوند. برای فایل‌های متنی این کار صحیحی است زیرا CRLFها پایان خط هستند، در حالی که برای فایل‌های باینری تبدیل CRLF موجب تخریب داده‌ها می‌شود. توجه داشته باشید، این بررسی ایمنی بدان معنا نیست که یک چک‌اوت فایلی همسان با فایل اصلی برای یک تنظیم متفاوت از core.eol و core.autocrlf تولید کند، بلکه تنها برای تنظیم فعلی صادق است. برای مثال، یک فایل متنی با LF تحت core.eol=lf پذیرفته می‌شود و ممکن است بعداً با core.eol=crlf چک‌اوت شود، که در این صورت فایل حاصل شامل CRLF خواهد بود، هرچند فایل اصلی شامل LF بوده است. با این حال، در هر دو درخت کاری پایان خطوط یکدست خواهد بود؛ یعنی یا همگی LF یا همگی CRLF، اما هرگز ترکیبی نخواهد بود. فایلی با پایان خطوط مختلط توسط سازوکار core.safecrlf گزارش خواهد شد. core.autocrlf تنظیم این متغیر روی "true" همانند تنظیم صفت text روی "auto" برای تمام فایل‌ها و تنظیم core.eol روی "crlf" است. اگر می‌خواهید پایان خطوط CRLF را در دایرکتوری کاری خود داشته باشید در حالی که مخزن دارای پایان خطوط LF است، آن را روی true تنظیم کنید. این متغیر می‌تواند روی input تنظیم شود، که در این حالت هیچ تبدیلی در خروجی صورت نمی‌پذیرد. core.checkRoundtripEncoding فهرستی از رمزگذاری‌ها که با کاما یا نویسه فاصله از هم جدا شده‌اند و در صورتی که در صفت working-tree-encoding استفاده شوند (به gitattributes(5) مراجعه کنید)، Git بررسی رفت‌وبرگشت به UTF-8 را روی آن‌ها انجام می‌دهد. مقدار پیش‌فرض SHIFT-JIS است. core.symlinks اگر false باشد، پیوندهای نمادین به صورت فایل‌های متنی ساده و کوچکی که شامل متن پیوند هستند چک‌اوت می‌شوند. دستورات git-update-index(1) و git-add(1) نوع ثبت‌شده را به فایل معمولی تغییر نخواهند داد. در سیستم‌های فایلی مانند FAT که از پیوندهای نمادین پشتیبانی نمی‌کنند مفید است. مقدار پیش‌فرض true است، به جز اینکه git-clone(1) یا git-init(1) هنگام ایجاد مخزن، وضعیت را بررسی کرده و در صورت لزوم core.symlinks را روی false تنظیم می‌کنند. core.gitProxy یک «دستور پروکسی» برای اجرا (به صورت command host port) به جای برقراری ارتباط مستقیم با سرور ریموت هنگام استفاده از پروتکل Git برای واکشی (fetch). اگر مقدار متغیر در قالب "COMMAND for DOMAIN" باشد، دستور تنها روی نام‌های میزبانی اعمال می‌شود که به رشته دامنه مشخص‌شده ختم می‌شوند. این متغیر ممکن است چندین بار تنظیم شود و به ترتیب داده‌شده تطبیق داده می‌شود؛ اولین تطابق برنده است. می‌تواند توسط متغیر محیطی GIT_PROXY_COMMAND (که همیشه به طور سراسری و بدون رفتار خاص "for" اعمال می‌شود) بازنویسی شود. رشته خاص none می‌تواند به عنوان دستور پروکسی برای مشخص کردن اینکه هیچ پروکسی برای یک الگوی دامنه معین استفاده نشود، به کار رود. این قابلیت برای مستثنی کردن سرورهای درون فایروال از استفاده از پروکسی مفید است، در حالی که به طور پیش‌فرض از یک پروکسی مشترک برای دامنه‌های خارجی استفاده می‌شود. core.sshCommand اگر این متغیر تنظیم شود، git fetch و git push هنگامی که نیاز به اتصال به یک سیستم ریموت دارند، از دستور مشخص‌شده به جای ssh استفاده خواهند کرد. این دستور در همان قالب متغیر محیطی GIT_SSH_COMMAND است و هنگام تنظیم بودن آن متغیر محیطی، اولویت با متغیر محیطی خواهد بود. core.ignoreStat اگر true باشد، Git با تنظیم بیت "assume-unchanged" برای آن دسته از فایل‌های ردیابی‌شده‌ای که آن‌ها را به طور یکسان در هر دو بخش ایندکس و درخت کاری به‌روزرسانی کرده است، از فراخوانی‌های lstat() برای تشخیص اینکه آیا فایل‌ها تغییر کرده‌اند خودداری می‌کند. هنگامی که فایل‌ها خارج از Git تغییر می‌یابند، کاربر باید فایل‌های تغییریافته را صریحاً استیج کند (مثلاً به بخش Examples در git-update- index(1) مراجعه کنید). Git معمولاً تغییرات این فایل‌ها را تشخیص نخواهد داد. این امر در سیستم‌هایی که فراخوانی‌های lstat() در آن‌ها بسیار کند است، مانند CIFS/Microsoft Windows مفید است. به‌طور پیش‌فرض false است. core.preferSymlinkRefs به جای قالب پیش‌فرض "symref" برای HEAD و سایر فایل‌های ارجاع نمادین، از پیوندهای نمادین استفاده می‌کند. این قابلیت گاهی برای کار با اسکریپت‌های قدیمی که انتظار دارند HEAD یک پیوند نمادین باشد مورد نیاز است. این پیکربندی منسوخ شده است و در Git 3.0 حذف خواهد شد. ارجاع‌های نمادین همواره به صورت symref متنی نوشته خواهند شد. core.alternateRefsCommand هنگام اعلان نوک‌های تاریخچه در دسترس از یک منبع جایگزین (alternate)، به جای git-for-each-ref(1) از پوسته برای اجرای دستور مشخص‌شده استفاده می‌کند. نخستین آرگومان مسیر مطلق منبع جایگزین است. خروجی باید شامل یک شناسه شیء هگزادسیمال در هر خط باشد (یعنی مشابه آنچه توسط git for-each-ref --format='%(objectname)' تولید می‌شود). توجه داشته باشید که عموماً نمی‌توانید git for-each-ref را مستقیماً در مقدار پیکربندی قرار دهید، زیرا مسیر مخزن را به عنوان آرگومان نمی‌پذیرد (اما می‌توانید دستور بالا را در یک اسکریپت شل کپسوله‌سازی کنید). core.alternateRefsPrefixes هنگام فهرست کردن ارجاع‌ها از یک منبع جایگزین، تنها ارجاع‌هایی را فهرست کن که با پیشوند داده‌شده شروع می‌شوند. پیشوندها همان‌گونه تطبیق داده می‌شوند که گویی به عنوان آرگومان به git-for-each-ref(1) داده شده‌اند. برای فهرست کردن چندین پیشوند، آن‌ها را با فاصله جدا کنید. اگر core.alternateRefsCommand تنظیم شده باشد، تنظیم core.alternateRefsPrefixes هیچ اثری ندارد. core.bare اگر true باشد، این مخزن به صورت bare (مخزن فاقد درخت کاری) فرض می‌شود و هیچ دایرکتوری کاری مرتبط با آن وجود ندارد. در این حالت تعدادی از دستوراتی که به دایرکتوری کاری نیاز دارند غیرفعال خواهند شد، مانند git-add(1) یا git-merge(1). این تنظیم به‌طور خودکار توسط git-clone(1) یا git-init(1) هنگام ایجاد مخزن حدس زده می‌شود. به‌طور پیش‌فرض مخزنی که به "/.git" ختم می‌شود غیر bare فرض می‌شود (bare = false)، در حالی که سایر مخازن به صورت bare فرض می‌شوند (bare = true). core.worktree مسیر ریشه درخت کاری را تنظیم می‌کند. اگر متغیر محیطی GIT_COMMON_DIR تنظیم شده باشد، core.worktree نادیده گرفته شده و برای تعیین ریشه درخت کاری استفاده نخواهد شد. این مقدار می‌تواند توسط متغیر محیطی GIT_WORK_TREE و گزینه خط فرمان --work-tree لغو شود. مقدار می‌تواند یک مسیر مطلق یا نسبی نسبت به مسیر پوشه .git باشد، که یا توسط --git-dir یا GIT_DIR مشخص شده، یا به‌طور خودکار شناسایی شده است. اگر --git-dir یا GIT_DIR مشخص شده باشد اما هیچ‌کدام از گزینه‌های --work-tree، GIT_WORK_TREE و core.worktree مشخص نشده باشند، دایرکتوری کاری فعلی به عنوان بالاترین سطح درخت کاری شما در نظر گرفته می‌شود. توجه داشته باشید که این متغیر حتی زمانی که در یک فایل پیکربندی در یک زیرپوشه ".git" از یک پوشه تنظیم شده باشد و مقدار آن با پوشه اخیر متفاوت باشد (مثلاً "/path/to/.git/config" مقدار core.worktree را روی "/different/path" تنظیم کرده باشد) رعایت می‌شود، که به احتمال زیاد یک پیکربندی نادرست است. اجرای دستورات Git در پوشه "/path/to" همچنان از "/different/path" به عنوان ریشه درخت کاری استفاده خواهد کرد و می‌تواند باعث سردرگمی شود مگر اینکه بدانید چه می‌کنید (مثلاً در حال ایجاد یک تصویر لحظه‌ای فقط‌خواندنی از همان ایندکس در مکانی متفاوت از درخت کاری معمول مخزن هستید). core.lockfilePid اگر true باشد، Git یک فایل PID در کنار فایل‌های قفل ایجاد می‌کند. هنگامی که گرفتن قفل با شکست مواجه شود و یک فایل PID وجود داشته باشد، Git می‌تواند اطلاعات تشخیصی بیشتری درباره فرآیندی که قفل را در اختیار دارد ارائه دهد، از جمله اینکه آیا هنوز در حال اجرا است یا خیر. به‌طور پیش‌فرض false است. فایل PID با درج ~pid قبل از پسوند .lock نام‌گذاری می‌شود. برای مثال، اگر فایل قفل index.lock باشد، فایل PID با نام index~pid.lock خواهد بود. این فایل شامل یک خط به قالب pid به همراه یک سطر تازه است. core.logAllRefUpdates فعال‌سازی reflog. به‌روزرسانی‌های یک ارجاع با الحاق کردن SHA-1 جدید و قدیم، تاریخ/زمان و دلیل به‌روزرسانی در فایل "$GIT_DIR/logs/" ثبت می‌شوند، اما تنها در صورتی که فایل وجود داشته باشد. اگر این متغیر پیکربندی روی true تنظیم شده باشد، فایل مفقود "$GIT_DIR/logs/" به‌طور خودکار برای نوک شاخه‌ها (یعنی زیر refs/heads/)، ارجاع‌های ریموت (یعنی زیر refs/remotes/)، ارجاع‌های یادداشت (یعنی زیر refs/notes/) و ارجاع نمادین HEAD ایجاد می‌شود. اگر روی always تنظیم شود، یک reflog مفقود به‌طور خودکار برای هر ارجاعی زیر refs/ ایجاد خواهد شد. این اطلاعات می‌تواند برای تعیین اینکه چه کامیتی نوک یک شاخه در "2 روز پیش" بوده است استفاده شود. این مقدار به‌طور پیش‌فرض در مخزنی که دارای درخت کاری مرتبط باشد true، و به‌طور پیش‌فرض در یک مخزن bare برابر false است. core.repositoryFormatVersion متغیر داخلی برای شناسایی قالب مخزن و نسخه چیدمان. به gitrepository- layout(5) مراجعه کنید. core.sharedRepository هنگامی که روی group (یا true) تنظیم شود، مخزن میان چندین کاربر در یک گروه قابل اشتراک‌گذاری می‌شود (با اطمینان از اینکه تمامی فایل‌ها و اشیاء توسط گروه قابل نوشتن باشند). هنگامی که روی all (یا world یا everybody) تنظیم شود، مخزن علاوه بر اشتراک‌گذاری گروهی، برای همه کاربران قابل خواندن خواهد بود. هنگامی که روی umask (یا false) تنظیم شود، Git از دسترسی‌های گزارش‌شده توسط umask(2) استفاده خواهد کرد. هنگامی که روی 0xxx تنظیم شود، که در آن 0xxx یک عدد هشت‌هشتی (octal) است، فایل‌های درون مخزن دارای این مقدار حالت (mode) دسترسی خواهند بود. 0xxx مقدار umask کاربر را بازنویسی خواهد کرد (در حالی که گزینه‌های دیگر تنها بخش‌های مورد درخواست از مقدار umask کاربر را بازنویسی می‌کنند). مثال‌ها: 0660 مخزن را برای مالک و گروه قابل خواندن/نوشتن می‌کند، اما برای دیگران غیرقابل دسترس می‌سازد (معادل group مگر اینکه umask برای نمونه 0022 باشد). 0640 مخزنی است که برای گروه قابل خواندن است اما برای گروه قابل نوشتن نیست. به git- init(1) مراجعه کنید. به طور پیش‌فرض False است. core.warnAmbiguousRefs اگر روی true تنظیم شود، چنانچه نام ref ارسالی شما مبهم باشد و ممکن باشد با چندین ref در مخزن مطابقت داشته باشد، Git به شما هشدار خواهد داد. به طور پیش‌فرض True است. core.compression یک عدد صحیح بین -1 تا 9 که سطح فشرده‌سازی پیش‌فرض را مشخص می‌کند. مقدار -1 پیش‌فرض zlib است. مقدار 0 به معنای عدم فشرده‌سازی است، و 1 تا 9 موازنه‌های مختلف میان سرعت/اندازه هستند که 9 کندترین آن‌هاست. در صورت تنظیم، این متغیر مقداری پیش‌فرض را برای سایر متغیرهای فشرده‌سازی فراهم می‌کند، مانند core.looseCompression و pack.compression. core.looseCompression یک عدد صحیح بین -1 تا 9 که سطح فشرده‌سازی را برای اشیائی که در یک pack file قرار ندارند مشخص می‌کند. مقدار -1 پیش‌فرض zlib است. مقدار 0 به معنای عدم فشرده‌سازی است، و 1 تا 9 موازنه‌های مختلف میان سرعت/اندازه هستند که 9 کندترین آن‌هاست. اگر تنظیم نشود، به طور پیش‌فرض مقدار core.compression در نظر گرفته می‌شود. اگر آن هم تنظیم نشده باشد، به طور پیش‌فرض 1 (بهترین سرعت) خواهد بود. core.packedGitWindowSize تعداد بایت‌های یک pack file برای نگاشت (map) در حافظه در یک عملیات نگاشت منفرد. اندازه‌های بزرگ‌تر پنجره ممکن است به سیستم شما اجازه دهند تعداد کمتری از pack fileهای بزرگ را سریع‌تر پردازش کند. اندازه‌های کوچک‌تر پنجره به دلیل افزایش فراخوانی‌ها به مدیر حافظه سیستم‌عامل، بر کارایی تأثیر منفی خواهند گذاشت، اما ممکن است هنگام دسترسی به تعداد زیادی از pack fileهای بزرگ کارایی را بهبود بخشند. اگر NO_MMAP در زمان کامپایل تنظیم شده باشد مقدار پیش‌فرض 1 MiB است، در غیر این صورت روی پلتفرم‌های 32 بیتی 32 MiB و روی پلتفرم‌های 64 بیتی 1 GiB است. این مقدار باید برای همه کاربران/سیستم‌های عامل منطقی باشد. احتمالاً نیازی به تغییر این مقدار ندارید. پسوندهای واحد متداول شامل k، m، یا g پشتیبانی می‌شوند. core.packedGitLimit حداکثر تعداد بایت‌ها برای نگاشت همزمان از pack fileها به حافظه. اگر Git برای تکمیل یک عملیات نیاز به دسترسی همزمان به بیش از این مقدار بایت داشته باشد، نواحی موجود را از حالت نگاشت خارج می‌کند (unmap) تا فضای آدرس مجازی را درون فرآیند بازپس گیرد. پیش‌فرض روی پلتفرم‌های 32 بیتی 256 MiB و روی پلتفرم‌های 64 بیتی 32 TiB (در عمل نامحدود) است. این مقدار باید برای همه کاربران/سیستم‌های عامل به جز در بزرگ‌ترین پروژه‌ها معقول باشد. احتمالاً نیازی به تغییر این مقدار ندارید. پسوندهای واحد متداول شامل k، m، یا g پشتیبانی می‌شوند. core.deltaBaseCacheLimit حداکثر تعداد بایت به ازای هر ریسه (thread) برای رزرو جهت کش کردن اشیاء پایه که ممکن است توسط چندین شیء دلتایی (deltified) مورد ارجاع قرار گیرند. با ذخیره کامل اشیاء پایه از حالت فشرده خارج‌شده در یک کش، Git قادر است از باز کردن و از حالت فشرده خارج کردن چندباره اشیاء پایه پرکاربرد جلوگیری کند. پیش‌فرض روی تمامی پلتفرم‌ها 96 MiB است. این مقدار باید برای همه کاربران/سیستم‌های عامل به جز در بزرگ‌ترین پروژه‌ها معقول باشد. احتمالاً نیازی به تغییر این مقدار ندارید. پسوندهای واحد متداول شامل k، m، یا g پشتیبانی می‌شوند. core.bigFileThreshold اندازه فایل‌هایی که "بزرگ" در نظر گرفته می‌شوند، که همان‌طور که در ادامه توضیح داده شده رفتار دستورات متعدد گیت و همچنین نحوه ذخیره‌سازی چنین فایل‌هایی را در مخزن تغییر می‌دهد. مقدار پیش‌فرض 512 MiB است. پسوندهای واحد متداول شامل k، m، یا g پشتیبانی می‌شوند. فایل‌های بالاتر از حد پیکربندی‌شده: • به صورت فشرده‌شده (deflated) در packfileها بدون تلاش برای فشرده‌سازی دلتا ذخیره می‌شوند. حد پیش‌فرض اساساً با در نظر گرفتن این کاربرد تنظیم شده است. با این تنظیم، در اکثر پروژه‌ها کد منبع و سایر فایل‌های متنی تحت فشرده‌سازی دلتا قرار می‌گیرند، اما فایل‌های چندرسانه‌ای باینری بزرگ‌تر شامل آن نمی‌شوند. ذخیره‌سازی فایل‌های بزرگ بدون فشرده‌سازی دلتا از مصرف بیش از حد حافظه جلوگیری می‌کند، هرچند با هزینه اندک افزایش مصرف دیسک همراه است. • طوری رفتار خواهد شد که گویی برچسب "binary" دارند (به gitattributes(5) مراجعه کنید). برای نمونه git-log(1) و git- diff(1) برای فایل‌های بالاتر از این حد، دیف محاسبه نخواهند کرد. • عموماً هنگام نوشتن به صورت جریانی (streamed) منتقل می‌شوند، که از مصرف بیش از حد حافظه با هزینه مقداری سربار ثابت جلوگیری می‌کند. دستوراتی که از این قابلیت استفاده می‌کنند شامل git-archive(1)، git-fast-import(1)، git-index-pack(1)، git-unpack-objects(1) و git-fsck(1) هستند. core.excludesFile مسیر فایلی را مشخص می‌کند که علاوه بر .gitignore (به ازای هر دایرکتوری) و .git/info/exclude، حاوی الگوهایی برای توصیف مسیرهایی است که نباید ردگیری شوند. مقدار پیش‌فرض آن $XDG_CONFIG_HOME/git/ignore است. اگر $XDG_CONFIG_HOME تنظیم نشده یا خالی باشد، $HOME/.config/git/ignore به جای آن استفاده می‌شود. به gitignore(5) مراجعه کنید. core.askPass به برخی از دستورات (مانند رابط‌های svn و http) که به صورت تعاملی گذرواژه درخواست می‌کنند می‌توان اعلام کرد از یک برنامه خارجی که از طریق مقدار این متغیر مشخص شده است استفاده کنند. این مقدار می‌تواند توسط متغیر محیطی GIT_ASKPASS بازنویسی شود. در صورت عدم تنظیم، به مقدار متغیر محیطی SSH_ASKPASS یا در صورت نبود آن، به یک اعلان ساده گذرواژه برمی‌گردد. به برنامه خارجی باید یک اعلان مناسب به عنوان آرگومان خط فرمان داده شود و گذرواژه را در STDOUT خود بنویسد. core.attributesFile مسیر فایلی را مشخص می‌کند که علاوه بر .gitattributes (به ازای هر دایرکتوری) و .git/info/attributes، حاوی مشخصه‌ها (attributes) است (به gitattributes(5) مراجعه کنید). مقدار پیش‌فرض آن $XDG_CONFIG_HOME/git/attributes است. اگر $XDG_CONFIG_HOME تنظیم نشده یا خالی باشد، $HOME/.config/git/attributes به جای آن استفاده می‌شود. core.hooksPath به طور پیش‌فرض، Git قلاب‌های شما را در دایرکتوری $GIT_DIR/hooks جستجو می‌کند. این متغیر را روی مسیر متفاوتی تنظیم کنید، برای نمونه /etc/git/hooks، و Git تلاش خواهد کرد قلاب‌های شما را در آن دایرکتوری پیدا کند، برای نمونه /etc/git/hooks/pre-receive به جای $GIT_DIR/hooks/pre-receive. مسیر می‌تواند مطلق یا نسبی باشد. یک مسیر نسبی، نسبت به دایرکتوری که قلاب‌ها در آن اجرا می‌شوند در نظر گرفته می‌شود (به بخش "DESCRIPTION" در githooks(5) مراجعه کنید). این متغیر پیکربندی در مواردی مفید است که مایلید قلاب‌های گیت خود را به جای پیکربندی به ازای هر مخزن، به صورت متمرکز پیکربندی کنید، یا به عنوان جایگزینی منعطف‌تر و متمرکزتر برای داشتن یک init.templateDir که در آن قلاب‌های پیش‌فرض را تغییر داده‌اید. همچنین می‌توانید تمام قلاب‌ها را با تنظیم core.hooksPath روی /dev/null به طور کامل غیرفعال کنید. این کار معمولاً تنها برای کاربران حرفه‌ای و به صورت به ازای هر دستور با استفاده از پارامترهای پیکربندی به فرم git -c core.hooksPath=/dev/null .... توصیه می‌شود. core.editor دستوراتی مانند commit و tag که به شما امکان می‌دهند با اجرای یک ویرایشگر پیام‌ها را ویرایش کنید، در صورتی که این متغیر تنظیم شده باشد و متغیر محیطی GIT_EDITOR تنظیم نشده باشد، از مقدار این متغیر استفاده می‌کنند. به git-var(1) مراجعه کنید. core.commentChar, core.commentString دستوراتی مانند commit و tag که به شما امکان ویرایش پیام‌ها را می‌دهند، خطی را که با این نویسه آغاز شود به عنوان کامنت در نظر گرفته و پس از بسته شدن ویرایشگر آن‌ها را حذف می‌کنند (پیش‌فرض #). اگر روی "auto" تنظیم شود، git-commit نویسه‌ای را انتخاب خواهد کرد که نویسه ابتدایی هیچ‌یک از خطوط در پیام‌های کامیت موجود نباشد. پشتیبانی از این مقدار منسوخ شده است و در Git 3.0 به دلیل محدودیت‌های زیر حذف خواهد شد: • با افزودن کامنت‌ها در یک الگوی پیام کامیت ناسازگار است. این شامل کامنت‌های تعارض که توسط cherry-pick، merge، rebase و revert به پیام کامیت اضافه می‌شوند نیز می‌شود. • با افزودن کامنت‌ها به پیام کامیت در قلاب prepare-commit-msg ناسازگار است. • هنگام rebase کردن با دستورات fixup و squash ناسازگار است، • توسط git notes رعایت نمی‌شود توجه داشته باشید که این دو متغیر نام‌های مستعار (alias) یکدیگر هستند، و در نسخه‌های مدرن Git آزادید که از یک رشته (برای نمونه // یا ⁑⁕⁑) با commentChar استفاده کنید. نسخه‌های قبل از v2.45.0 گیت متغیر commentString را نادیده می‌گیرند اما مقداری از commentChar را که شامل بیش از یک بایت اسکی باشد رد می‌کنند. اگر قصد دارید از پیکربندی خود هم با نسخه‌های قدیمی‌تر و هم جدیدتر Git استفاده کنید، ممکن است مایل باشید هر دو را مشخص کنید: [core] # single character for older versions commentChar = "#" # string for newer versions (which will override commentChar # because it comes later in the file) commentString = "//" core.filesRefLockTimeout مدت زمان به میلی‌ثانیه برای تلاش مجدد هنگام تلاش برای قفل کردن یک ارجاع (ref) منفرد. مقدار 0 به معنای اصلاً تلاش مجدد نکردن است؛ -1 به معنای تلاش نامحدود است. پیش‌فرض 100 است (یعنی تلاش مجدد برای 100 میلی‌ثانیه). core.packedRefsTimeout مدت زمان به میلی‌ثانیه برای تلاش مجدد هنگام تلاش برای قفل کردن فایل packed-refs. مقدار 0 به معنای اصلاً تلاش مجدد نکردن است؛ -1 به معنای تلاش نامحدود است. پیش‌فرض 1000 است (یعنی تلاش مجدد برای 1 ثانیه). core.pager نمایش‌دهنده متن (pager) برای استفاده توسط دستورات گیت (برای نمونه less). این مقدار برای تفسیر شدن توسط شل در نظر گرفته شده است. ترتیب اولویت عبارت است از متغیر محیطی $GIT_PAGER، سپس پیکربندی core.pager، سپس $PAGER، و سپس پیش‌فرض انتخاب‌شده در زمان کامپایل (معمولاً less). زمانی که متغیر محیطی LESS تنظیم نشده باشد، Git آن را روی FRX تنظیم می‌کند (اگر متغیر محیطی LESS تنظیم شده باشد، Git اصلاً آن را تغییر نمی‌دهد). اگر می‌خواهید تنظیم پیش‌فرض Git برای LESS را به صورت انتخابی لغو کنید، می‌توانید core.pager را برای نمونه روی less -S تنظیم کنید. این مقدار توسط Git به شل منتقل می‌شود، که دستور نهایی را به LESS=FRX less -S ترجمه خواهد کرد. محیط گزینه S را تنظیم نکرده اما خط فرمان این کار را انجام می‌دهد، که به less دستور می‌دهد خطوط طولانی را کوتاه (truncate) کند. به طور مشابه، تنظیم core.pager روی less -+F گزینه F مشخص‌شده توسط محیط را از طریق خط فرمان غیرفعال می‌کند، که رفتار "خروج در صورت جا شدن در یک صفحه" در less را غیرفعال می‌سازد. می‌توان برخی گزینه‌ها را به طور اختصاصی برای دستورات خاصی فعال کرد: برای مثال، تنظیم pager.blame روی less -S کوتاه‌سازی خطوط را تنها برای git blame فعال می‌سازد. به همین شکل، زمانی که متغیر محیطی LV تنظیم نشده باشد، Git آن را روی -c تنظیم می‌کند. می‌توانید این تنظیم را با export کردن LV با مقداری دیگر یا با تنظیم core.pager روی lv +c لغو کنید. core.whitespace فهرستی جداشده با کاما از مشکلات رایج فاصله خالی (whitespace) برای بررسی و جلب توجه. git diff از color.diff.whitespace برای برجسته‌سازی آن‌ها استفاده می‌کند، و git apply --whitespace=error آن‌ها را به عنوان خطا در نظر می‌گیرد. می‌توانید پیشوند - را برای غیرفعال کردن هر یک از آن‌ها به کار ببرید (برای نمونه -trailing-space): • blank-at-eol فاصله‌های خالی انتهایی در انتهای خط را به عنوان خطا در نظر می‌گیرد (به طور پیش‌فرض فعال است). • space-before-tab نویسه فاصله‌ای را که بلافاصله پیش از یک نویسه تب در بخش تورفتگی اولیه خط ظاهر شود به عنوان خطا در نظر می‌گیرد (به طور پیش‌فرض فعال است). • indent-with-non-tab خطی را که به جای تب‌های معادل با نویسه‌های فاصله تورفته شده باشد به عنوان خطا در نظر می‌گیرد (به طور پیش‌فرض فعال نیست). • tab-in-indent نویسه تب در بخش تورفتگی اولیه خط را به عنوان خطا در نظر می‌گیرد (به طور پیش‌فرض فعال نیست). • blank-at-eof خطوط خالی اضافه‌شده در انتهای فایل را به عنوان خطا در نظر می‌گیرد (به طور پیش‌فرض فعال است). • trailing-space شورت‌کدی برای پوشش دادن هر دو مورد blank-at-eol و blank-at-eof است. • cr-at-eol بازگشت به ابتدای خط (carriage-return) در انتهای خط را به عنوان بخشی از پایان‌دهنده خط تلقی می‌کند، یعنی با فعال بودن آن، اگر نویسه پیش از چنین carriage-return یک فاصله خالی نباشد، trailing-space فعال نمی‌شود (به طور پیش‌فرض فعال نیست). • incomplete-line آخرین خط فایلی را که فاقد خط جدید (newline) در انتها است به عنوان خطا در نظر می‌گیرد (به طور پیش‌فرض فعال نیست). • tabwidth= مشخص می‌کند که یک تب چند موقعیت نویسه را اشغال می‌کند؛ این گزینه برای indent-with-non-tab و زمانی که Git خطاهای tab-in-indent را اصلاح می‌کند کاربرد دارد. عرض پیش‌فرض تب 8 است. مقادیر مجاز از 1 تا 63 می‌باشند. core.fsync فهرستی جداشده با کاما از مؤلفه‌های مخزن که باید در زمان ایجاد یا تغییر، از طریق core.fsyncMethod پایدارسازی (hardened) شوند. می‌توانید پایدارسازی هر مؤلفه را با قرار دادن پیشوند - در ابتدای آن غیرفعال کنید. مواردی که پایدارسازی نشده‌اند ممکن است در صورت خاموش شدن غیرعادی سیستم از دست بروند. مگر در مواردی که نیازمندی‌های خاصی داشته باشید، توصیه می‌شود این گزینه را خالی بگذارید یا یکی از موارد committed، added، یا all را انتخاب کنید. هنگام مواجهه با این پیکربندی، مجموعه مؤلفه‌ها با مقدار پیش‌فرض پلتفرم آغاز می‌شود، مؤلفه‌های غیرفعال حذف می‌شوند، و مؤلفه‌های اضافی افزوده می‌گردند. none وضعیت را بازنشانی می‌کند تا پیش‌فرض پلتفرم نادیده گرفته شود. رشته خالی پیکربندی fsync را به پیش‌فرض پلتفرم بازنشانی می‌کند. پیش‌فرض در اکثر پلتفرم‌ها معادل core.fsync=committed,-loose-object است، که کارایی خوبی دارد، اما در صورت خاموش شدن غیرعادی سیستم، خطر از دست رفتن کارهای اخیر را به همراه دارد. • none مجموعه مؤلفه‌های تحت fsync را پاک می‌کند. • loose-object اشیائی را که در قالب loose-object به مخزن اضافه شده‌اند پایدارسازی می‌کند. • pack اشیائی را که در قالب packfile به مخزن اضافه شده‌اند پایدارسازی می‌کند. • pack-metadata بیت‌مپ‌ها و ایندکس‌های packfile را پایدارسازی می‌کند. • commit-graph فایل commit-graph را پایدارسازی می‌کند. • index ایندکس را هنگام تغییر پایدارسازی می‌کند. • objects گزینه‌ای تجمیعی است که معادل loose-object,pack می‌باشد. • reference ارجاع‌های تغییریافته در مخزن را پایدارسازی می‌کند. • derived-metadata گزینه‌ای تجمیعی است که معادل pack-metadata,commit-graph می‌باشد. • committed گزینه‌ای تجمیعی است که در حال حاضر معادل objects است. این حالت مقداری از کارایی را فدا می‌کند تا اطمینان حاصل شود کاری که با git commit یا دستورات مشابه در مخزن کامیت شده است، پایدارسازی می‌شود. • added گزینه‌ای تجمیعی است که در حال حاضر معادل committed,index است. این حالت کارایی بیشتری را فدا می‌کند تا اطمینان حاصل شود نتایج دستوراتی مانند git add و عملیات مشابه پایدارسازی می‌شوند. • all گزینه‌ای تجمیعی است که تمامی مؤلفه‌های منفرد فوق را همگام‌سازی (sync) می‌کند. core.fsyncMethod مقداری که راهبرد Git را برای پایدارسازی داده‌های مخزن با استفاده از fsync و دستورات اولیه مرتبط مشخص می‌کند. • fsync از فراخوانی سیستمی fsync() یا معادل‌های آن در پلتفرم استفاده می‌کند. • writeout-only درخواست‌های بازنویسی حافظه پنهان صفحه (pagecache writeback) را صادر می‌کند، اما بسته به سیستم فایل و سخت‌افزار ذخیره‌سازی، داده‌های اضافه‌شده به مخزن ممکن است در صورت وقوع خرابی سیستم (crash) پایدار نمانند. این حالت پیش‌فرض در macOS است. • batch حالتی را فعال می‌کند که از تخلیه‌های فقط بازنویسی (writeout-only flushes) برای مرحله‌بندی چندین به‌روزرسانی در کش بازنویسی دیسک استفاده می‌کند و سپس یک fsync کامل روی یک فایل ساختگی انجام می‌دهد تا تخلیه کش دیسک را در پایان عملیات فعال سازد. در حال حاضر حالت batch تنها برای فایل‌های loose-object اعمال می‌شود. سایر داده‌های مخزن به گونه‌ای پایدارسازی می‌شوند که گویی fsync مشخص شده است. انتظار می‌رود این حالت روی macOS برای مخازن ذخیره‌شده در سیستم‌های فایل HFS+ یا APFS و روی Windows برای مخازن ذخیره‌شده در سیستم‌های فایل NTFS یا ReFS به اندازه fsync امن باشد. core.fsyncObjectFiles این متغیر بولی fsync() را هنگام نوشتن فایل‌های شیء فعال می‌کند. این تنظیم منسوخ شده است. به جای آن از core.fsync استفاده کنید. این تنظیم بر داده‌هایی اثر می‌گذارد که در قالب loose-object به مخزن گیت اضافه می‌شوند. در صورت تنظیم روی true، Git یک فراخوانی سیستمی fsync یا مشابه آن را برای تخلیه کش‌ها صادر می‌کند تا اشیاء مجزا (loose-objects) در مواجهه با خاموش شدن غیرعادی سیستم سازگار باقی بمانند. core.preloadIndex پیش‌بارگذاری موازی ایندکس را برای عملیاتی مانند git diff فعال می‌کند این قابلیت می‌تواند به عملیاتی مانند git diff و git status به‌ویژه روی سیستم‌های فایلی مانند NFS که معناشناسی ضعیفی در کش کردن دارند و بنابراین تأخیر ورودی/خروجی (IO) نسبتاً بالایی دارند، سرعت ببخشد. در صورت فعال بودن، Git مقایسه ایندکس با داده‌های سیستم فایل را به صورت موازی انجام می‌دهد که امکان همپوشانی عملیات IO را فراهم می‌سازد. به طور پیش‌فرض true است. core.unsetenvvars فقط ویندوز: فهرستی جداشده با کاما از نام‌های متغیرهای محیطی که باید پیش از ایجاد هر فرآیند دیگری لغو (unset) شوند. به طور پیش‌فرض روی PERL5LIB تنظیم شده است تا این واقعیت را در نظر بگیرد که Git for Windows بر استفاده از مفسر پرل اختصاصی خود اصرار دارد. core.createObject می‌توانید این متغیر را روی link تنظیم کنید، که در این صورت از یک پیوند سخت (hardlink) و به دنبال آن حذف مبدا استفاده می‌شود تا اطمینان حاصل شود که ایجاد شیء، اشیاء موجود را بازنویسی نخواهد کرد. در برخی ترکیب‌های سیستم فایل/سیستم‌عامل، این سازوکار غیرقابل اطمینان است. در آنجا این تنظیم پیکربندی را روی rename تنظیم کنید؛ با این حال، این کار بررسی اطمینان از بازنویسی نشدن فایل‌های شیء موجود را حذف خواهد کرد. core.notesRef هنگام نمایش پیام‌های کامیت، یادداشت‌هایی (notes) را که در ref داده‌شده ذخیره شده‌اند نیز نشان می‌دهد. این ref باید به طور کامل مشخص باشد (fully qualified). اگر ref داده‌شده وجود نداشته باشد، خطا به شمار نمی‌آید بلکه به این معناست که هیچ یادداشتی نباید چاپ شود. این تنظیم به طور پیش‌فرض "refs/notes/commits" است، و می‌تواند توسط متغیر محیطی GIT_NOTES_REF بازنویسی شود. به git-notes(1) مراجعه کنید. core.commitGraph اگر روی true تنظیم شود، آنگاه git فایل commit-graph را (در صورت وجود) می‌خواند تا ساختار گراف کامیت‌ها را تجزیه کند. به طور پیش‌فرض true است. برای اطلاعات بیشتر به git-commit-graph(1) مراجعه کنید. core.useReplaceRefs اگر روی false تنظیم شود، طوری رفتار می‌کند که گویی گزینه --no-replace-objects در خط فرمان داده شده است. برای اطلاعات بیشتر به git(1) و git-replace(1) مراجعه کنید. core.multiPackIndex از فایل multi-pack-index برای ردگیری چندین packfile با استفاده از یک ایندکس واحد استفاده می‌کند. برای اطلاعات بیشتر به git-multi-pack- index(1) مراجعه کنید. به طور پیش‌فرض true است. core.sparseCheckout قابلیت "sparse checkout" (دریافت گزینشی/تنک) را فعال می‌کند. برای اطلاعات بیشتر به git-sparse-checkout(1) مراجعه کنید. core.sparseCheckoutCone "حالت مخروطی" (cone mode) قابلیت sparse checkout را فعال می‌کند. هنگامی که فایل sparse-checkout شامل مجموعه‌ای محدود از الگوها باشد، این حالت مزایای عملکردی قابل‌توجهی ارائه می‌دهد. می‌توان با تنظیم این متغیر روی false "حالت غیرمخروطی" را درخواست کرد تا امکان مشخص کردن الگوهای انعطاف‌پذیرتر فراهم شود. برای اطلاعات بیشتر به git-sparse- checkout(1) مراجعه کنید. core.abbrev طولی را که نام اشیاء به آن کوتاه می‌شوند تعیین می‌کند. اگر مشخص نشود یا روی "auto" تنظیم شود، مقداری مناسب بر اساس تعداد تقریبی اشیاء بسته‌بندی‌شده در مخزن شما محاسبه می‌شود، که امیدواریم کافی باشد تا نام‌های کوتاه اشیاء برای مدتی یکتا باقی بمانند. اگر روی "no" تنظیم شود، هیچ اختصاری صورت نمی‌گیرد و نام اشیاء با طول کامل نمایش داده می‌شوند. حداقل طول 4 است. core.maxTreeDepth حداکثر عمقی که Git مایل است هنگام پیمایش یک درخت وارد بازگشت (recurse) شود (برای نمونه، "a/b/cde/f" دارای عمق 4 است). این یک تدبیر ایمنی است تا به Git اجازه دهد به طور پاک متوقف شود، و عموماً نیازی به تغییر آن نیست. هنگامی که Git با MSVC کامپایل شده باشد، مقدار پیش‌فرض 512 است. در غیر این صورت، مقدار پیش‌فرض 2048 است. credential.helper یک دستیار کمکی خارجی را برای فراخوانی در زمان نیاز به اطلاعات هویتی (اعتبارنامه) نام کاربری یا گذرواژه مشخص می‌کند؛ دستیار کمکی ممکن است با فضای ذخیره‌سازی خارجی مشورت کند تا از درخواست اطلاعات هویتی از کاربر جلوگیری شود. این معمولاً نام یک دستیار کمکی اعتبارنامه همراه با آرگومان‌های احتمالی است، اما همچنین می‌تواند یک مسیر مطلق همراه با آرگومان‌ها، یا در صورت شروع با !، دستورات شل باشد. توجه داشته باشید که می‌توان چندین دستیار کمکی تعریف کرد. برای جزئیات و مثال‌ها به gitcredentials(7) مراجعه کنید. credential.interactive به طور پیش‌فرض، Git و هر دستیار کمکی اعتبارنامه پیکربندی‌شده، در زمان نیاز به اطلاعات هویتی جدید، از کاربر درخواست ورودی می‌کنند. بسیاری از این دستیاران در صورتی که اطلاعات هویتی ذخیره‌شده هنوز معتبر باشند، بر اساس آن‌ها کار را با موفقیت انجام می‌دهند. برای جلوگیری از امکان تعامل با کاربر از سوی Git، مقدار credential.interactive=false را تنظیم کنید. برخی دستیاران کمکی اعتبارنامه نیز این گزینه را رعایت می‌کنند. credential.useHttpPath هنگام دریافت اطلاعات هویتی، مؤلفه "path" نشانی اینترنتی http یا https را مهم تلقی می‌کند. به طور پیش‌فرض false است. برای اطلاعات بیشتر به gitcredentials(7) مراجعه کنید. credential.sanitizePrompt به طور پیش‌فرض، نام‌های کاربری و میزبان‌هایی که به عنوان بخشی از اعلان گذرواژه نمایش داده می‌شوند مجاز به داشتن نویسه‌های کنترلی نیستند (آن‌ها به طور پیش‌فرض با کدگذاری URL نمایش می‌یابند). این تنظیم را روی false پیکربندی کنید تا این رفتار لغو شود. credential.protectProtocol به طور پیش‌فرض، نویسه‌های Carriage Return در پروتکلی که هنگام ارتباط Git با یک دستیار کمکی اعتبارنامه استفاده می‌شود مجاز نیستند. این تنظیم به کاربران امکان می‌دهد این مقدار پیش‌فرض را لغو کنند. credential.username اگر هیچ نام کاربری برای احراز هویت شبکه تنظیم نشده باشد، به طور پیش‌فرض از این نام کاربری استفاده می‌کند. به credential..* در ادامه، و gitcredentials(7) مراجعه کنید. credential..* هر یک از گزینه‌های credential.* بالا می‌تواند به صورت انتخابی برای برخی اطلاعات هویتی اعمال شود. برای نمونه، "credential.https://example.com.username" نام کاربری پیش‌فرض را تنها برای اتصالات https به example.com تنظیم می‌کند. برای جزئیات درباره نحوه تطبیق URLها، به gitcredentials(7) مراجعه کنید. credentialCache.ignoreSIGHUP به git-credential-cache—daemon اعلام می‌کند که سیگنال SIGHUP را به جای خروج نادیده بگیرد. credentialStore.lockTimeoutMS مدت زمان به میلی‌ثانیه برای تلاش مجدد git-credential-store هنگام تلاش برای قفل کردن فایل اطلاعات هویتی. مقدار 0 به معنای اصلاً تلاش مجدد نکردن است؛ -1 به معنای تلاش نامحدود است. پیش‌فرض 1000 است (یعنی تلاش مجدد برای 1 ثانیه). diff.autoRefreshIndex هنگام استفاده از git diff برای مقایسه با فایل‌های درخت کاری، تغییرات صرفاً مربوط به stat را به عنوان تغییریافته تلقی نمی‌کند. در عوض، به صورت خاموش git update-index --refresh را اجرا می‌کند تا اطلاعات کش‌شده stat را برای مسیرهایی که محتوای آن‌ها در درخت کاری با محتوای ایندکس مطابقت دارد به‌روزرسانی کند. این گزینه به طور پیش‌فرض true است. توجه داشته باشید که این موضوع تنها بر دستورات سطح بالای (Porcelain) git diff اثر می‌گذارد، و نه بر دستورات سطح پایین‌تر diff مانند git diff-files. diff.dirstat فهرستی جداشده با کاما از پارامترهای --dirstat که رفتار پیش‌فرض گزینه --dirstat را برای git-diff(1) و دستورات مرتبط مشخص می‌کند. مقادیر پیش‌فرض را می‌توان در خط فرمان بازنویسی کرد (با استفاده از --dirstat=,...). پیش‌فرض‌های جایگزین (هنگامی که توسط diff.dirstat تغییر داده نشده باشند) عبارتند از changes,noncumulative,3. پارامترهای زیر در دسترس هستند: changes اعداد dirstat را با شمارش خطوطی که از مبدا حذف شده یا به مقصد افزوده شده‌اند محاسبه می‌کند. این پارامتر میزان جابه‌جایی خالص کد در یک فایل را نادیده می‌گیرد. به عبارت دیگر، چینش مجدد خطوط در یک فایل به اندازه سایر تغییرات شمرده نمی‌شود. این رفتار پیش‌فرض در صورت عدم ارائه پارامتر است. lines اعداد dirstat را با انجام تحلیل معمول دیف مبتنی بر خط، و جمع کردن تعداد خطوط حذف‌شده/افزوده‌شده محاسبه می‌کند. (برای فایل‌های باینری، به جای آن تکه‌های 64 بایتی شمرده می‌شوند، زیرا فایل‌های باینری مفهوم طبیعی از خط ندارند). این رفتار --dirstat گران‌تر از رفتار changes است، اما خطوط جابه‌جاشده در یک فایل را به اندازه سایر تغییرات به شمار می‌آورد. خروجی حاصل با آنچه از سایر گزینه‌های --*stat به دست می‌آورید سازگار است. files اعداد dirstat را با شمارش تعداد فایل‌های تغییریافته محاسبه می‌کند. هر فایل تغییریافته در تحلیل dirstat به یک اندازه به حساب می‌آید. این رفتار از نظر محاسباتی کم‌هزینه‌ترین رفتار --dirstat است، چرا که اصلاً نیازی به بررسی محتویات فایل ندارد. cumulative تغییرات در یک دایرکتوری فرزند را برای دایرکتوری والد نیز محاسبه می‌کند. توجه داشته باشید که هنگام استفاده از cumulative، مجموع درصدهای گزارش‌شده ممکن است از 100% فراتر رود. رفتار پیش‌فرض (غیرتراکمی) می‌تواند با پارامتر noncumulative مشخص شود. یک پارامتر عدد صحیح که درصد آستانه حذف (به طور پیش‌فرض 3%) را مشخص می‌کند. دایرکتوری‌هایی که سهمی کمتر از این درصد از تغییرات را دارند در خروجی نشان داده نمی‌شوند. مثال: عبارت زیر فایل‌های تغییریافته را می‌شمارد، در حالی که دایرکتوری‌های دارای کمتر از 10% از کل مقدار فایل‌های تغییریافته را نادیده می‌گیرد، و شمارش دایرکتوری‌های فرزند را در دایرکتوری‌های والد تجمیع می‌کند: files,10,cumulative. diff.statNameWidth عرض بخش نام فایل را در خروجی --stat محدود می‌کند. در صورت تنظیم، بر تمامی دستورات تولیدکننده خروجی --stat به جز format-patch اعمال می‌شود. diff.statGraphWidth عرض بخش نمودار را در خروجی --stat محدود می‌کند. در صورت تنظیم، بر تمامی دستورات تولیدکننده خروجی --stat به جز format-patch اعمال می‌شود. diff.context دیف‌ها را به جای پیش‌فرض 3، با خط زمینه (context) تولید می‌کند. این مقدار توسط گزینه -U بازنویسی می‌شود. diff.interHunkContext زمینه میان تکه‌های دیف (hunks) را تا تعداد خطوط مشخص‌شده نمایش می‌دهد، و بدین ترتیب تکه‌هایی را که نزدیک یکدیگر هستند به هم پیوند می‌دهد. این مقدار به عنوان پیش‌فرض برای گزینه خط فرمان --inter-hunk-context عمل می‌کند. diff.external اگر این متغیر پیکربندی تنظیم شود، تولید دیف با استفاده از سازوکار داخلی دیف انجام نمی‌شود، بلکه با استفاده از دستور داده‌شده صورت می‌گیرد. می‌تواند با متغیر محیطی GIT_EXTERNAL_DIFF بازنویسی شود. این دستور با پارامترهایی فراخوانی می‌شود که در بخش "git Diffs" در git(1) توضیح داده شده است. نکته: اگر می‌خواهید از یک برنامه دیف خارجی تنها برای زیرمجموعه‌ای از فایل‌های خود استفاده کنید، ممکن است بهتر باشد به جای آن از gitattributes(5) استفاده کنید. diff.trustExitCode اگر این مقدار بولی روی true تنظیم شود، آنگاه انتظار می‌رود دستور diff.external در صورتی که فایل‌های ورودی را برابر بداند کد خروج 0 و اگر آن‌ها را متفاوت بداند کد خروج 1 را برگرداند، مانند diff(1). اگر روی false تنظیم شود، که پیش‌فرض است، آنگاه صرف‌نظر از برابری فایل‌ها، از دستور انتظار می‌رود کد خروج 0 را برگرداند. هر کد خروج دیگری باعث می‌شود Git یک خطای مهلک گزارش دهد. diff.ignoreSubmodules مقدار پیش‌فرض --ignore-submodules را تنظیم می‌کند. توجه داشته باشید که این موضوع تنها بر دستورات سطح بالای (Porcelain) git diff اثر می‌گذارد، و نه بر دستورات سطح پایین‌تر diff مانند git diff-files. دستورات git checkout و git switch نیز هنگام گزارش تغییرات کامیت‌نشده به این تنظیم احترام می‌گذارند. تنظیم آن روی all خلاصه زیرماژول را که معمولاً هنگام تنظیم status.submoduleSummary توسط git commit و git status نشان داده می‌شود غیرفعال می‌کند، مگر اینکه با استفاده از گزینه خط فرمان --ignore-submodules بازنویسی شود. دستورات git submodule تحت تأثیر این تنظیم قرار نمی‌گیرند. به طور پیش‌فرض این مقدار روی untracked تنظیم شده است تا هرگونه زیرماژول ردگیری‌نشده نادیده گرفته شود. diff.mnemonicPrefix در صورت تنظیم، git diff بسته به اینکه چه چیزی در حال مقایسه است، از یک جفت پیشوند متفاوت با پیشوند استاندارد a/ و b/ استفاده می‌کند. هنگامی که این پیکربندی برقرار باشد، خروجی دیف معکوس نیز ترتیب پیشوندها را جا‌به‌جا می‌کند: git diff ایندکس (i) و درخت کاری (w) را مقایسه می‌کند؛ git diff HEAD یک کامیت (c) و درخت کاری (w) را مقایسه می‌کند؛ git diff --cached یک کامیت (c) و ایندکس (i) را مقایسه می‌کند؛ git diff HEAD: یک شیء (o) و یک موجودیت درخت کاری (w) را مقایسه می‌کند؛ git diff --no-index دو مورد غیرگیت و را مقایسه می‌کند. diff.noPrefix در صورت تنظیم، git diff هیچ پیشوند مبدا یا مقصدی را نشان نمی‌دهد. diff.srcPrefix در صورت تنظیم، git diff از این پیشوند مبدا استفاده می‌کند. پیش‌فرض آن a/ است. diff.dstPrefix در صورت تنظیم، git diff از این پیشوند مقصد استفاده می‌کند. پیش‌فرض آن b/ است. diff.relative اگر روی true تنظیم شود، git diff تغییرات خارج از دایرکتوری را نشان نمی‌دهد و نام مسیرها را به صورت نسبی نسبت به دایرکتوری جاری نمایش می‌دهد. diff.orderFile فایلی که نحوه مرتب‌سازی فایل‌ها در یک دیف را مشخص می‌کند. برای جزئیات به گزینه -O در git-diff(1) مراجعه کنید. اگر diff.orderFile یک مسیر نسبی باشد، به عنوان مسیر نسبی نسبت به ریشه درخت کاری تلقی می‌شود. diff.renameLimit تعداد فایل‌هایی که در بخش جامع تشخیص کپی/تغییر نام در نظر گرفته می‌شوند؛ معادل گزینه -l در git diff. اگر تنظیم نشود، مقدار پیش‌فرض در حال حاضر 1000 است. اگر تشخیص تغییر نام غیرفعال باشد، این تنظیم هیچ اثری ندارد. diff.renames آیا و چگونه Git تغییر نام‌ها را تشخیص می‌دهد. اگر بر روی false تنظیم شود، تشخیص تغییر نام غیرفعال می‌شود. اگر بر روی true تنظیم شود، تشخیص پایه تغییر نام فعال می‌گردد. اگر بر روی copies یا copy تنظیم شود، Git کپی‌ها را نیز تشخیص خواهد داد. پیش‌فرض true است. توجه داشته باشید که این مورد تنها بر دستورات سطح بالا (Porcelain) git diff مانند git-diff(1) و git-log(1) تأثیر می‌گذارد و بر دستورات سطح پایین‌تر مانند git-diff-files(1) اثری ندارد. diff.suppressBlankEmpty یک مقدار بولی برای بازداری از رفتار استاندارد چاپ فاصله (space) پیش از هر خط خروجی خالی. پیش‌فرض false است. diff.submodule قالبی را مشخص می‌کند که تفاوت‌ها در زیرماژول‌ها در آن قالب نمایش داده می‌شوند. قالب short فقط نام کامیت‌ها را در ابتدا و انتهای بازه نشان می‌دهد. قالب log کامیت‌های موجود در بازه را مانند آنچه git-submodule(1) summary انجام می‌دهد فهرست می‌کند. قالب diff یک diff درون‌خطی از محتویات تغییریافته زیرماژول را نشان می‌دهد. پیش‌فرض short است. diff.wordRegex یک عبارت باقاعده گسترده POSIX که برای تعیین اینکه هنگام انجام محاسبات تفاوت کلمه‌به‌کلمه چه چیزی «کلمه» محسوب می‌شود، استفاده می‌گردد. دنباله‌های نویسه‌ای که با عبارت باقاعده مطابقت دارند «کلمه» هستند، تمام نویسه‌های دیگر فضای خالی ignorable (قابل چشم‌پوشی) در نظر گرفته می‌شوند. diff..command دستور درایور سفارشی diff. برای جزئیات به gitattributes(5) مراجعه کنید. diff..trustExitCode اگر این مقدار بولی روی true تنظیم شود، آنگاه انتظار می‌رود دستور diff..command در صورتی که فایل‌های ورودی را برابر بداند کد خروج 0 و در صورتی که آن‌ها را متفاوت بداند کد خروج 1 را برگرداند، مانند diff(1). اگر روی false تنظیم شود که مقدار پیش‌فرض است، آنگاه انتظار می‌رود دستور صرف‌نظر از برابری، کد خروج 0 برگرداند. هر کد خروج دیگری باعث می‌شود Git یک خطای مهلک گزارش کند. diff..xfuncname عبارت باقاعده‌ای که درایور diff باید برای تشخیص سرآیند قطعه (hunk header) استفاده کند. همچنین می‌توان از یک الگوی توکار استفاده کرد. برای جزئیات به gitattributes(5) مراجعه کنید. diff..binary این گزینه را روی true تنظیم کنید تا درایور diff فایل‌ها را به عنوان باینری در نظر بگیرد. برای جزئیات به gitattributes(5) مراجعه کنید. diff..textconv دستوری که درایور diff باید برای تولید نسخه تبدیل‌شده به متنِ یک فایل فراخوانی کند. نتیجه تبدیل برای تولید یک diff خوانا برای انسان استفاده می‌شود. برای جزئیات به gitattributes(5) مراجعه کنید. diff..wordRegex عبارت باقاعده‌ای که درایور diff باید برای تفکیک کلمات در یک خط استفاده کند. برای جزئیات به gitattributes(5) مراجعه کنید. diff..cachetextconv این گزینه را روی true تنظیم کنید تا درایور diff خروجی‌های تبدیل متن را کِش کند. برای جزئیات به gitattributes(5) مراجعه کنید. diff.indentHeuristic این گزینه را روی false تنظیم کنید تا روش‌های اکتشافی پیش‌فرضی که مرزهای قطعه diff را تغییر می‌دهند تا وصله‌ها آسان‌تر خوانده شوند، غیرفعال گردند. diff.algorithm یک الگوریتم diff انتخاب کنید. گونه‌ها به شرح زیر هستند: default, myers الگوریتم پایه‌ای حریصانه diff. در حال حاضر، این پیش‌فرض است. minimal زمان بیشتری صرف می‌کند تا مطمئن شود کوچک‌ترین diff ممکن تولید می‌شود. patience استفاده از الگوریتم «patience diff» هنگام ایجاد وصله‌ها. histogram این الگوریتم، الگوریتم patience را برای «پشتیبانی از عناصر مشترک با تکرار کم» گسترش می‌دهد. diff.wsErrorHighlight خطاهای فضای خالی را در خطوط context، old یا new در diff برجسته کنید. مقادیر چندگانه با کاما جدا می‌شوند، none مقادیر قبلی را بازنشانی می‌کند، default فهرست را به new بازنشانی می‌نماید و all کوتاه‌شده‌ای برای old,new,context است. خطاهای فضای خالی با color.diff.whitespace رنگ‌آمیزی می‌شوند. گزینه خط فرمان --ws-error-highlight= این تنظیم را لغو می‌کند. diff.colorMoved اگر روی یک معتبر یا یک مقدار true تنظیم شود، خطوط جابجا شده در یک diff با رنگ متفاوتی نمایش داده می‌شوند. برای جزئیات حالت‌های معتبر، --color-moved در git-diff(1) را ببینید. اگر صرفاً روی true تنظیم شود، حالت رنگ پیش‌فرض استفاده خواهد شد. هنگامی که روی false تنظیم گردد، خطوط جابجا شده رنگ‌آمیزی نمی‌شوند. diff.colorMovedWS هنگامی که خطوط جابجا شده مثلاً با استفاده از تنظیم diff.colorMoved رنگ‌آمیزی می‌شوند، این گزینه نحوه برخورد با فاصله‌ها را کنترل می‌کند. برای جزئیات حالت‌های معتبر، --color-moved-ws در git-diff(1) را ببینید. diff.tool کنترل می‌کند که کدام ابزار diff توسط git-difftool(1) استفاده شود. این متغیر مقدار پیکربندی‌شده در merge.tool را لغو می‌کند. فهرست زیر مقادیر توکار معتبر را نشان می‌دهد. هر مقدار دیگری به عنوان یک ابزار diff سفارشی در نظر گرفته می‌شود و مستلزم آن است که متغیر متناظر difftool..cmd تعریف شده باشد. diff.guitool کنترل می‌کند که هنگام مشخص شدن فلگ -g/--gui، کدام ابزار diff توسط git-difftool(1) استفاده شود. این متغیر مقدار پیکربندی‌شده در merge.guitool را لغو می‌کند. فهرست زیر مقادیر توکار معتبر را نشان می‌دهد. هر مقدار دیگری به عنوان یک ابزار diff سفارشی در نظر گرفته می‌شود و مستلزم آن است که متغیر متناظر difftool..cmd تعریف شده باشد. araxis استفاده از Araxis Merge (نیازمند نشست گرافیکی) bc استفاده از Beyond Compare (نیازمند نشست گرافیکی) bc3 استفاده از Beyond Compare (نیازمند نشست گرافیکی) bc4 استفاده از Beyond Compare (نیازمند نشست گرافیکی) codecompare استفاده از Code Compare (نیازمند نشست گرافیکی) deltawalker استفاده از DeltaWalker (نیازمند نشست گرافیکی) diffmerge استفاده از DiffMerge (نیازمند نشست گرافیکی) diffuse استفاده از Diffuse (نیازمند نشست گرافیکی) ecmerge استفاده از ECMerge (نیازمند نشست گرافیکی) emerge استفاده از Emacs' Emerge examdiff استفاده از ExamDiff Pro (نیازمند نشست گرافیکی) guiffy استفاده از Guiffy’s Diff Tool (نیازمند نشست گرافیکی) gvimdiff استفاده از gVim (نیازمند نشست گرافیکی) kdiff3 استفاده از KDiff3 (نیازمند نشست گرافیکی) kompare استفاده از Kompare (نیازمند نشست گرافیکی) meld استفاده از Meld (نیازمند نشست گرافیکی) nvimdiff استفاده از Neovim opendiff استفاده از FileMerge (نیازمند نشست گرافیکی) p4merge استفاده از HelixCore P4Merge (نیازمند نشست گرافیکی) smerge استفاده از Sublime Merge (نیازمند نشست گرافیکی) tkdiff استفاده از TkDiff (نیازمند نشست گرافیکی) vimdiff استفاده از Vim vscode استفاده از Visual Studio Code (نیازمند نشست گرافیکی) winmerge استفاده از WinMerge (نیازمند نشست گرافیکی) xxdiff استفاده از xxdiff (نیازمند نشست گرافیکی) difftool..cmd دستور لازم برای فراخوانی ابزار diff مشخص‌شده را معین می‌کند. دستور مشخص‌شده در شل با در دسترس بودن متغیرهای زیر ارزیابی می‌شود: LOCAL روی نام فایل موقت حاوی محتویات پیش‌تصویر diff (pre-image) تنظیم می‌شود و REMOTE روی نام فایل موقت حاوی محتویات پس‌تصویر diff (post-image) تنظیم می‌گردد. برای جزئیات بیشتر به گزینه --tool= در git-difftool(1) مراجعه کنید. difftool..path مسیر ابزار داده‌شده را لغو می‌کند. این در مواردی مفید است که ابزار شما در PATH قرار ندارد. difftool.trustExitCode اگر ابزار diff فراخوانی‌شده وضعیت خروج غیرصفر برگرداند، از difftool خارج شود. برای جزئیات بیشتر به گزینه --trust-exit-code در git-difftool(1) مراجعه کنید. difftool.prompt قبل از هر بار فراخوانی ابزار diff اعلان تأیید نمایش داده شود. difftool.guiDefault روی true تنظیم کنید تا به صورت پیش‌فرض از diff.guitool استفاده شود (معادل با مشخص کردن آرگومان --gui)، یا auto برای انتخاب diff.guitool یا diff.tool بسته به وجود مقدار متغیر محیطی DISPLAY. پیش‌فرض false است، که در آن آرگومان --gui باید صراحتاً ارائه شود تا diff.guitool استفاده گردد. extensions.* مگر در مواردی که خلاف آن ذکر شده باشد، اگر core.repositoryFormatVersion برابر 1 نباشد، مشخص کردن یک افزونه خطا است. به gitrepository-layout(5) مراجعه کنید. compatObjectFormat یک الگوریتم هش سازگاری را برای استفاده مشخص می‌کند. مقادیر قابل قبول sha1 و sha256 هستند. مقدار مشخص‌شده باید با مقدار extensions.objectFormat متفاوت باشد. این امر امکان تعامل‌پذیری در سطح کلاینت را بین مخازن گیت که objectFormat آن‌ها با این compatObjectFormat مطابقت دارد فراهم می‌آورد. به‌ویژه هنگامی که به طور کامل پیاده‌سازی شود، پوش‌ها و پول‌ها از مخزنی که objectFormat آن با compatObjectFormat مطابقت دارد انجام می‌شود، و همچنین امکان استفاده از oidهای کدگذاری‌شده در compatObjectFormat علاوه بر oidهای کدگذاری‌شده با objectFormat برای مشخص کردن اشیاء به صورت محلی وجود خواهد داشت. توجه داشته باشید عملکردی که توسط این افزونه فعال می‌شود ناقص بوده و در معرض تغییر است. این قابلیت در حال حاضر تنها برای امکان توسعه و آزمایش ویژگی زیربنایی وجود دارد و برای فعال‌سازی توسط کاربران نهایی طراحی نشده است. noop این افزونه رفتار گیت را به هیچ وجه تغییر نمی‌دهد. این افزونه تنها برای آزمایش سازگاری با فرمت ۱ مفید است. به دلایل تاریخی، این افزونه صرف‌نظر از تنظیم core.repositoryFormatVersion رعایت می‌شود. noop-v1 این افزونه رفتار گیت را به هیچ وجه تغییر نمی‌دهد. این افزونه تنها برای آزمایش سازگاری با فرمت ۱ مفید است. objectFormat الگوریتم هش مورد استفاده را مشخص می‌کند. مقادیر قابل قبول sha1 و sha256 هستند. در صورت عدم مشخص شدن، sha1 فرض می‌شود. توجه داشته باشید که این تنظیم تنها باید توسط git-init(1) یا git-clone(1) تنظیم شود. تلاش برای تغییر آن پس از مقداردهی اولیه کار نخواهد کرد و مشکلاتی به وجود می‌آورد که عیب‌یابی آن‌ها دشوار است. partialClone هنگام فعال بودن، نشان می‌دهد که مخزن با یک کلون جزئی ایجاد شده است (یا بعداً واکشی جزئی انجام داده است) و اینکه ریموت ممکن است از ارسال اشیاء ناخواسته خاصی صرف‌نظر کرده باشد. چنین ریموتی «promisor remote» (ریموت متعهد) نامیده می‌شود و قول می‌دهد که تمام اشیاء حذف‌شده این‌چنینی را می‌توان در آینده از آن واکشی کرد. مقدار این کلید، نام ریموت متعهد است. به دلایل تاریخی، این افزونه صرف‌نظر از تنظیم core.repositoryFormatVersion رعایت می‌شود. preciousObjects در صورت فعال بودن، نشان می‌دهد که اشیاء موجود در مخزن نباید حذف شوند (مثلاً توسط git-prune یا git repack -d). به دلایل تاریخی، این افزونه صرف‌نظر از تنظیم core.repositoryFormatVersion رعایت می‌شود. refStorage فرمت ذخیره‌سازی مراجع و محموله (payload) متناظر آن را مشخص می‌کند. مقدار می‌تواند یک نام فرمت یا یک URI باشد: • تنها یک نام فرمت (مثلاً reftable یا files). • یک فرمت URI :// که صراحتاً هم فرمت و هم محموله را مشخص می‌کند (مثلاً reftable:///foo/bar). نام‌های فرمت پشتیبانی‌شده عبارتند از: files برای فایل‌های مستقل همراه با packed-refs. این حالت پیش‌فرض است. reftable برای فرمت reftable. محموله مستقیماً به بک‌اند مراجع ارسال می‌شود. برای بک‌اندهای files و reftable، این باید یک مسیر سیستم‌فایل باشد که مراجع در آن ذخیره می‌شوند. در صورتی که محموله‌ای ارائه نشود، به طور پیش‌فرض commondir در نظر گرفته می‌شود. مسیرهای نسبی نسبت به $GIT_DIR حل می‌شوند. بک‌اندهای آینده ممکن است از طرح‌های محموله دیگری پشتیبانی کنند، مثلاً postgres://127.0.0.1:5432?database=myrepo. توجه داشته باشید که این تنظیم تنها باید توسط git-init(1) یا git-clone(1) تنظیم شود. تلاش برای تغییر آن پس از مقداردهی اولیه کار نخواهد کرد و مشکلاتی به وجود می‌آورد که عیب‌یابی آن‌ها دشوار است. relativeWorktrees در صورت فعال بودن، نشان می‌دهد حداقل یک درخت کاری با مسیرهای نسبی پیوند داده شده است. اگر یک درخت کاری با گزینه --relative-paths یا با تنظیم پیکربندی worktree.useRelativePaths روی true ایجاد یا تعمیر شده باشد، به طور خودکار تنظیم می‌گردد. submodulePathConfig این افزونه برای اقلیتی از کاربران است که: • به دلایل مختلف، مانند تداخل‌های سیستم‌فایل غیرحساس به حروف کوچک و بزرگ هنگام ایجاد ماژول‌هایی با نام‌های foo و Foo، با خطاهایی مانند refusing to create ... in another submodule's git dir مواجه می‌شوند. • به ساختاربندی‌های انعطاف‌پذیرتری برای زیرماژول‌ها نیاز دارند، برای مثال به دلیل نام‌های تو در تو مانند foo، foo/bar و foo/baz که توسط سازوکار پیش‌فرض gitdir که از مکان‌های .git/modules/ استفاده می‌کند پشتیبانی نمی‌شوند، و باعث تداخل‌های بیشتری می‌گردند. هنگامی که extensions.submodulePathConfig فعال باشد، پیکربندی submodule..gitdir به تنها مرجع واحد حقیقت برای تمام مسیرهای gitdir زیرماژول‌ها تبدیل می‌شود و برای تمام زیرماژول‌های جدید هم در طول عملیات clone و هم init به صورت خودکار تنظیم می‌گردد. اگر یک ماژول تنظیم متناظر submodule..gitdir را نداشته باشد، Git با خطا مواجه خواهد شد. زیرماژول‌های موجود (پیش از فعال‌سازی افزونه) باید با افزودن ورودی‌های پیکربندی ناموجود مهاجرت داده شوند. این کار می‌تواند به صورت دستی انجام شود، مثلاً برای هر زیرماژول: git config submodule..gitdir .git/modules/، یا از طریق دستور git submodule--helper migrate-gitdir-configs که روی تمام زیرماژول‌ها پیمایش کرده و تلاش می‌کند آن‌ها را مهاجرت دهد. این افزونه می‌تواند با تنظیم init.defaultSubmodulePathConfig روی true، به طور خودکار برای مخازن جدید فعال شود، برای مثال با اجرای git config --global init.defaultSubmodulePathConfig true. worktreeConfig در صورت فعال بودن، درخت‌های کاری تنظیمات پیکربندی را علاوه بر فایل $GIT_COMMON_DIR/config از فایل $GIT_DIR/config.worktree نیز بارگذاری خواهند کرد. توجه داشته باشید که $GIT_COMMON_DIR و $GIT_DIR برای درخت کاری اصلی یکسان هستند، در حالی که سایر درخت‌های کاری دارای $GIT_DIR برابر با $GIT_COMMON_DIR/worktrees// می‌باشند. تنظیمات موجود در فایل config.worktree تنظیمات هر فایل پیکربندی دیگری را لغو خواهند کرد. هنگام فعال‌سازی این افزونه، باید مراقب باشید که در صورت وجود، مقادیر خاصی را از فایل پیکربندی مشترک به فایل config.worktree درخت کاری اصلی منتقل کنید: • core.worktree باید از $GIT_COMMON_DIR/config به $GIT_COMMON_DIR/config.worktree منتقل شود. • اگر core.bare برابر true باشد، آنگاه باید از $GIT_COMMON_DIR/config به $GIT_COMMON_DIR/config.worktree منتقل شود. همچنین ممکن است بسته به تمایل شما برای تنظیمات سفارشی‌سازی‌پذیر sparse-checkout برای هر درخت کاری، تنظیم مکان‌های core.sparseCheckout و core.sparseCheckoutCone مفید باشد. به طور پیش‌فرض، دستور توکار git sparse-checkout این افزونه را فعال می‌کند، این مقادیر پیکربندی را بر مبنای هر درخت کاری اختصاص می‌دهد، و از فایل $GIT_DIR/info/sparse-checkout برای تعیین میزان پراکندگی برای هر درخت کاری به طور مستقل استفاده می‌کند. برای جزئیات بیشتر به git-sparse-checkout(1) مراجعه کنید. به دلایل تاریخی، این افزونه صرف‌نظر از تنظیم core.repositoryFormatVersion رعایت می‌شود. fastimport.unpackLimit اگر تعداد اشیاء واردشده توسط git-fast-import(1) کمتر از این حد باشد، اشیاء به صورت فایل‌های شیء مستقل از بسته‌بندی خارج می‌شوند. اما اگر تعداد اشیاء واردشده برابر یا بیشتر از این حد باشد، بسته به صورت یک فایل بسته (pack) ذخیره خواهد شد. ذخیره بسته حاصل از fast-import می‌تواند باعث شود عملیات ورود سریع‌تر انجام شود، به‌ویژه روی سیستم‌های فایلی کند. در صورت عدم تنظیم، مقدار transfer.unpackLimit به جای آن استفاده می‌شود. feature.* تنظیمات پیکربندی که با feature. شروع می‌شوند، مقادیر پیش‌فرض گروهی از تنظیمات پیکربندی دیگر را تغییر می‌دهند. این گروه‌ها توسط جامعه توسعه‌دهندگان Git به عنوان پیش‌فرض‌های توصیه‌شده ایجاد شده‌اند و در معرض تغییر هستند. به‌ویژه، ممکن است گزینه‌های پیکربندی جدیدی با پیش‌فرض‌های متفاوت اضافه شوند. feature.experimental گزینه‌های پیکربندی را که در Git جدید هستند و برای پیش‌فرض‌های آینده در نظر گرفته شده‌اند فعال کنید. تنظیمات پیکربندی گنجانده‌شده در اینجا ممکن است با هر انتشار، از جمله به‌روزرسانی‌های نگارش‌های فرعی، اضافه یا حذف شوند. این تنظیمات ممکن است به دلیل جدید بودن، اثرات متقابل ناخواسته‌ای داشته باشند. لطفاً اگر علاقه‌مند به ارائه بازخورد در مورد ویژگی‌های آزمایشی هستید، این تنظیم را فعال کنید. مقادیر پیش‌فرض جدید عبارتند از: • fetch.negotiationAlgorithm=skipping ممکن است با پرش از روی کامیت‌های بیشتر در هر مرحله، زمان مذاکره واکشی را بهبود بخشد و تعداد رفت‌وبرگشت‌ها را کاهش دهد. • pack.useBitmapBoundaryTraversal=true ممکن است با پیمایش اشیاء کمتر، زمان پیمایش نگاشت بیتی را بهبود بخشد. • pack.allowPackReuse=multi ممکن است زمان لازم برای ایجاد یک بسته را با استفاده مجدد از اشیاءِ چند بسته به جای تنها یک بسته بهبود بخشد. • pack.usePathWalk ممکن است ایجاد فایل بسته را سرعت بخشد و اندازه فایل‌های بسته را در حضور تداخل‌های خاص نام فایل با هش پیش‌فرض نام در Git به طور چشمگیری کوچک‌تر کند. • init.defaultRefFormat=reftable باعث می‌شود مخازن تازه مقداردهی‌شده از فرمت reftable برای ذخیره‌سازی مراجع استفاده کنند. این فرمت جدید مشکلات مربوط به سیستم‌های فایلی غیرحساس به حروف کوچک و بزرگ را برطرف می‌کند، فشرده‌سازی بهتری دارد و در بسیاری از موارد کاربرد عملکرد بسیار بهتری ارائه می‌دهد. برای اطلاعات بیشتر در مورد این فرمت ذخیره‌سازی جدید به Documentation/technical/reftable.adoc مراجعه کنید. feature.manyFiles گزینه‌های پیکربندی را فعال می‌کند که برای مخازنی با تعداد فایل‌های بسیار در دایرکتوری کاری بهینه‌سازی شده‌اند. با وجود فایل‌های بسیار، دستوراتی مانند git status و git checkout ممکن است کند باشند و این پیش‌فرض‌های جدید عملکرد را بهبود می‌بخشند: • index.skipHash=true با محاسبه نکردن جمع کنترلی پایانی، نوشتن در ایندکس را سرعت می‌بخشد. توجه داشته باشید که این امر باعث می‌شود نگارش‌های Git قدیمی‌تر از 2.13.0 از تجزیه ایندکس خودداری کنند و نگارش‌های Git قدیمی‌تر از 2.40.0 در حین اجرای git fsck یک ایندکس خراب را گزارش دهند. • index.version=4 فشرده‌سازی پیشوند مسیر را در ایندکس فعال می‌کند. • core.untrackedCache=true کِش فایل‌های ردگیری‌نشده را فعال می‌کند. این تنظیم فرض می‌کند که mtime روی سیستم شما کار می‌کند. fetch.recurseSubmodules این گزینه کنترل می‌کند که آیا git fetch (و واکشی زیربنایی در git pull) به صورت بازگشتی در زیرماژول‌های پرشده واکشی انجام دهد یا خیر. این گزینه می‌تواند روی یک مقدار بولی یا روی on-demand تنظیم شود. تنظیم آن روی یک مقدار بولی رفتار fetch و pull را تغییر می‌دهد تا در صورت تنظیم روی true بدون قید و شرط به صورت بازگشتی وارد زیرماژول‌ها شوند، یا در صورت تنظیم روی false اصلاً بازگشتی عمل نکنند. هنگامی که روی on-demand تنظیم شود، fetch و pull تنها زمانی به صورت بازگشتی وارد یک زیرماژول پرشده می‌شوند که ابرپروژه آن کامیتی را دریافت کند که مرجع زیرماژول را به‌روزرسانی نماید. پیش‌فرض on-demand است، یا مقدار submodule.recurse در صورت تنظیم بودن. fetch.fsckObjects اگر روی true تنظیم شود، git-fetch-pack تمام اشیاء واکشی‌شده را بررسی خواهد کرد. برای آنچه بررسی می‌شود به transfer.fsckObjects مراجعه کنید. پیش‌فرض false است. در صورت عدم تنظیم، مقدار transfer.fsckObjects به جای آن استفاده می‌شود. fetch.fsck. مانند fsck. عمل می‌کند، اما به جای git-fsck(1) توسط git- fetch-pack(1) استفاده می‌شود. برای جزئیات به مستندات fsck. مراجعه کنید. fetch.fsck.skipList مانند fsck.skipList عمل می‌کند، اما به جای git-fsck(1) توسط git- fetch-pack(1) استفاده می‌شود. برای جزئیات به مستندات fsck.skipList مراجعه کنید. fetch.unpackLimit اگر تعداد اشیاء واکشی‌شده از طریق انتقال بومی Git کمتر از این حد باشد، اشیاء به صورت فایل‌های شیء مستقل از بسته‌بندی خارج می‌شوند. اما اگر تعداد اشیاء دریافت‌شده برابر یا بیشتر از این حد باشد، بسته دریافت‌شده پس از افزودن هرگونه پایه‌های دلتای ناموجود، به عنوان یک بسته ذخیره خواهد شد. ذخیره بسته حاصل از ارسال می‌تواند باعث شود عملیات ارسال سریع‌تر انجام شود، به‌ویژه روی سیستم‌های فایلی کند. در صورت عدم تنظیم، مقدار transfer.unpackLimit به جای آن استفاده می‌شود. fetch.prune اگر true باشد، fetch به طور خودکار به گونه‌ای عمل می‌کند که گویی گزینه --prune در خط فرمان داده شده است. همچنین به remote..prune و بخش PRUNING در git-fetch(1) مراجعه کنید. fetch.pruneTags اگر true باشد، fetch در هنگام هرس به طور خودکار به گونه‌ای عمل می‌کند که گویی مشخصه مرجع refs/tags/*:refs/tags/* ارائه شده است، البته اگر قبلاً تنظیم نشده باشد. این امر امکان تنظیم هر دوی این گزینه و fetch.prune را برای حفظ نگاشت ۱ به ۱ با مراجع بالادست فراهم می‌کند. همچنین به remote..pruneTags و بخش PRUNING در git-fetch(1) مراجعه کنید. fetch.all اگر true باشد، fetch تلاش می‌کند تمام ریموت‌های موجود را به‌روزرسانی کند. این رفتار را می‌توان با فرستادن --no-all یا با مشخص کردن صریح یک یا چند ریموت برای واکشی لغو کرد. پیش‌فرض false است. fetch.output نحوه چاپ وضعیت به‌روزرسانی مراجع را کنترل می‌کند. مقادیر معتبر عبارتند از full و compact. مقدار پیش‌فرض full است. برای جزئیات به بخش OUTPUT در git-fetch(1) مراجعه کنید. fetch.negotiationAlgorithm نحوه ارسال اطلاعات مربوط به کامیت‌ها در مخزن محلی را هنگام مذاکره بر سر محتویات فایل بسته ارسالی توسط سرور کنترل می‌کند. روی consecutive تنظیم کنید تا از الگوریتمی استفاده شود که کامیت‌های متوالی را پیمایش کرده و تک‌تک آن‌ها را بررسی می‌کند. روی skipping تنظیم کنید تا از الگوریتمی استفاده شود که کامیت‌ها را با هدف همگرایی سریع‌تر نادیده می‌گیرد، اما ممکن است منجر به فایل بسته‌ای بزرگ‌تر از حد نیاز شود؛ یا روی noop تنظیم کنید تا اصلاً هیچ اطلاعاتی ارسال نشود، که تقریباً به طور قطع منجر به فایل بسته‌ای بزرگ‌تر از حد نیاز خواهد شد، اما مرحله مذاکره را دور می‌زند. روی default تنظیم کنید تا تنظیمات اعمال‌شده قبلی لغو شده و از رفتار پیش‌فرض استفاده گردد. پیش‌فرض معمولاً consecutive است، اما اگر feature.experimental برابر true باشد، آنگاه پیش‌فرض skipping خواهد بود. مقادیر ناشناخته باعث خطای git fetch می‌شوند. همچنین گزینه‌های --negotiate-only و --negotiation-restrict در git-fetch(1) را ببینید. fetch.showForcedUpdates روی false تنظیم کنید تا --no-show-forced-updates در دستورات git-fetch(1) و git-pull(1) فعال شود. پیش‌فرض true است. fetch.parallel حداکثر تعداد عملیات واکشی را که می‌توانند به طور هم‌زمان و موازی اجرا شوند مشخص می‌کند (زیرماژول‌ها، یا ریموت‌ها هنگامی که گزینه --multiple در git-fetch(1) اعمال شده باشد). مقدار 0 یک پیش‌فرض معقول تعیین می‌کند. اگر تنظیم نشود، پیش‌فرض 1 است. برای زیرماژول‌ها، این تنظیم را می‌توان با استفاده از تنظیم پیکربندی submodule.fetchJobs لغو کرد. fetch.writeCommitGraph روی true تنظیم کنید تا پس از هر دستور git fetch که یک فایل بسته را از ریموت دانلود می‌کند، یک commit-graph نوشته شود. با استفاده از گزینه --split، بیشتر اجراها یک فایل commit-graph بسیار کوچک روی فایل(های) commit-graph موجود ایجاد می‌کنند. گاهی اوقات این فایل‌ها ادغام می‌شوند و نوشتن ممکن است طولانی‌تر شود. داشتن یک فایل commit-graph به‌روز به عملکرد بسیاری از دستورات Git کمک می‌کند، از جمله git merge-base، git push -f، و git log --graph. پیش‌فرض false است. fetch.bundleURI این مقدار یک URI را برای دانلود داده‌های شیء Git از یک bundle URI قبل از انجام واکشی افزایشی از سرور اصلی Git ذخیره می‌کند. این شبیه به نحوه رفتار گزینه --bundle-uri در git-clone(1) است. دستور git clone --bundle-uri در صورتی که bundle URI ارائه‌شده شامل فهرست بسته‌ای باشد که برای واکشی‌های افزایشی سازمان‌یافته است، مقدار fetch.bundleURI را تنظیم می‌کند. اگر این مقدار را تغییر دهید و مخزن شما دارای مقدار fetch.bundleCreationToken باشد، پیش از واکشی از bundle URI جدید، آن مقدار fetch.bundleCreationToken را حذف کنید. fetch.bundleCreationToken هنگام استفاده از fetch.bundleURI برای واکشی افزایشی از یک فهرست بسته که از روش اکتشافی «creationToken» استفاده می‌کند، این مقدار پیکربندی حداکثر مقدار creationToken بسته‌های دانلودشده را ذخیره می‌کند. این مقدار برای جلوگیری از دانلود بسته‌ها در آینده استفاده می‌شود اگر creationToken اعلام‌شده اکیداً بزرگ‌تر از این مقدار نباشد. مقادیر توکن ایجاد توسط ارائه‌دهنده‌ای که bundle URI خاص را ارائه می‌دهد انتخاب می‌شوند. اگر URI را در fetch.bundleURI تغییر دادید، حتماً پیش از واکشی مقدار fetch.bundleCreationToken را حذف کنید. filter..clean دستوری که برای تبدیل محتوای یک فایل درخت کاری به یک blob در هنگام ثبت (checkin) استفاده می‌شود. برای جزئیات به gitattributes(5) مراجعه کنید. filter..smudge دستوری که برای تبدیل محتوای یک شیء blob به یک فایل درخت کاری در هنگام وارسی (checkout) استفاده می‌شود. برای جزئیات به gitattributes(5) مراجعه کنید. format.attach پیوست‌های multipart/mixed را به عنوان پیش‌فرض برای format-patch فعال می‌کند. مقدار همچنین می‌تواند یک رشته درون گیومه باشد که پیوست‌ها را به عنوان پیش‌فرض فعال کرده و آن مقدار را به عنوان مرز (boundary) تنظیم کند. گزینه --attach را در git-format-patch(1) ببینید. برای باطل کردن یک مقدار قبلی، آن را روی رشته خالی تنظیم کنید. format.from مقدار پیش‌فرض را برای گزینه --from در format-patch فراهم می‌کند. یک مقدار بولی، یا یک نام و نشانی ایمیل را می‌پذیرد. اگر false باشد، format-patch به صورت پیش‌فرض روی --no-from قرار می‌گیرد و از نویسندگان کامیت مستقیماً در فیلد «From:» ایمیل‌های وصله استفاده می‌کند. اگر true باشد، format-patch به صورت پیش‌فرض روی --from قرار می‌گیرد و از هویت کامیت‌کننده شما در فیلد «From:» ایمیل‌های وصله استفاده می‌نماید و در صورت تفاوت، یک فیلد «From:» در بدنه ایمیل وصله درج می‌کند. اگر روی یک مقدار غیربولی تنظیم شود، format-patch از آن مقدار به جای هویت کامیت‌کننده شما استفاده می‌کند. پیش‌فرض false است. format.forceInBodyFrom مقدار پیش‌فرض را برای گزینه --[no-]force-in-body-from در format-patch فراهم می‌کند. پیش‌فرض false است. format.numbered یک مقدار بولی که می‌تواند شماره‌های ترتیبی را در موضوعات وصله فعال یا غیرفعال کند. پیش‌فرض آن «auto» است که فقط در صورت وجود بیش از یک وصله آن را فعال می‌کند. با تنظیم آن روی «true» یا «false» می‌توان آن را برای همه پیام‌ها فعال یا غیرفعال کرد. گزینه --numbered در git-format-patch(1) را ببینید. format.headers سرآیندهای ایمیل اضافی برای گنجاندن در وصله‌ای که قرار است با ایمیل ارسال شود. به git-format-patch(1) مراجعه کنید. format.to, format.cc گیرندگان اضافی برای گنجاندن در وصله‌ای که قرار است با ایمیل ارسال شود. گزینه‌های --to و --cc را در git-format-patch(1) ببینید. format.subjectPrefix پیش‌فرض برای format-patch خروجی دادن فایل‌ها با پیشوند موضوع [PATCH] است. از این متغیر برای تغییر آن پیشوند استفاده کنید. format.coverFromDescription حالت پیش‌فرض برای format-patch جهت تعیین اینکه کدام بخش‌های نامه پوششی با استفاده از توضیحات شاخه پر می‌شوند. گزینه --cover-from-description در git-format-patch(1) را ببینید. format.signature پیش‌فرض برای format-patch خروجی دادن امضایی حاوی شماره نسخه Git است. از این متغیر برای تغییر آن پیش‌فرض استفاده کنید. این متغیر را روی رشته خالی ("") تنظیم کنید تا از تولید امضا جلوگیری شود. format.signatureFile دقیقاً مانند format.signature کار می‌کند مگر آنکه محتویات فایل مشخص‌شده توسط این متغیر به عنوان امضا استفاده خواهد شد. format.suffix پیش‌فرض برای format-patch خروجی دادن فایل‌ها با پسوند .patch است. از این متغیر برای تغییر آن پسوند استفاده کنید (در صورت تمایل به داشتن نقطه، حتماً آن را بگنجانید). format.encodeEmailHeaders سرآیندهای ایمیل دارای نویسه‌های غیر ASCII را با «Q-encoding» (توصیف‌شده در RFC 2047) برای ارسال از طریق ایمیل کدگذاری می‌کند. پیش‌فرض true است. format.pretty قالب زیبای پیش‌فرض برای دستورات log/show/whatchanged. به git- log(1)، git-show(1)، git-whatchanged(1) مراجعه کنید. format.thread سبک پیش‌فرض رشته‌بندی (threading) برای git format-patch. می‌تواند یک مقدار بولی، یا shallow یا deep باشد. رشته‌بندی shallow کاری می‌کند که هر ایمیل پاسخی به سرِ مجموعه (head of the series) باشد، که در آن سرِ مجموعه به ترتیب از نامه روی جلد (cover letter)، --in-reply-to و اولین ایمیل وصله انتخاب می‌شود. رشته‌بندی deep هر ایمیل را به پاسخی برای ایمیل قبلی تبدیل می‌کند. مقدار بولی درست (true) معادل shallow است و مقدار نادرست (false) رشته‌بندی را غیرفعال می‌کند. format.signOff یک مقدار بولی که به شما امکان می‌دهد گزینه -s/--signoff در format-patch را به‌طور پیش‌فرض فعال کنید. توجه: افزودن دنباله (trailer) Signed-off-by به یک وصله باید اقدامی آگاهانه باشد و بدین معناست که شما گواهی می‌دهید حق ارسال این اثر را تحت همان مجوز متن‌باز دارید. لطفاً برای توضیحات بیشتر به سند SubmittingPatches مراجعه کنید. format.coverLetter یک مقدار بولی که کنترل می‌کند آیا هنگام فراخوانی format-patch نامه روی جلد (cover-letter) ایجاد شود یا خیر؛ علاوه بر این می‌تواند روی "auto" تنظیم شود تا تنها زمانی که بیش از یک وصله وجود دارد نامه روی جلد ایجاد گردد. پیش‌فرض false است. format.commitListFormat هنگامی که گزینه --commit-list-format داده نشده باشد، format-patch از مقدار این متغیر برای تصمیم‌گیری در مورد نحوه قالب‌بندی مدخل هر کامیت استفاده می‌کند. پیش‌فرض shortlog است. format.outputDirectory یک پوشه سفارشی را برای ذخیره فایل‌های خروجی به جای پوشه کاری فعلی تنظیم می‌کند. تمام بخش‌های مسیر پوشه در صورت نیاز ایجاد خواهند شد. format.filenameMaxLength حداکثر طول نام فایل‌های خروجی تولیدشده توسط دستور format-patch؛ پیش‌فرض 64 است. می‌تواند با گزینه خط فرمان --filename-max-length= بازنویسی (override) شود. format.useAutoBase یک مقدار بولی که به شما امکان می‌دهد گزینه --base=auto در format-patch را به‌طور پیش‌فرض فعال کنید. همچنین می‌تواند روی "whenAble" تنظیم شود تا در صورت در دسترس بودن یک پایه (base) مناسب، --base=auto فعال گردد، اما در غیر این صورت بدون متوقف شدن و خطای فرآیند، از افزودن اطلاعات پایه صرف‌نظر شود. format.notes مقدار پیش‌فرض گزینه --notes را برای format-patch فراهم می‌کند. یک مقدار بولی یا یک مرجع (ref) را می‌پذیرد که مشخص می‌کند یادداشت‌ها از کجا دریافت شوند. اگر false باشد، format-patch به‌طور پیش‌فرض از --no-notes استفاده می‌کند. اگر true باشد، format-patch به‌طور پیش‌فرض از --notes استفاده می‌کند. اگر روی یک مقدار غیربولی تنظیم شود، format-patch به‌طور پیش‌فرض از --notes= استفاده می‌کند، که در آن ref همان مقدار غیربولی است. پیش‌فرض false است. اگر کسی بخواهد از مرجع refs/notes/true استفاده کند، لطفاً در عوض از همان عبارت دقیق استفاده کند. این پیکربندی می‌تواند چندین بار مشخص شود تا امکان گنجاندن چند مرجع یادداشت وجود داشته باشد. در این حالت، رفتاری مشابه ارسال چندین گزینه --[no-]notes[=] خواهد داشت. به این معنا که مقدار true یادداشت‌های پیش‌فرض را نشان می‌دهد، مقدار همچنین یادداشت‌های حاصل از آن مرجع یادداشت را نشان می‌دهد و مقدار false پیکربندی‌های قبلی را لغو کرده و یادداشتی نشان نمی‌دهد. برای مثال، [format] notes = true notes = foo notes = false notes = bar تنها یادداشت‌های مربوط به refs/notes/bar را نشان خواهد داد. format.mboxrd یک مقدار بولی که فرمت مطمئن "mboxrd" را هنگام استفاده از --stdout برای اسکیپ کردن خطوط "^>+From " فعال می‌کند. format.noprefix در صورت تنظیم، هیچ پیشوند مبدأ یا مقصدی در وصله‌ها نشان داده نمی‌شود. این معادل گزینه diff.noprefix است که توسط git diff استفاده می‌شود (اما توسط format-patch رعایت نمی‌گردد). توجه داشته باشید که با تنظیم این متغیر، دریافت‌کننده وصله‌های تولیدی شما باید آن‌ها را با استفاده از گزینه -p0 اعمال کند. fsck. در طول fsck، ممکن است git مشکلاتی را در داده‌های قدیمی (legacy) پیدا کند که توسط نسخه‌های فعلی git تولید نمی‌شوند و در صورت تنظیم بودن transfer.fsckObjects روی شبکه ارسال نمی‌شدند. این ویژگی برای پشتیبانی از کار با مخازن قدیمی حاوی چنین داده‌هایی در نظر گرفته شده است. تنظیم fsck. توسط git-fsck(1) خوانده می‌شود، اما برای پذیرش پوش‌های حاوی چنین داده‌هایی به جای آن receive.fsck. را تنظیم کنید، یا برای شبیه‌سازی (clone) یا واکشی (fetch) آن، fetch.fsck. را تنظیم نمایید. بقیه مستندات برای اختصار در مورد fsck.* بحث می‌کند، اما همین موضوع در مورد متغیرهای متناظر receive.fsck.* و fetch.fsck.* نیز صدق می‌کند. برخلاف متغیرهایی مانند color.ui و core.editor، متغیرهای receive.fsck. و fetch.fsck. در صورت عدم تنظیم، به پیکربندی fsck. رجوع نخواهند کرد (fall back نمی‌کنند). برای پیکربندی یکنواخت تنظیمات fsck در شرایط مختلف، هر سه آن‌ها باید روی مقادیر یکسان تنظیم شوند. هنگامی که fsck. تنظیم شود، می‌توان با پیکربندی تنظیم fsck. خطاها را به هشدار و برعکس تبدیل کرد، جایی که همان شناسه پیام fsck است و مقدار یکی از error، warn یا ignore می‌باشد. برای راحتی، fsck پیشوند خطا/هشدار را با شناسه پیام مشخص می‌کند، به عنوان مثال "missingEmail: invalid author/committer line - missing email" به این معنی است که تنظیم fsck.missingEmail = ignore آن مشکل را پنهان خواهد کرد. به‌طور کلی، بهتر است اشیاء مشکل‌دار موجود را با fsck.skipList فهرست کنید، به جای آنکه نوع خرابی‌های مشترک این اشیاء را برای نادیده گرفته شدن فهرست نمایید؛ چرا که انجام مورد دوم اجازه می‌دهد نمونه‌های جدید همان خرابی‌ها ناشناخته باقی بمانند. تنظیم مقدار ناشناخته برای fsck. باعث متوقف شدن و خروج غیرعادی fsck می‌شود، اما انجام همین کار برای receive.fsck. و fetch.fsck. تنها باعث صدور هشدار توسط git خواهد شد. برای مقادیر پشتیبانی‌شده ، بخش Fsck Messages در git- fsck(1) را ببینید. fsck.skipList مسیر یک فهرست از نام‌های اشیاء (یعنی یک SHA-1 کامل و بدون اختصار در هر خط) که مشخص شده به‌گونه‌ای غیرمهلک خراب هستند و باید نادیده گرفته شوند. در نسخه‌های Git 2.20 و جدیدتر، توضیحات (#)، خطوط خالی، و هرگونه فاصله خالی ابتدایی و انتهایی نادیده گرفته می‌شوند. در نسخه‌های قدیمی‌تر، هر چیزی جز یک SHA-1 در هر خط با خطا مواجه خواهد شد. این ویژگی زمانی مفید است که یک پروژه جاافتاده علی‌رغم کامیت‌های اولیه‌ای که حاوی خطاهای قابل چشم‌پوشی هستند (مانند آدرس‌های ایمیل نامعتبر ثبت‌کننده کامیت)، باید پذیرفته شود. توجه: اشیاء فاسد و آسیب‌دیده (corrupt objects) را نمی‌توان با این تنظیم نادیده گرفت. مشابه fsck.، این متغیر دارای انواع متناظر receive.fsck.skipList و fetch.fsck.skipList است. برخلاف متغیرهایی مانند color.ui و core.editor، متغیرهای receive.fsck.skipList و fetch.fsck.skipList در صورت عدم تنظیم، به پیکربندی fsck.skipList رجوع نمی‌کنند. برای پیکربندی یکنواخت تنظیمات fsck در شرایط مختلف، هر سه آن‌ها باید روی مقادیر یکسان تنظیم شوند. نسخه‌های قدیمی‌تر Git (قبل از 2.20) مستند کرده بودند که فهرست نام‌های اشیاء باید مرتب شده باشد. این موضوع هرگز یک الزام نبود؛ نام‌های اشیاء می‌توانستند به هر ترتیبی ظاهر شوند، اما هنگام خواندن فهرست، برای اهداف پیاده‌سازی جستجوی دودویی داخلی که می‌توانست با فهرست از قبل مرتب‌شده کار کمتری انجام دهد، مرتب بودن فهرست ردیابی می‌شد. مگر اینکه فهرستی بسیار عظیم داشتید، دلیلی برای مرتب‌سازی اولیه فهرست وجود نداشت. پس از نسخه Git 2.20 پیاده‌سازی درهم‌سازی (hash) در عوض استفاده می‌شود، بنابراین اکنون دلیلی برای مرتب‌سازی اولیه فهرست وجود ندارد. fsmonitor.allowRemote به‌طور پیش‌فرض، دیمن fsmonitor از کار با مخازن متصل‌شده از طریق شبکه (network-mounted) خودداری می‌کند. تنظیم fsmonitor.allowRemote روی true این رفتار را بازنویسی می‌کند. تنها زمانی رعایت می‌شود که core.fsmonitor روی true تنظیم شده باشد. fsmonitor.socketDir این گزینه مخصوص Mac OS و Linux در صورت تنظیم، پوشه‌ای را مشخص می‌کند که سوکت دامنه یونیکس (Unix domain socket) مورد استفاده برای ارتباط بین دیمن fsmonitor و دستورات مختلف Git در آن ایجاد شود. این پوشه باید روی یک سیستم‌فایل بومی (native) قرار داشته باشد. تنها زمانی رعایت می‌شود که core.fsmonitor روی true تنظیم شده باشد. gc.aggressiveDepth پارامتر عمق (depth) مورد استفاده در الگوریتم فشرده‌سازی دلتا که توسط git gc --aggressive به کار می‌رود. مقدار پیش‌فرض آن 50 است، که پیش‌فرض گزینه --depth در زمان عدم استفاده از --aggressive می‌باشد. برای جزئیات بیشتر مستندات مربوط به گزینه --depth در git- repack(1) را ببینید. gc.aggressiveWindow پارامتر اندازه پنجره مورد استفاده در الگوریتم فشرده‌سازی دلتا که توسط git gc --aggressive به کار می‌رود. مقدار پیش‌فرض آن 250 است، که اندازه پنجره‌ای بسیار تهاجمی‌تر از مقدار پیش‌فرض 10 برای --window است. برای جزئیات بیشتر مستندات مربوط به گزینه --window در git- repack(1) را ببینید. gc.auto هنگامی که تقریباً بیش از این تعداد شیء مجزا (loose objects) در مخزن وجود داشته باشد، git gc --auto آن‌ها را بسته‌بندی (pack) می‌کند. برخی دستورات سطح بالا (Porcelain) از این دستور برای انجام گه‌گاه جمع‌آوری زباله سبک استفاده می‌کنند. مقدار پیش‌فرض 6700 است. تنظیم این مقدار روی 0 نه تنها بسته‌بندی خودکار بر اساس تعداد اشیاء مجزا را غیرفعال می‌کند، بلکه هر روش شهودی دیگری را نیز که git gc --auto در غیر این صورت برای تشخیص وجود کار انجام‌دادنی استفاده می‌کرد (مانند gc.autoPackLimit)، غیرفعال می‌سازد. gc.autoPackLimit هنگامی که بیش از این تعداد بسته وجود داشته باشد که با فایل *.keep در مخزن علامت‌گذاری نشده‌اند، git gc --auto آن‌ها را در یک بسته بزرگ‌تر تجمیع می‌کند. مقدار پیش‌فرض 50 است. تنظیم آن روی 0 این قابلیت را غیرفعال می‌کند. تنظیم gc.auto روی 0 نیز این را غیرفعال خواهد کرد. متغیر پیکربندی gc.bigPackThreshold در زیر را ببینید. در صورت استفاده، بر نحوه عملکرد محدودیت بسته‌بندی خودکار تأثیر می‌گذارد. gc.autoDetach کاری می‌کند که git gc --auto در صورت پشتیبانی سیستم، بلافاصله بازگردد و در پس‌زمینه اجرا شود. پیش‌فرض true است. این متغیر پیکربندی به عنوان جایگزین پشتیبان در صورت تنظیم نبودن maintenance.autoDetach عمل می‌کند. gc.bigPackThreshold اگر غیرصفر باشد، هنگام اجرای git gc تمام بسته‌های غیرکرافتی (non-cruft) بزرگ‌تر از این حد نگه‌داشته می‌شوند. این بسیار شبیه به --keep-largest-pack است با این تفاوت که تمام بسته‌های غیرکرافتی که به این حد آستانه می‌رسند نگه‌داشته می‌شوند، نه فقط بزرگ‌ترین بسته. پیش‌فرض صفر است. پسوندهای رایج واحد k، m یا g پشتیبانی می‌شوند. توجه داشته باشید که اگر تعداد بسته‌های نگه‌داشته‌شده بیش از gc.autoPackLimit باشد، این متغیر پیکربندی نادیده گرفته می‌شود و تمام بسته‌ها به جز بسته پایه دوباره بسته‌بندی (repack) خواهند شد. پس از این، تعداد بسته‌ها باید به زیر gc.autoPackLimit برسد و gc.bigPackThreshold دوباره رعایت شود. اگر مقدار حافظه تخمینی برای اجرای روان git repack در دسترس نباشد و gc.bigPackThreshold تنظیم نشده باشد، بزرگ‌ترین بسته نیز مستثنی خواهد شد (این معادل اجرای git gc با --keep-largest-pack است). gc.writeCommitGraph اگر true باشد، هنگام اجرای git-gc(1) فرآیند gc فایل commit-graph را بازنویسی خواهد کرد. هنگام استفاده از git gc --auto، در صورت نیاز به خانه‌تکانی و نگهداری (housekeeping)، نمودار کامیت به‌روزرسانی خواهد شد. پیش‌فرض true است. برای جزئیات به git-commit-graph(1) مراجعه کنید. gc.logExpiry اگر فایل gc.log وجود داشته باشد، git gc --auto به جای اجرا، محتوای آن را چاپ کرده و با وضعیت صفر خارج می‌شود، مگر اینکه عمر آن فایل بیشتر از gc.logExpiry باشد. پیش‌فرض "1.day" است. برای روش‌های بیشتر تعیین مقدار آن، به gc.pruneExpire مراجعه کنید. gc.packRefs اجرای git pack-refs در یک مخزن، آن را برای نسخه‌های Git قبل از 1.5.1.2 روی پروتکل‌های انتقال ساده (dumb transports) مانند HTTP غیرقابل کلون می‌کند. این متغیر تعیین می‌کند که آیا git gc دستور git pack-refs را اجرا کند یا خیر. می‌تواند روی notbare تنظیم شود تا در تمام مخازن غیرلخت (non-bare) فعال گردد یا می‌تواند روی یک مقدار بولی تنظیم شود. پیش‌فرض true است. gc.cruftPacks ذخیره اشیاء غیرقابل‌دسترس در یک بسته کرافت (cruft pack؛ نگاه کنید به git-repack(1)) به جای اشیاء مجزا (loose objects). پیش‌فرض true است. gc.maxCruftSize محدود کردن اندازه بسته‌های کرافت جدید هنگام بسته‌بندی مجدد. در صورت تعیین هم‌زمان با --max-cruft-size، گزینه خط فرمان اولویت دارد. گزینه --max-cruft-size در git-repack(1) را ببینید. gc.pruneExpire هنگامی که git gc اجرا می‌شود، دستور prune --expire 2.weeks.ago (و در صورت استفاده از بسته‌های کرافت از طریق gc.cruftPacks یا --cruft، دستور repack --cruft --cruft-expiration 2.weeks.ago) را فراخوانی می‌کند. مهلت مقرر (grace period) را با این متغیر پیکربندی تغییر دهید. مقدار "now" می‌تواند برای غیرفعال کردن این مهلت و پاک‌سازی فوری اشیاء غیرقابل‌دسترس استفاده شود، یا "never" می‌تواند برای متوقف کردن کامل پاک‌سازی استفاده گردد. این ویژگی به جلوگیری از خرابی داده‌ها در زمانی که git gc هم‌زمان با فرآیند دیگری در حال نوشتن روی مخزن اجرا می‌شود کمک می‌کند؛ بخش "NOTES" در git-gc(1) را ببینید. gc.worktreePruneExpire هنگامی که git gc اجرا می‌شود، دستور git worktree prune --expire 3.months.ago را فراخوانی می‌کند. این متغیر پیکربندی می‌تواند برای تعیین مهلت مقرر متفاوتی استفاده شود. مقدار "now" ممکن است برای غیرفعال کردن مهلت مقرر و هرس فوری $GIT_DIR/worktrees استفاده شود، یا "never" برای متوقف کردن پاک‌سازی به کار رود. gc.reflogExpire, gc..reflogExpire دستور git reflog expire مدخل‌های رف‌لاگ (reflog) قدیمی‌تر از این زمان را حذف می‌کند؛ پیش‌فرض 90 روز است. مقدار "now" تمام مدخل‌ها را فوراً منقضی می‌کند، و "never" انقضا را به‌طور کامل متوقف می‌سازد. با قرار دادن "" (مثلاً "refs/stash") در وسط، این تنظیم تنها بر مراجعی که با مطابقت دارند اعمال می‌شود. gc.reflogExpireUnreachable, gc..reflogExpireUnreachable دستور git reflog expire مدخل‌های رف‌لاگ قدیمی‌تر از این زمان را که از نوک (tip) فعلی قابل دسترس نیستند حذف می‌کند؛ پیش‌فرض 30 روز است. مقدار "now" تمام مدخل‌ها را فوراً منقضی می‌کند، و "never" انقضا را به‌طور کامل متوقف می‌سازد. با قرار دادن "" (مثلاً "refs/stash") در وسط، تنظیم تنها بر مراجعی که با مطابقت دارند اعمال می‌شود. این نوع مدخل‌ها معمولاً در نتیجه استفاده از git commit --amend یا git rebase ایجاد می‌شوند و کامیت‌های قبل از رخ دادن اصلاح (amend) یا ری‌بیس هستند. از آنجا که این تغییرات بخشی از پروژه فعلی نیستند، بیشتر کاربران تمایل دارند آن‌ها را زودتر منقضی کنند، به همین دلیل پیش‌فرض تهاجمی‌تر از gc.reflogExpire است. gc.recentObjectsHook هنگام بررسی اینکه آیا یک شیء حذف شود یا خیر (چه هنگام تولید یک بسته کرافت یا ذخیره اشیاء غیرقابل‌دسترس به‌صورت مجزا)، از شل برای اجرای دستور(های) مشخص‌شده استفاده می‌کند. خروجی آن‌ها به عنوان شناسه‌های اشیائی تفسیر می‌شود که Git صرف‌نظر از سن واقعی‌شان، آن‌ها را به عنوان "اخیر" (recent) در نظر می‌گیرد. با در نظر گرفتن mtime آن‌ها به عنوان "اکنون"، هر شیء (و نوادگان آن) ذکرشده در خروجی، صرف‌نظر از سن واقعی‌شان نگه‌داشته خواهند شد. خروجی باید دقیقاً شامل یک شناسه هگزادسیمال شیء در هر خط باشد و نه چیز دیگر. اشیائی که در مخزن یافت نشوند نادیده گرفته می‌شوند. چندین قلاب (hook) پشتیبانی می‌شوند، اما همگی باید با موفقیت خارج شوند، در غیر این صورت عملیات (تولید بسته کرافت یا باز کردن بسته‌های اشیاء غیرقابل‌دسترس) متوقف خواهد شد. gc.repackFilter هنگام بسته‌بندی مجدد (repack)، از فیلتر مشخص‌شده برای انتقال اشیاء خاص به یک فایل بسته جداگانه استفاده می‌کند. گزینه --filter= در git-repack(1) را ببینید. gc.repackFilterTo هنگام بسته‌بندی مجدد و استفاده از یک فیلتر (نگاه کنید به gc.repackFilter)، مکان مشخص‌شده برای ایجاد فایل بسته‌ای که شامل اشیاء فیلترشده است استفاده خواهد شد. هشدار: مکان مشخص‌شده باید قابل دسترس باشد، برای مثال با استفاده از مکانیزم Git alternates، در غیر این صورت ممکن است مخزن توسط Git فاسد در نظر گرفته شود چرا که ممکن است نتواند به اشیاء موجود در آن فایل بسته دسترسی پیدا کند. گزینه --filter-to= در git-repack(1) و بخش objects/info/alternates از gitrepository-layout(5) را ببینید. gc.rerereResolved ثبت‌های ادغام با تعارضی که قبلاً حل کرده‌اید، هنگام اجرای git rerere gc برای این تعداد روز نگه‌داری می‌شوند. همچنین می‌توانید از عبارات خواناتر برای انسان مانند "1.month.ago" و غیره استفاده کنید. پیش‌فرض 60 روز است. به git-rerere(1) مراجعه کنید. gc.rerereUnresolved ثبت‌های ادغام با تعارضی که حل نکرده‌اید، هنگام اجرای git rerere gc برای این تعداد روز نگه‌داری می‌شوند. همچنین می‌توانید از عبارات خواناتر برای انسان مانند "1.month.ago" و غیره استفاده کنید. پیش‌فرض 15 روز است. به git-rerere(1) مراجعه کنید. gitcvs.commitMsgAnnotation این رشته را به انتهای هر پیام کامیت پیوست می‌کند. برای غیرفعال کردن این ویژگی، آن را روی رشته خالی تنظیم کنید. پیش‌فرض "via git-CVS emulator" است. gitcvs.enabled مشخص می‌کند که آیا رابط سرور CVS برای این مخزن فعال است یا خیر. به git-cvsserver(1) مراجعه کنید. gitcvs.logFile مسیر فایل لاگی که رابط کاربری سرور CVS در آن خب... موارد مختلف را لاگ می‌کند. به git-cvsserver(1) مراجعه کنید. gitcvs.usecrlfattr اگر true باشد، سرور ویژگی‌های تبدیل پایان خط را برای فایل‌ها جستجو می‌کند تا حالت‌های -k مورد استفاده را تعیین کند. اگر این مشخصه‌ها Git را وادار کنند فایلی را به عنوان متنی در نظر بگیرد، حالت -k خالی رها می‌شود تا کلاینت‌های CVS با آن به عنوان متن رفتار کنند. اگر آن‌ها تبدیل متن را سرکوب کنند، فایل با حالت -kb تنظیم می‌شود که هرگونه دستکاری خطوط جدید را که کلاینت ممکن است در غیر این صورت انجام دهد، سرکوب می‌کند. اگر مشخصه‌ها اجازه تعیین نوع فایل را ندهند، gitcvs.allBinary استفاده می‌شود. به gitattributes(5) مراجعه کنید. gitcvs.allBinary اگر gitcvs.usecrlfattr حالت صحیح -kb را تعیین نکند، این متغیر به کار می‌رود. اگر true باشد، تمام فایل‌های تعیین‌تکلیف‌نشده در حالت -kb به کلاینت ارسال می‌شوند. این کار باعث می‌شود کلاینت با آن‌ها به عنوان فایل‌های باینری رفتار کند، که هرگونه دستکاری خطوط جدید را سرکوب می‌کند. از طرف دیگر، اگر روی "guess" تنظیم شود، محتویات فایل برای تصمیم‌گیری در مورد باینری بودن آن بررسی می‌شود، مشابه core.autocrlf. gitcvs.dbName پایگاه داده‌ای که توسط git-cvsserver برای کش کردن اطلاعات بازبینی برگرفته از مخزن Git استفاده می‌شود. معنی دقیق به درایور پایگاه داده استفاده‌شده بستگی دارد؛ برای SQLite (که درایور پیش‌فرض است) این یک نام فایل است. از جایگزینی متغیرها پشتیبانی می‌کند (برای جزئیات به git-cvsserver(1) مراجعه کنید). نباید شامل نقطه‌ویرگول (;) باشد. پیش‌فرض: %Ggitcvs.%m.sqlite gitcvs.dbDriver درایور Perl DBI استفاده‌شده. در اینجا می‌توانید هر درایور موجود را برای این منظور مشخص کنید، اما ممکن است کار نکند. نرم‌افزار git-cvsserver با DBD::SQLite آزمایش شده، گزارش شده که با DBD::Pg کار می‌کند، و گزارش شده که با DBD::mysql کار نمی‌کند. ویژگی آزمایشی. نباید شامل دو دونقطه (:) باشد. پیش‌فرض: SQLite. به git-cvsserver(1) مراجعه کنید. gitcvs.dbUser, gitcvs.dbPass کاربر و رمز عبور پایگاه داده. تنها در صورتی مفید است که gitcvs.dbDriver تنظیم شده باشد، زیرا SQLite مفهومی از کاربران و/یا رمزهای عبور پایگاه داده ندارد. gitcvs.dbUser از جایگزینی متغیرها پشتیبانی می‌کند (برای جزئیات به git-cvsserver(1) مراجعه کنید). gitcvs.dbTableNamePrefix پیشوند نام جداول پایگاه داده. به نام تمام جداول پایگاه داده مورد استفاده اضافه می‌شود و امکان استفاده از یک پایگاه داده واحد برای چندین مخزن را فراهم می‌کند. از جایگزینی متغیر پشتیبانی می‌کند (برای جزئیات به git-cvsserver(1) مراجعه کنید). هر کاراکتر غیرالفبایی با زیرخط (underscore) جایگزین خواهد شد. تمام متغیرهای gitcvs به جز gitcvs.usecrlfattr و gitcvs.allBinary را می‌توان به عنوان gitcvs.. نیز مشخص کرد (که در آن access_method یکی از مقادیر "ext" و "pserver" است) تا فقط برای روش دسترسی مشخص‌شده اعمال شوند. gitweb.category, gitweb.description, gitweb.owner, gitweb.url برای توضیحات به gitweb(1) مراجعه کنید. gitweb.avatar, gitweb.blame, gitweb.grep, gitweb.highlight, gitweb.patches, gitweb.pickaxe, gitweb.remote_heads, gitweb.showSizes, gitweb.snapshot برای توضیحات به gitweb.conf(5) مراجعه کنید. gpg.program مسیر برنامه‌ای که باید هنگام ایجاد یا اعتبارسنجی امضای PGP به جای "gpg" استفاده شود. این برنامه باید از همان رابط خط فرمان GPG پشتیبانی کند، به این صورت که برای اعتبارسنجی یک امضای مجزا (detached signature)، دستور "gpg --verify $signature - <$file" اجرا می‌شود، و انتظار می‌رود برنامه با خروج با کد 0 امضای معتبر را اعلام کند. برای تولید یک امضای مجزای محافظت‌شده با زره اسکی (ASCII-armored)، ورودی استاندارد "gpg -bsau $key" با محتوایی که باید امضا شود تغذیه می‌گردد و انتظار می‌رود برنامه نتیجه را به خروجی استاندارد خود بفرستد. gpg.format فرمت کلید مورد استفاده هنگام امضا با --gpg-sign را مشخص می‌کند. پیش‌فرض "openpgp" است. سایر مقادیر مجاز عبارتند از "x509" و "ssh". برای فرمت امضا که بر اساس gpg.format انتخاب‌شده متفاوت است، به gitformat-signature(5) مراجعه کنید. gpg..program از این برای سفارشی‌سازی برنامه استفاده‌شده برای فرمت امضایی که انتخاب کرده‌اید استفاده کنید (نگاه کنید به gpg.program و gpg.format). gpg.program هنوز می‌تواند به عنوان یک مترادف قدیمی برای gpg.openpgp.program استفاده شود. مقدار پیش‌فرض برای gpg.x509.program برابر "gpgsm" و برای gpg.ssh.program برابر "ssh-keygen" است. gpg.minTrustLevel حداقل سطح اعتماد را برای اعتبارسنجی امضا مشخص می‌کند. اگر این گزینه تنظیم نشده باشد، اعتبارسنجی امضا برای عملیات‌های ادغام نیازمند کلیدی با حداقل سطح اعتماد marginal است. سایر عملیات‌هایی که اعتبارسنجی امضا را انجام می‌دهند به کلیدی با حداقل اعتماد undefined نیاز دارند. تنظیم این گزینه سطح اعتماد مورد نیاز را برای تمام عملیات‌ها بازنویسی می‌کند. مقادیر پشتیبانی‌شده به ترتیب صعودی اهمیت: • undefined • never • marginal • fully • ultimate gpg.ssh.defaultKeyCommand این دستور زمانی اجرا می‌شود که user.signingkey تنظیم نشده باشد و امضای ssh درخواست شود. در صورت خروج موفق، انتظار می‌رود یک کلید عمومی معتبر ssh که با پیشوند key:: شروع می‌شود در خط اول خروجی آن باشد. این امر امکان استفاده از اسکریپتی را برای جستجوی پویای کلید عمومی صحیح فراهم می‌کند، زمانی که پیکربندی ایستا برای user.signingKey عملی نباشد؛ برای مثال هنگامی که کلیدها یا گواهی‌های SSH به‌طور مکرر تعویض (rotate) می‌شوند یا انتخاب کلید مناسب به عوامل خارجی وابسته است که برای git ناشناخته هستند. gpg.ssh.allowedSignersFile فایلی شامل کلیدهای عمومی ssh که مایل به اعتماد به آن‌ها هستید. فایل شامل یک یا چند خط از هویت‌ها (principals) و به دنبال آن یک کلید عمومی ssh است. به عنوان مثال: user1@example.com,user2@example.com ssh-rsa AAAAX1... برای جزئیات به بخش "ALLOWED SIGNERS" در ssh-keygen(1) مراجعه کنید. هویت (principal) فقط برای شناسایی کلید استفاده می‌شود و هنگام اعتبارسنجی امضا در دسترس است. برخلاف gpg، در SSH مفهومی از سطوح اعتماد وجود ندارد. برای تمایز بین امضاهای معتبر و امضاهای قابل اعتماد، سطح اعتماد اعتبارسنجی امضا در صورتی که کلید عمومی در allowedSignersFile وجود داشته باشد روی fully تنظیم می‌شود. در غیر این صورت سطح اعتماد undefined خواهد بود و دستور git verify-commit/tag ناموفق خواهد شد. این فایل می‌تواند در مکانی خارج از مخزن تنظیم شود و هر توسعه‌دهنده مخزن اعتماد خودش را نگهداری کند. یک سرور مخزن مرکزی می‌تواند این فایل را به‌طور خودکار از کلیدهای ssh دارای دسترسی پوش برای اعتبارسنجی کد تولید کند. در یک محیط شرکتی، این فایل احتمالاً در یک مکان سراسری از طریق اتوماسیونی که کلیدهای ssh توسعه‌دهندگان را مدیریت می‌کند تولید می‌شود. مخزنی که فقط اجازه کامیت‌های امضاشده را می‌دهد می‌تواند فایل را در خود مخزن با استفاده از یک مسیر نسبت به بالاترین سطح درخت کاری ذخیره کند. به این ترتیب فقط کسانی که دارای یک کلید معتبر هستند می‌توانند کلیدهایی را در جاکلیدی اضافه یا تغییر دهند. از OpenSSH 8.8 به بعد، این فایل امکان تعیین طول عمر کلید را با استفاده از گزینه‌های valid-after و valid-before فراهم می‌کند. اگر کلید امضاکننده در زمان ایجاد امضا معتبر بوده باشد، Git امضاها را معتبر علامت‌گذاری می‌کند. این به کاربران امکان می‌دهد کلید امضا را بدون باطل کردن تمام امضاهای قبلی تغییر دهند. استفاده از یک کلید CA مربوط به SSH با گزینه cert-authority (نگاه کنید به بخش "CERTIFICATES" در ssh-keygen(1)) نیز معتبر است. gpg.ssh.revocationFile یک SSH KRL یا فهرستی از کلیدهای عمومی باطل‌شده (بدون پیشوند هویت). برای جزئیات به ssh-keygen(1) مراجعه کنید. اگر یک کلید عمومی در این فایل پیدا شود، همیشه دارای سطح اعتماد "never" در نظر گرفته می‌شود و امضاها نامعتبر نمایش داده خواهند شد. grep.lineNumber اگر روی true تنظیم شود، گزینه -n را به‌طور پیش‌فرض فعال می‌کند. grep.column اگر روی true تنظیم شود، گزینه --column را به‌طور پیش‌فرض فعال می‌کند. grep.patternType رفتار پیش‌فرض تطبیق الگو را تنظیم می‌کند. استفاده از مقدار basic، extended، fixed یا perl به ترتیب گزینه --basic-regexp، --extended-regexp، --fixed-strings یا --perl-regexp را فعال می‌کند، در حالی که مقدار default از گزینه grep.extendedRegexp برای انتخاب بین basic و extended استفاده خواهد کرد. grep.extendedRegexp اگر روی true تنظیم شود، گزینه --extended-regexp را به‌طور پیش‌فرض فعال می‌کند. این گزینه زمانی که گزینه grep.patternType روی مقداری غیر از default تنظیم شده باشد، نادیده گرفته می‌شود. grep.threads تعداد نخ‌های پردازشی (worker threads) دستور grep که باید استفاده شوند. اگر تنظیم نشود (یا روی 0 تنظیم شود)، Git به اندازه تعداد هسته‌های منطقی موجود از نخ‌ها استفاده خواهد کرد. grep.fullName اگر روی true تنظیم شود، گزینه --full-name را به‌طور پیش‌فرض فعال می‌کند. grep.fallbackToNoIndex اگر روی true تنظیم شود، در صورتی که git grep خارج از یک مخزن git اجرا گردد، به git grep --no-index رجوع خواهد کرد. پیش‌فرض false است. gui.commitMsgWidth عرض پنجره پیام کامیت را در git-gui(1) تعیین می‌کند. پیش‌فرض "75" است. gui.diffContext مشخص می‌کند که چه تعداد خط بافت (context lines) باید در فراخوانی‌های diff ایجادشده توسط git-gui(1) استفاده شود. پیش‌فرض "5" است. gui.displayUntracked مشخص می‌کند که آیا git-gui(1) فایل‌های ردیابی‌نشده (untracked) را در فهرست فایل‌ها نمایش دهد یا خیر. پیش‌فرض "true" است. gui.encoding رمزگذاری کاراکتر پیش‌فرض را برای نمایش محتوای فایل در git-gui(1) و gitk(1) مشخص می‌کند. این مقدار می‌تواند با تنظیم صفت encoding برای فایل‌های مربوطه بازنویسی شود (نگاه کنید به gitattributes(5)). اگر این گزینه تنظیم نشود، ابزارها به کدگذاری محلی (locale) بازمی‌گردند. gui.matchTrackingBranch مشخص می‌کند که آیا شاخه‌های جدید ایجادشده با git-gui(1) به‌طور پیش‌فرض باید شاخه‌های ریموت با نام‌های مطابقت‌دار را ردیابی کنند یا خیر. پیش‌فرض: "false". gui.newBranchTemplate به عنوان نام پیشنهادی هنگام ایجاد شاخه‌های جدید با استفاده از git-gui(1) استفاده می‌شود. gui.pruneDuringFetch مقدار "true" اگر git-gui(1) باید هنگام انجام واکشی (fetch)، شاخه‌های ردیابی ریموت را هرس (prune) کند. مقدار پیش‌فرض "false" است. gui.trustmtime مشخص می‌کند که آیا git-gui(1) باید به برچسب زمانی تغییر فایل (modification timestamp) اعتماد کند یا خیر. به‌طور پیش‌فرض به برچسب‌های زمانی اعتماد نمی‌شود. gui.spellingDictionary لغت‌نامه مورد استفاده برای غلط‌گیری املایی پیام‌های کامیت در git- gui(1) را مشخص می‌کند. در صورت تنظیم روی "none"، بررسی املا خاموش می‌شود. gui.fastCopyBlame اگر true باشد، git gui blame برای تشخیص مکان اصلی به جای -C -C از -C استفاده می‌کند. این کار در مخازن بسیار بزرگ، عمل blame را به بهای تشخیص کمتر رونوشت‌ها (copy detection)، به‌طور چشمگیری سریع‌تر می‌کند. gui.copyBlameThreshold آستانه مورد استفاده در تشخیص مکان اصلی در git gui blame را که بر حسب کاراکترهای حرفی‌عددی اندازه‌گیری می‌شود، مشخص می‌کند. برای اطلاعات بیشتر در مورد تشخیص رونوشت به راهنمای git-blame(1) مراجعه کنید. gui.blamehistoryctx شعاع بافت تاریخچه را بر حسب روز برای نمایش در gitk(1) برای کامیت انتخاب‌شده مشخص می‌کند، زمانی که آیتم منوی Show History Context از git gui blame فراخوانی شود. اگر این متغیر روی صفر تنظیم شود، کل تاریخچه نشان داده می‌شود. gui.GCWarning مشخص می‌کند که آیا git-gui(1) هنگامی که git تعداد زیادی شیء مجزا را در مخزن شناسایی می‌کند، باید درخواست جمع‌آوری زباله را نمایش دهد یا خیر. مقدار پیش‌فرض "true" است. guitool..cmd خط فرمان شل را برای اجرا در هنگام فراخوانی مورد مربوطه از منوی Tools در git-gui(1) مشخص می‌کند. این گزینه برای هر ابزاری الزامی است. دستور از ریشه پوشه کاری اجرا می‌شود و در محیط، نام ابزار را به عنوان GIT_GUITOOL، نام فایل انتخاب‌شده فعلی را به عنوان FILENAME، و نام شاخه فعلی را به عنوان CUR_BRANCH دریافت می‌کند (اگر هد جداشده [detached] باشد، CUR_BRANCH خالی است). guitool..needsFile ابزار را تنها در صورتی اجرا می‌کند که یک تفاوت (diff) در رابط کاربری انتخاب شده باشد. این تضمین می‌کند که FILENAME خالی نباشد. guitool..noConsole دستور را به‌طور بی‌صدا و بدون ایجاد پنجره‌ای برای نمایش خروجی آن اجرا می‌کند. guitool..noRescan پس از اتمام اجرای ابزار، پوشه کاری را برای تغییرات دوباره پویش (rescan) نمی‌کند. guitool..confirm قبل از اجرای واقعی ابزار، یک کادر گفتگوی تأیید را نمایش می‌دهد. guitool..argPrompt یک آرگومان رشته‌ای از کاربر درخواست می‌کند و آن را از طریق متغیر محیطی ARGS به ابزار ارسال می‌نماید. از آنجا که درخواست آرگومان متضمن تأیید است، در صورت فعال بودن این گزینه، گزینه confirm هیچ اثری ندارد. اگر گزینه روی true، yes یا 1 تنظیم شده باشد، کادر گفتگو از یک اعلان عمومی توکار استفاده می‌کند؛ در غیر این صورت مقدار دقیق متغیر به کار می‌رود. guitool..revPrompt یک بازنگری (revision) معتبر واحد را از کاربر درخواست می‌کند و متغیر محیطی REVISION را تنظیم می‌نماید. از جنبه‌های دیگر این گزینه شبیه به argPrompt است و می‌تواند همراه با آن استفاده شود. guitool..revUnmerged تنها شاخه‌های ادغام‌نشده را در زیرگفتگوی revPrompt نشان می‌دهد. این برای ابزارهای مشابه merge یا rebase مفید است، اما برای مواردی مانند checkout یا reset کاربرد ندارد. guitool..title عنوان مورد استفاده برای کادر گفتگوی ورودی را مشخص می‌کند. پیش‌فرض نام ابزار است. guitool..prompt رشته اعلان عمومی را برای نمایش در بالای کادر گفتگو، قبل از بخش‌های مربوط به argPrompt و revPrompt مشخص می‌کند. مقدار پیش‌فرض شامل خود دستور واقعی است. help.browser مرورگری را مشخص می‌کند که برای نمایش راهنما در قالب web استفاده خواهد شد. به git-help(1) مراجعه کنید. help.format قالب پیش‌فرض راهنمای استفاده‌شده توسط git-help(1) را بازنویسی می‌کند. مقادیر man، info، web و html پشتیبانی می‌شوند. man پیش‌فرض است. web و html یکسان هستند. help.autoCorrect اگر git غلط‌های املایی را تشخیص دهد و بتواند دقیقاً یک دستور معتبر شبیه به خطا را شناسایی کند، سعی می‌کند دستور صحیح را پیشنهاد دهد یا حتی پیشنهاد را به‌طور خودکار اجرا نماید. مقادیر ممکن برای پیکربندی عبارتند از: • 0، "false"، "off"، "no"، "show": نمایش دستور پیشنهادی (پیش‌فرض). • 1، "true"، "on"، "yes"، "immediate": اجرای فوری دستور پیشنهادی. • عدد مثبت > 1: اجرای دستور پیشنهادی پس از دهم‌ثانیه‌های مشخص‌شده (0.1 ثانیه). • "never": هیچ دستور پیشنهادی را اجرا یا نمایش ندهد. • "prompt": پیشنهاد را نشان داده و برای اجرای دستور تأییدیه بخواهد. help.htmlPath مسیری را مشخص می‌کند که مستندات HTML در آن قرار دارند. مسیرهای سیستم‌فایل و نشانی‌های وب (URLs) پشتیبانی می‌شوند. هنگامی که راهنما در قالب web نمایش داده می‌شود، صفحات HTML با این مسیر پیشوند خواهند شد. پیش‌فرض این مسیر مستندات مربوط به نصب Git شما است. hook..command دستوری که برای hook. باید اجرا شود. نامی یکتاست که این قلاب را شناسایی می‌کند. رویدادهای قلابی که دستور را فراخوانی می‌کنند با hook..event پیکربندی می‌شوند. این مقدار می‌تواند یک مسیر اجرایی یا یک تک‌خطی شل (shell oneliner) باشد. اگر بیش از یک مقدار برای همان مشخص شود، تنها آخرین مقدار تجزیه‌شده استفاده می‌شود. به git-hook(1) مراجعه کنید. hook..event رویدادهای قلاب که hook. را فعال می‌کنند. این مقدار نام یک رویداد قلاب مانند "pre-commit" یا "update" است. (برای فهرست کامل رویدادهای قلاب به githooks(5) مراجعه کنید.) در رویداد مشخص‌شده، دستور مرتبط hook..command اجرا می‌شود. این یک کلید چندمقداری است. برای اجرای hook. روی چندین رویداد، کلید را بیش از یک بار مشخص کنید. یک مقدار خالی فهرست رویدادها را بازنشانی می‌کند و رویدادهای تعریف‌شده قبلی را برای hook. پاک می‌نماید. به git-hook(1) مراجعه کنید. نام نباید مشابه نام یک رویداد قلاب شناخته‌شده باشد (برای مثال از hook.pre-commit.event استفاده نکنید). استفاده از نام یک رویداد شناخته‌شده به عنوان friendly-name یک خطای مهلک است زیرا باعث ایجاد ابهام با hook..enabled و hook..jobs می‌شود. برای نام‌های رویداد ناشناخته، زمانی که با مقدار رویداد مطابقت داشته باشد یک هشدار صادر می‌شود. hook..enabled مشخص می‌کند که آیا قلاب hook. فعال است یا خیر. پیش‌فرض true است. برای غیرفعال کردن قلاب بدون حذف پیکربندی آن، روی false تنظیم کنید. این به‌ویژه زمانی مفید است که قلاب در یک فایل پیکربندی سیستمی یا سراسری تعریف شده باشد و نیاز باشد برای یک مخزن خاص غیرفعال گردد. به git-hook(1) مراجعه کنید. hook..parallel مشخص می‌کند که آیا قلاب hook. ممکن است به صورت موازی با سایر قلاب‌ها برای همان رویداد اجرا شود یا خیر. پیش‌فرض false است. تنها زمانی روی true تنظیم کنید که اسکریپت قلاب برای اجرای هم‌روند با سایر قلاب‌ها برای همان رویداد ایمن باشد. اگر هر قلابی برای یک رویداد این گزینه را روی true تنظیم نکرده باشد، تمام قلاب‌ها برای آن رویداد صرف‌نظر از hook.jobs به صورت متوالی اجرا می‌شوند. فقط قلاب‌های پیکربندی‌شده (نام‌گذاری‌شده) نیاز به اعلام این مورد دارند. قلاب‌های سنتی موجود در پوشه hooks نیازی به این کار ندارند و زمانی که تعداد کارهای مؤثر بزرگ‌تر از 1 باشد به صورت موازی اجرا می‌شوند. به git-hook(1) مراجعه کنید. hook..enabled کلید برای فعال یا غیرفعال کردن تمام قلاب‌ها برای رویداد قلاب است. هنگامی که روی false تنظیم شود، هیچ قلابی برای آن رویداد اجرا نمی‌شود، صرف‌نظر از هرگونه تنظیمات اختصاصی hook..enabled برای هر قلاب. مقدار پیش‌فرض true است. رجوع کنید به git-hook(1). نکته در مورد نام‌گذاری: باید نام رویداد باشد (مثلاً pre-commit)، نه نام دوستانه (friendly-name) قلاب. از آنجا که استفاده از یک نام رویداد شناخته‌شده به عنوان friendly-name مجاز نیست (ببینید hook..event در بالا)، هیچ ابهامی بین تنظیمات .enabled در سطح رویداد و در سطح هر قلاب برای رویدادهای شناخته‌شده وجود ندارد. برای رویدادهای ناشناخته، اگر یک friendly-name برخلاف هشدار با نام رویداد مطابقت داشته باشد، .enabled تنها به عنوان تنظیم اختصاصی هر قلاب در نظر گرفته می‌شود. hook..jobs مشخص می‌کند چه تعداد قلاب می‌توانند به طور هم‌زمان برای رویداد قلاب اجرا شوند (مثلاً hook.post-receive.jobs = 4). مقدار hook.jobs را برای این رویداد خاص بازنویسی می‌کند. همان محدودیت‌های موازی‌سازی اعمال می‌شوند: این تنظیم هیچ تاثیری ندارد مگر آنکه تمام قلاب‌های پیکربندی‌شده برای آن رویداد دارای hook..parallel تنظیم‌شده روی true باشند. مقدار را روی -1 تنظیم کنید تا از تعداد هسته‌های موجود CPU استفاده شود. باید یک عدد صحیح مثبت یا -1 باشد؛ مقدار صفر همراه با یک هشدار رد می‌شود. رجوع کنید به git-hook(1). نکته در مورد نام‌گذاری: هرچند این کلید شبیه به hook..* (یک تنظیم اختصاصی هر قلاب) است، باید نام رویداد باشد، نه نام دوستانه قلاب. جزء کلید به صورت تحت‌اللفظی ذخیره می‌شود و در زمان اجرا بر اساس نام رویداد و بدون هیچ ترجمه‌ای بین این دو فضای نام جستجو می‌شود. کلیدی مانند hook.my-hook.jobs تحت "my-hook" ذخیره می‌شود اما جستجو در زمان اجرا از نام رویداد (مثلاً "post-receive") استفاده می‌کند، بنابراین hook.my-hook.jobs حتی در صورت ثبت بودن my-hook برای آن رویداد، بدون هشدار نادیده گرفته می‌شود. هنگام تنظیم hook..jobs از hook.post-receive.jobs یا هر نام رویداد معتبر دیگری استفاده کنید. hook.jobs مشخص می‌کند چه تعداد قلاب می‌توانند در طول اجرای موازی قلاب‌ها به طور هم‌زمان اجرا شوند. در صورت عدم تعیین، مقدار پیش‌فرض ۱ (اجرای ترتیبی) است. برای استفاده از تعداد هسته‌های موجود CPU، آن را روی -1 تنظیم کنید. می‌تواند بر مبنای هر رویداد با hook..jobs بازنویسی شود. برخی قلاب‌ها صرف‌نظر از این تنظیم همیشه به صورت ترتیبی اجرا می‌شوند، زیرا روی داده‌های مشترک عمل می‌کنند و نمی‌توانند با اطمینان موازی شوند: applypatch-msg, prepare-commit-msg, commit-msg یک فایل پیام ثبت را دریافت می‌کنند و ممکن است در همان جا آن را بازنویسی کنند. pre-commit, post-checkout, push-to-checkout, post-commit به درخت کاری، ایندکس یا وضعیت مخزن دسترسی پیدا می‌کنند. این تنظیم هیچ اثری ندارد مگر آنکه تمام قلاب‌های پیکربندی‌شده برای آن رویداد، hook..parallel را روی true تنظیم کرده باشند. برای قلاب‌های pre-push که به طور عادی stdout و stderr را مجزا نگه می‌دارند، تنظیم این مقدار به بیش از ۱ (یا ارسال -j) باعث ادغام خروجی استاندارد در خطای استاندارد می‌شود تا تفکیک موازی خروجی‌ها به درستی صورت گیرد. http.proxy پروکسی HTTP را بازنویسی می‌کند، که معمولاً با استفاده از متغیرهای محیطی http_proxy, https_proxy, و all_proxy پیکربندی می‌شود (رجوع کنید به curl(1)). علاوه بر نحو قابل فهم برای curl، امکان تعیین یک رشته پروکسی با نام کاربری اما بدون گذرواژه وجود دارد که در این حالت git تلاش می‌کند به همان شیوه‌ای که برای سایر اعتبارنامه‌ها عمل می‌کند، گذرواژه‌ای به دست آورد. برای اطلاعات بیشتر gitcredentials(7) را ببینید. بنابراین ساختار نگارش به صورت [protocol://][user[:password]@]proxyhost[:port][/path] است. این مقدار می‌تواند برای هر ریموت بازنویسی شود؛ ببینید remote..proxy هر پروکسی، صرف‌نظر از نحوه پیکربندی، باید کاملاً شفاف باشد و نباید به هیچ وجه درخواست یا پاسخ را تغییر دهد، تبدیل کند یا بافر نماید. پروکسی‌هایی که کاملاً شفاف نیستند، شناخته شده است که موجب انواع مختلفی از خرابی‌ها در کار با Git می‌شوند. http.proxyAuthMethod روشی را تعیین می‌کند که با آن احراز هویت در برابر پروکسی HTTP انجام شود. این تنها در صورتی اعمال می‌شود که رشته پروکسی پیکربندی‌شده حاوی بخش نام کاربری باشد (یعنی به فرم user@host یا user@host:port باشد). این می‌تواند برای هر ریموت بازنویسی شود؛ ببینید remote..proxyAuthMethod. هر دو می‌توانند توسط متغیر محیطی GIT_HTTP_PROXY_AUTHMETHOD بازنویسی شوند. مقادیر ممکن عبارتند از: • anyauth - انتخاب خودکار یک روش احراز هویت مناسب. فرض بر این است که پروکسی به یک درخواست احراز هویت‌نشده با کد وضعیت 407 و یک یا چند سرآیند Proxy-authenticate با روش‌های احراز هویت پشتیبانی‌شده پاسخ می‌دهد. این مقدار پیش‌فرض است. • basic - احراز هویت HTTP Basic • digest - احراز هویت HTTP Digest؛ این روش از ارسال گذرواژه به صورت متن آشکار به پروکسی جلوگیری می‌کند • negotiate - احراز هویت GSS-Negotiate (مقایسه کنید با گزینه --negotiate در curl(1)) • ntlm - احراز هویت NTLM (مقایسه کنید با گزینه --ntlm در curl(1)) http.proxySSLCert مسیر فایلی که یک گواهی کلاینت را برای احراز هویت در برابر یک پروکسی HTTPS ذخیره می‌کند. می‌تواند توسط متغیر محیطی GIT_PROXY_SSL_CERT بازنویسی شود. http.proxySSLKey مسیر فایلی که یک کلید خصوصی را برای احراز هویت در برابر یک پروکسی HTTPS ذخیره می‌کند. می‌تواند توسط متغیر محیطی GIT_PROXY_SSL_KEY بازنویسی شود. http.proxySSLCertPasswordProtected درخواست گذرواژه Git برای گواهی SSL پروکسی را فعال می‌کند. در غیر این صورت، اگر گواهی یا کلید خصوصی رمزنگاری شده باشد، OpenSSL ممکن است مکرراً از کاربر درخواست گذرواژه کند. می‌تواند توسط متغیر محیطی GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED بازنویسی شود. http.proxySSLCAInfo مسیر فایل حاوی بسته گواهی که باید هنگام استفاده از پروکسی HTTPS برای اعتبارسنجی پروکسی استفاده شود. می‌تواند توسط متغیر محیطی GIT_PROXY_SSL_CAINFO بازنویسی شود. http.emptyAuth تلاش برای احراز هویت بدون درخواست نام کاربری یا گذرواژه. این می‌تواند برای تلاش جهت احراز هویت GSS-Negotiate بدون تعیین نام کاربری در URL استفاده شود، زیرا libcurl معمولاً برای احراز هویت به نام کاربری نیاز دارد. مقادیر ممکن عبارتند از: • auto (پیش‌فرض) - ارسال اطلاعات اعتبارنامه خالی تنها در صورتی که پاسخ 401 سرور سازوکار احراز هویتی را اعلام کند که به آنها نیاز دارد (مانند GSS-Negotiate)؛ در غیر این صورت به درخواست از طریق دستیار اعتبارنامه رجوع می‌کند. • true - همیشه در همان اولین درخواست، پیش از دریافت هرگونه پاسخ 401 از سرور، اعتبارنامه‌های خالی ارسال شود. • false - هرگز اعتبارنامه‌های خالی ارسال نشود. سازوکارهایی که به اعتبارنامه‌های خالی یا یک نام کاربری صریح نیاز دارند، مانند GSS-Negotiate، کار نخواهند کرد. http.proactiveAuth تلاش برای احراز هویت بدون انجام تلاش اولیه بدون احراز هویت و دریافت پاسخ 401. این می‌تواند برای اطمینان از احراز هویت تمام درخواست‌ها استفاده شود. اگر http.emptyAuth روی true تنظیم شده باشد، این مقدار تاثیری ندارد. اگر دستیار اعتبارنامه مورد استفاده، یک طرح احراز هویت را مشخص کند (یعنی از طریق فیلد authtype)، آن مقدار استفاده خواهد شد؛ اگر نام کاربری و گذرواژه بدون طرح مشخصی ارائه شوند، احراز هویت Basic استفاده می‌شود. مقدار این گزینه، طرح درخواستی از دستیار را تعیین می‌کند. مقادیر ممکن عبارتند از: • basic - درخواست احراز هویت Basic از دستیار. • auto - اجازه دادن به دستیار برای انتخاب طرح مناسب. • none - غیرفعال کردن احراز هویت پیش‌دستانه. توجه داشته باشید که با این پیکربندی همیشه باید از TLS استفاده شود، زیرا در غیر این صورت، در صورت انتخاب احراز هویت Basic، اعتبارنامه‌های متنی ساده ممکن است به راحتی و تصادفاً افشا شوند. http.delegation تفویض اعتبارنامه GSSAPI را کنترل می‌کند. تفویض به طور پیش‌فرض در libcurl از نسخه 7.21.7 غیرفعال است. این پارامتر را تنظیم کنید تا به سرور اعلام شود در مورد اعتبارنامه‌های کاربر مجاز به تفویض چه چیزی است. همراه با GSS/kerberos استفاده می‌شود. مقادیر ممکن عبارتند از: • none - هیچ تفویضی مجاز نباشد. • policy - تفویض تنها و تنها در صورتی انجام شود که پرچم OK-AS-DELEGATE در بلیت سرویس Kerberos تنظیم شده باشد، که به خط‌مشی قلمرو مربوط می‌شود. • always - سرور بدون قید و شرط مجاز به تفویض باشد. http.extraHeader ارسال یک سرآیند HTTP اضافی هنگام برقراری ارتباط با یک سرور. اگر بیش از یک مدخل از این دست وجود داشته باشد، همه آن‌ها به عنوان سرآیندهای اضافی افزوده می‌شوند. برای امکان بازنویسی تنظیمات به ارث رسیده از پیکربندی سیستم، یک مقدار خالی سرآیندهای اضافی را به فهرست خالی بازنشانی خواهد کرد. http.cookieFile مسیر فایلی حاوی خطوط کوکی قبلاً ذخیره‌شده، که در صورت تطابق با سرور باید در نشست http گیت استفاده شوند. قالب فایل برای خواندن کوکی‌ها باید سرآیندهای ساده HTTP یا قالب فایل کوکی Netscape/Mozilla باشد (ببینید curl(1)). آن را روی یک رشته خالی تنظیم کنید تا فقط کوکی‌های جدید از سرور پذیرفته شوند و در درخواست‌های متوالی در همان اتصال بازگردانده شوند. توجه داشته باشید که فایل مشخص‌شده با http.cookieFile تنها به عنوان ورودی استفاده می‌شود مگر اینکه http.saveCookies تنظیم شده باشد. http.saveCookies در صورت تنظیم، کوکی‌های دریافت‌شده در طول درخواست‌ها را در فایل مشخص‌شده توسط http.cookieFile ذخیره می‌کند. اگر http.cookieFile تنظیم نشده باشد یا روی یک رشته خالی تنظیم شده باشد، هیچ اثری ندارد. http.version هنگام برقراری ارتباط با یک سرور از نسخه پروتکل مشخص‌شده HTTP استفاده می‌کند، در صورتی که بخواهید بر مقدار پیش‌فرض پافشاری کنید. نسخه موجود و پیش‌فرض به libcurl بستگی دارد. در حال حاضر مقادیر ممکن برای این گزینه عبارتند از: • HTTP/2 • HTTP/1.1 http.curloptResolve اطلاعات تفکیک نام میزبان که هنگام ارسال درخواست‌های HTTP ابتدا توسط libcurl استفاده خواهد شد. این اطلاعات باید در یکی از قالب‌های زیر باشد: • [+]HOST:PORT:ADDRESS[,ADDRESS] • -HOST:PORT قالب اول تمام درخواست‌ها به HOST:PORT داده‌شده را به ADDRESS(های) ارائه‌شده هدایت می‌کند. قالب دوم تمام مقادیر پیکربندی قبلی را برای آن ترکیب HOST:PORT پاک می‌کند. برای امکان بازنویسی آسان تمام تنظیمات به ارث رسیده از پیکربندی سیستم، یک مقدار خالی تمام اطلاعات تفکیک را به فهرست خالی بازنشانی می‌کند. http.sslVersion نسخه SSL برای استفاده هنگام مذاکره بر سر اتصال SSL، در صورتی که بخواهید بر مقدار پیش‌فرض پافشاری کنید. نسخه موجود و پیش‌فرض به این بستگی دارد که آیا libcurl در برابر NSS ساخته شده است یا OpenSSL و همچنین به پیکربندی خاص کتابخانه رمزنوشتاری مورد استفاده وابسته است. به صورت داخلی این متغیر گزینه CURLOPT_SSL_VERSION را تنظیم می‌کند؛ برای جزئیات بیشتر در مورد قالب این گزینه و نسخه ssl پشتیبانی‌شده به مستندات libcurl مراجعه کنید. در حال حاضر مقادیر ممکن برای این گزینه عبارتند از: • sslv2 • sslv3 • tlsv1 • tlsv1.0 • tlsv1.1 • tlsv1.2 • tlsv1.3 می‌تواند توسط متغیر محیطی GIT_SSL_VERSION بازنویسی شود. برای اجبار git به استفاده از نسخه پیش‌فرض ssl در libcurl و نادیده گرفتن هر گزینه صریح http.sslversion، متغیر GIT_SSL_VERSION را روی یک رشته خالی تنظیم کنید. http.sslCipherList فهرستی از الگوریتم‌های رمزنگاری (ciphers) SSL برای استفاده هنگام مذاکره بر سر یک اتصال SSL. الگوریتم‌های رمزنگاری در دسترس به این بستگی دارند که libcurl در برابر NSS ساخته شده است یا OpenSSL و همچنین به پیکربندی خاص کتابخانه رمزنوشتاری مورد استفاده وابسته است. به صورت داخلی این متغیر گزینه CURLOPT_SSL_CIPHER_LIST را تنظیم می‌کند؛ برای جزئیات بیشتر درباره قالب این فهرست به مستندات libcurl مراجعه کنید. می‌تواند توسط متغیر محیطی GIT_SSL_CIPHER_LIST بازنویسی شود. برای اجبار git به استفاده از فهرست پیش‌فرض الگوریتم‌های رمزنگاری libcurl و نادیده گرفتن هر گزینه صریح http.sslCipherList، متغیر GIT_SSL_CIPHER_LIST را روی یک رشته خالی تنظیم کنید. http.sslVerify آیا گواهی SSL هنگام واکشی یا ارسال روی HTTPS اعتبارسنجی شود یا خیر. پیش‌فرض true است. می‌تواند توسط متغیر محیطی GIT_SSL_NO_VERIFY بازنویسی شود. http.sslCert فایل حاوی گواهی SSL هنگام واکشی یا ارسال روی HTTPS. می‌تواند توسط متغیر محیطی GIT_SSL_CERT بازنویسی شود. http.sslKey فایل حاوی کلید خصوصی SSL هنگام واکشی یا ارسال روی HTTPS. می‌تواند توسط متغیر محیطی GIT_SSL_KEY بازنویسی شود. http.sslCertPasswordProtected درخواست دریافت گذرواژه Git برای گواهی SSL را فعال می‌کند. در غیر این صورت، اگر گواهی یا کلید خصوصی رمزنگاری شده باشد، OpenSSL ممکن است مکرراً از کاربر درخواست گذرواژه کند. می‌تواند توسط متغیر محیطی GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED بازنویسی شود. http.sslCAInfo فایل حاوی گواهی‌ها برای اعتبارسنجی طرف مقابل (peer) هنگام واکشی یا ارسال روی HTTPS. می‌تواند توسط متغیر محیطی GIT_SSL_CAINFO بازنویسی شود. http.sslCAPath مسیر حاوی فایل‌های گواهی‌های CA برای اعتبارسنجی طرف مقابل هنگام واکشی یا ارسال روی HTTPS. می‌تواند توسط متغیر محیطی GIT_SSL_CAPATH بازنویسی شود. http.sslBackend نام بک‌اند SSL برای استفاده (مثلاً "openssl" یا "schannel"). اگر cURL فاقد پشتیبانی برای انتخاب بک‌اند SSL در زمان اجرا باشد، این گزینه نادیده گرفته می‌شود. http.sslCertType نوع گواهی کلاینت مورد استفاده هنگام واکشی یا ارسال روی HTTPS. مقادیر "PEM" و "DER" هنگام استفاده از بک‌اندهای openssl یا gnutls پشتیبانی می‌شوند. مقدار "P12" روی "openssl"، "schannel"، "securetransport" و gnutls نسخه 8.11+ پشتیبانی می‌شود. همچنین رجوع کنید به CURLOPT_SSLCERTTYPE در libcurl. می‌تواند توسط متغیر محیطی GIT_SSL_CERT_TYPE بازنویسی شود. http.sslKeyType نوع کلید خصوصی کلاینت مورد استفاده هنگام واکشی یا ارسال روی HTTPS (مثلاً "PEM"، "DER" یا "ENG"). تنها هنگام استفاده از بک‌اند "openssl" قابل اعمال است. مقدار "DER" با openssl پشتیبانی نمی‌شود. به ویژه هنگام تنظیم روی "ENG" برای احراز هویت با توکن‌های PKCS#11 به همراه یک URL مربوط به PKCS#11 در گزینه sslCert بسیار مفید است. همچنین رجوع کنید به CURLOPT_SSLKEYTYPE در libcurl. می‌تواند توسط متغیر محیطی GIT_SSL_KEY_TYPE بازنویسی شود. http.schannelCheckRevoke برای اجبار یا غیرفعال کردن بررسی ابطال گواهی در cURL هنگامی که http.sslBackend روی "schannel" تنظیم شده است، استفاده می‌شود. در صورت عدم تنظیم، پیش‌فرض true است. غیرفعال کردن این گزینه تنها در صورتی ضروری است که Git مداوماً با خطا مواجه شود و پیام خطا مربوط به بررسی وضعیت ابطال یک گواهی باشد. اگر cURL فاقد پشتیبانی برای تنظیم گزینه مربوطه SSL در زمان اجرا باشد، این گزینه نادیده گرفته می‌شود. http.schannelUseSSLCAInfo از نسخه cURL v7.60.0 به بعد، بک‌اند Secure Channel می‌تواند از بسته گواهی ارائه‌شده از طریق http.sslCAInfo استفاده کند، اما این کار انبار گواهی ویندوز (Windows Certificate Store) را بازنویسی می‌کند. از آنجا که این رفتار به طور پیش‌فرض مطلوب نیست، Git به cURL می‌گوید هنگامی که بک‌اند schannel از طریق http.sslBackend پیکربندی شده است، به طور پیش‌فرض از آن بسته استفاده نکند، مگر اینکه http.schannelUseSSLCAInfo این رفتار را بازنویسی کند. http.pinnedPubkey کلید عمومی سرویس https. این می‌تواند نام فایل یک فایل کلید عمومی با کدگذاری PEM یا DER باشد، یا رشته‌ای که با sha256// آغاز شده و پس از آن هش sha256 کدگذاری‌شده با base64 از کلید عمومی قرار دارد. همچنین رجوع کنید به CURLOPT_PINNEDPUBLICKEY در libcurl. اگر این گزینه تنظیم شود اما توسط cURL پشتیبانی نشود، git با یک خطا خارج خواهد شد. http.sslTry تلاش برای استفاده از AUTH SSL/TLS و انتقال داده‌های رمزشده هنگام اتصال از طریق پروتکل معمولی FTP. این ممکن است در صورتی لازم باشد که سرور FTP به دلایل امنیتی به آن نیاز داشته باشد یا شما بخواهید هر زمان که سرور FTP ریموت از آن پشتیبانی می‌کند به صورت امن متصل شوید. مقدار پیش‌فرض false است زیرا ممکن است در سرورهایی با پیکربندی نادرست خطاهای اعتبارسنجی گواهی ایجاد کند. http.maxRequests چه تعداد درخواست HTTP به صورت موازی اجرا شوند. می‌تواند توسط متغیر محیطی GIT_HTTP_MAX_REQUESTS بازنویسی شود. پیش‌فرض 5 است. http.minSessions تعداد نشست‌های curl (شمارش‌شده در اسلات‌ها) که باید در طول درخواست‌ها باز نگه داشته شوند. آن‌ها تا زمان فراخوانی http_cleanup() با curl_easy_cleanup() پایان نخواهند یافت. اگر USE_CURL_MULTI تعریف نشده باشد، این مقدار حداکثر به ۱ محدود می‌شود. پیش‌فرض ۱ است. http.postBuffer حداکثر اندازه بر حسب بایت برای بافر مورد استفاده توسط انتقالات هوشمند HTTP هنگام ارسال داده به سیستم ریموت با POST. برای درخواست‌های بزرگتر از این اندازه بافر، از HTTP/1.1 و Transfer-Encoding: chunked استفاده می‌شود تا از ایجاد یک فایل بسته بسیار بزرگ به صورت محلی جلوگیری شود. مقدار پیش‌فرض 1 MiB است که برای اکثر درخواست‌ها کافی می‌باشد. توجه داشته باشید که افزایش این حد تنها برای غیرفعال کردن کدگذاری انتقال تکه‌ای موثر است و بنابراین فقط باید در جایی استفاده شود که سرور ریموت یا پروکسی تنها از HTTP/1.0 پشتیبانی می‌کند یا با استاندارد HTTP سازگار نیست. افزایش این مقدار به طور کلی راه‌حل موثری برای اکثر مشکلات push نیست، اما می‌تواند مصرف حافظه را به شدت افزایش دهد زیرا کل بافر حتی برای ارسال‌های کوچک نیز تخصیص داده می‌شود. http.lowSpeedLimit, http.lowSpeedTime اگر سرعت انتقال HTTP بر حسب بایت در ثانیه، کمتر از http.lowSpeedLimit برای مدت زمانی بیش از http.lowSpeedTime ثانیه باشد، انتقال متوقف می‌شود. می‌تواند توسط متغیرهای محیطی GIT_HTTP_LOW_SPEED_LIMIT و GIT_HTTP_LOW_SPEED_TIME بازنویسی شود. http.keepAliveIdle مدت زمان انتظار بر حسب ثانیه را روی یک اتصال بیکار پیش از ارسال کاوشگرهای TCP keepalive (در صورت پشتیبانی سیستم‌عامل) مشخص می‌کند. اگر تنظیم نشده باشد، مقدار پیش‌فرض curl استفاده می‌شود. می‌تواند توسط متغیر محیطی GIT_HTTP_KEEPALIVE_IDLE بازنویسی شود. http.keepAliveInterval مدت زمان انتظار بر حسب ثانیه میان کاوشگرهای TCP keepalive را (در صورت پشتیبانی سیستم‌عامل) مشخص می‌کند. اگر تنظیم نشده باشد، مقدار پیش‌فرض curl استفاده می‌شود. می‌تواند توسط متغیر محیطی GIT_HTTP_KEEPALIVE_INTERVAL بازنویسی شود. http.keepAliveCount مشخص می‌کند چه تعداد کاوشگر TCP keepalive پیش از صرف‌نظر کردن و قطع اتصال (در صورت پشتیبانی سیستم‌عامل) ارسال شود. اگر تنظیم نشده باشد، مقدار پیش‌فرض curl استفاده می‌شود. می‌تواند توسط متغیر محیطی GIT_HTTP_KEEPALIVE_COUNT بازنویسی شود. http.retryAfter زمان انتظار پیش‌فرض بر حسب ثانیه قبل از تلاش مجدد، زمانی که سرور پاسخ HTTP 429 (Too Many Requests) را بدون سرآیند Retry-After برمی‌گرداند. پیش‌فرض 0 (تلاش مجدد فوری) است. هنگامی که سرآیند Retry-After وجود داشته باشد، مقدار آن بر این تنظیم اولویت دارد؛ با این حال، استفاده خودکار از سرآیند Retry-After ارائه‌شده توسط سرور نیازمند libcurl نسخه 7.66.0 یا جدیدتر است. در نسخه‌های قدیمی‌تر، این تنظیم را به صورت دستی پیکربندی کنید تا تاخیر تلاش مجدد را کنترل نمایید. می‌تواند توسط متغیر محیطی GIT_HTTP_RETRY_AFTER بازنویسی شود. همچنین ببینید http.maxRetries و http.maxRetryTime. http.maxRetries حداکثر تعداد دفعات تلاش مجدد پس از دریافت پاسخ‌های HTTP 429 (Too Many Requests). برای غیرفعال کردن تلاش‌های مجدد، آن را روی 0 (پیش‌فرض) قرار دهید. می‌تواند توسط متغیر محیطی GIT_HTTP_MAX_RETRIES بازنویسی شود. همچنین ببینید http.retryAfter و http.maxRetryTime. http.maxRetryTime حداکثر زمان بر حسب ثانیه برای انتظار جهت یک تلاش مجدد منفرد هنگام رسیدگی به پاسخ‌های HTTP 429 (Too Many Requests). اگر سرور درخواست تاخیر کند (از طریق سرآیند Retry-After) یا اگر http.retryAfter با مقداری پیکربندی شده باشد که از این حداکثر فراتر رود، Git به جای انتظار بلافاصله با خطا متوقف می‌شود. پیش‌فرض 300 ثانیه (5 دقیقه) است. می‌تواند توسط متغیر محیطی GIT_HTTP_MAX_RETRY_TIME بازنویسی شود. همچنین ببینید http.retryAfter و http.maxRetries. http.noEPSV یک مقدار بولی که استفاده از دستور ftp موسوم به EPSV توسط curl را غیرفعال می‌کند. این می‌تواند در مواجهه با برخی سرورهای ftp ضعیف که از حالت EPSV پشتیبانی نمی‌کنند مفید باشد. می‌تواند توسط متغیر محیطی GIT_CURL_FTP_NO_EPSV بازنویسی شود. پیش‌فرض false است (curl از EPSV استفاده خواهد کرد). http.userAgent رشته USER_AGENT پروتکل HTTP ارائه‌شده به یک سرور HTTP. مقدار پیش‌فرض بیانگر نسخه کلاینت Git است، مانند git/1.7.1. این گزینه به شما امکان می‌دهد این مقدار را با مقداری متداول‌تر مانند Mozilla/4.0 بازنویسی کنید. برای نمونه، در صورتی که اتصال از طریق یک فایروال انجام شود که اتصالات HTTP را به مجموعه‌ای از رشته‌های متداول USER_AGENT محدود می‌کند (و مواردی مانند git/1.7.1 را در بر نمی‌گیرد)، ممکن است لازم باشد. می‌تواند توسط متغیر محیطی GIT_HTTP_USER_AGENT بازنویسی شود. http.followRedirects آیا git باید تغییر مسیرهای HTTP را دنبال کند یا خیر. اگر روی true تنظیم شود، git به صورت شفاف هرگونه تغییر مسیری که توسط سرور صادر شود را دنبال خواهد کرد. اگر روی false تنظیم شود، git با تمام تغییر مسیرها به عنوان خطا برخورد می‌کند. اگر روی initial تنظیم شود، git تغییر مسیرها را تنها برای درخواست اولیه به یک ریموت دنبال می‌کند، اما نه برای درخواست‌های متوالی بعدی HTTP. از آنجا که git از URL تغییر مسیر یافته به عنوان مبنا برای درخواست‌های بعدی استفاده می‌کند، این حالت عموماً کافی است. مقدار پیش‌فرض initial است. http..* هر یک از گزینه‌های http.* بالا را می‌توان به صورت انتخابی روی برخی URLها اعمال کرد. برای اینکه یک کلید پیکربندی با یک URL مطابقت داشته باشد، هر عنصر از کلید پیکربندی با عنصر متناظر در URL، به ترتیب زیر مقایسه می‌شود: 1. طرح (مثلاً https در https://example.com/). این فیلد باید بین کلید پیکربندی و URL دقیقاً مطابقت داشته باشد. 2. نام میزبان/دامنه (مثلاً example.com در https://example.com/). این فیلد باید بین کلید پیکربندی و URL مطابقت داشته باشد. امکان تعیین یک * به عنوان بخشی از نام میزبان برای تطبیق با تمام زیردامنه‌ها در این سطح وجود دارد. برای مثال https://*.example.com/ با https://foo.example.com/ مطابقت دارد، اما با https://foo.bar.example.com/ تطابق ندارد. 3. شماره پورت (مثلاً 8080 در http://example.com:8080/). این فیلد باید بین کلید پیکربندی و URL دقیقاً مطابقت داشته باشد. شماره پورت‌های حذف‌شده قبل از تطبیق به طور خودکار به مقدار پیش‌فرض صحیح برای طرح مربوطه تبدیل می‌شوند. 4. مسیر (مثلاً repo.git در https://example.com/repo.git). فیلد مسیر کلید پیکربندی باید با فیلد مسیر URL به صورت دقیق یا به عنوان پیشوندی از عناصر مسیر تفکیک‌شده با اسلش مطابقت داشته باشد. این بدان معناست که یک کلید پیکربندی با مسیر foo/ با مسیر URL foo/bar تطابق دارد. یک پیشوند تنها می‌تواند روی مرز اسلش (/) مطابقت یابد. تطابق‌های طولانی‌تر اولویت دارند (بنابراین یک کلید پیکربندی با مسیر foo/bar نسبت به کلید پیکربندی با صرف مسیر foo/ تطابق بهتری با مسیر URL foo/bar دارد). 5. نام کاربری (مثلاً user در https://user@example.com/repo.git). اگر کلید پیکربندی دارای نام کاربری باشد، باید دقیقاً با نام کاربری موجود در URL مطابقت داشته باشد. اگر کلید پیکربندی نام کاربری نداشته باشد، آن کلید با هر نام کاربری در URL (از جمله بدون نام کاربری) مطابقت خواهد داشت، اما با اولویتی کمتر نسبت به کلید دارای نام کاربری. فهرست فوق به ترتیب اولویت نزولی مرتب شده است؛ یک URL که با مسیر یک کلید پیکربندی مطابقت دارد، نسبت به موردی که با نام کاربری آن مطابقت دارد ترجیح داده می‌شود. برای مثال، اگر URL برابر با https://user@example.com/foo/bar باشد، تطابق کلید پیکربندی با https://example.com/foo بر تطابق کلید پیکربندی با https://user@example.com ترجیح داده خواهد شد. تمامی URLها قبل از هرگونه تلاش برای تطبیق، یکسان‌سازی (نرمال‌سازی) می‌شوند (بخش گذرواژه، در صورت وجود در URL، برای مقاصد تطبیق همیشه نادیده گرفته می‌شود) تا URLهای معادل که صرفاً املای متفاوتی دارند به درستی تطبیق یابند. تنظیمات متغیرهای محیطی همواره بر هرگونه تطبیقی اولویت دارند. URLهایی که مورد مقایسه قرار می‌گیرند، مواردی هستند که مستقیماً به دستورات Git داده می‌شوند. این بدان معنی است که هرگونه URL بازدیدشده در نتیجه تغییر مسیر در تطبیق شرکت نمی‌کند. i18n.commitEncoding کدگذاری نویسه‌ها که پیام‌های ثبت در آن ذخیره می‌شوند؛ خود Git به خودی خود اهمیتی به آن نمی‌دهد، اما این اطلاعات مثلاً هنگام وارد کردن کامیت‌ها از ایمیل‌ها یا در مرورگر گرافیکی تاریخچه gitk (و احتمالاً در مکان‌های دیگر در آینده یا در سایر رابط‌های سطح بالا) ضروری است. به عنوان مثال رجوع کنید به git-mailinfo(1). مقدار پیش‌فرض utf-8 است. i18n.logOutputEncoding کدگذاری نویسه‌ها که هنگام اجرای git log و دستورات مرتبط، پیام‌های ثبت به آن تبدیل می‌شوند. imap.folder پوشه‌ای که نامه‌ها باید در آن قرار گیرند، که معمولاً پوشه پیش‌نویس‌ها (Drafts) است. برای مثال: INBOX.Drafts, INBOX/Drafts یا [Gmail]/Drafts. پوشه IMAP برای تعامل حتماً باید مشخص شود؛ مقدار این متغیر پیکربندی به عنوان مقدار پیش‌فرض جایگزین در صورتی که گزینه --folder داده نشده باشد، استفاده می‌شود. imap.tunnel دستوری که برای ایجاد یک تونل به سرور IMAP استفاده می‌شود تا دستورات به جای استفاده از اتصال مستقیم شبکه‌ای به سرور، از طریق آن هدایت شوند. در صورتی که imap.host تنظیم نشده باشد، الزامی است. imap.host یک URL که سرور را مشخص می‌کند. از یک پیشوند imap:// برای اتصالات غیرامن و یک پیشوند imaps:// برای اتصالات امن استفاده کنید. هنگامی که imap.tunnel تنظیم شده باشد نادیده گرفته می‌شود، اما در غیر این صورت الزامی است. imap.user نام کاربری مورد استفاده هنگام ورود به سرور. imap.pass گذرواژه مورد استفاده هنگام ورود به سرور. imap.port یک عدد صحیح برای پورت اتصال به سرور. پیش‌فرض 143 برای میزبان‌های imap:// و 993 برای میزبان‌های imaps:// است. هنگامی که imap.tunnel تنظیم شده باشد نادیده گرفته می‌شود. imap.sslverify یک مقدار بولی برای فعال/غیرفعال کردن اعتبارسنجی گواهی سرور مورد استفاده توسط اتصال SSL/TLS. پیش‌فرض true است. هنگامی که imap.tunnel تنظیم شده باشد نادیده گرفته می‌شود. imap.preformattedHTML یک مقدار بولی برای فعال/غیرفعال کردن استفاده از کدگذاری html هنگام ارسال وصله. یک وصله کدگذاری‌شده با html درون تگ‌های
               قرار می‌گیرد و نوع محتوای text/html خواهد داشت. جالب اینجاست که
               فعال کردن این گزینه باعث می‌شود Thunderbird وصله را به صورت یک
               ایمیل plain/text با format=fixed ارسال کند. مقدار پیش‌فرض false
               است.

           imap.authMethod
               روش احراز هویت را برای احراز هویت در سرور IMAP مشخص می‌کند. اگر
               Git با گزینه NO_CURL ساخته شده باشد، یا اگر نسخه curl شما
               قدیمی‌تر از 7.34.0 باشد، یا اگر git-imap-send را با گزینه
               --no-curl اجرا می‌کنید، تنها روش‌های پشتیبانی‌شده عبارتند از
               PLAIN, CRAM-MD5, OAUTHBEARER و XOAUTH2. اگر این مقدار تنظیم
               نشده باشد، git imap-send از دستور متنی ساده IMAP یعنی LOGIN
               استفاده می‌کند.

           include.path, includeIf..path
               متغیرهای ویژه برای گنجاندن سایر فایل‌های پیکربندی. به بخش
               "CONFIGURATION FILE" در مستندات اصلی git-config(1)، به ویژه
               زیربخش‌های "Includes" و "Conditional Includes" مراجعه کنید.

           index.recordEndOfIndexEntries
               مشخص می‌کند که آیا فایل ایندکس باید شامل بخش "End Of Index
               Entry" باشد یا خیر. این کار زمان بارگذاری ایندکس را در ماشین‌های
               چندپردازنده‌ای کاهش می‌دهد، اما هنگام خواندن ایندکس با استفاده از
               نسخه‌های Git پیش از 2.20 پیام "ignoring EOIE extension" تولید
               می‌کند. در صورتی که index.threads به طور صریح فعال شده باشد
               پیش‌فرض true است، در غیر این صورت false می‌باشد.

           index.recordOffsetTable
               مشخص می‌کند که آیا فایل ایندکس باید شامل بخش "Index Entry Offset
               Table" باشد یا خیر. این کار زمان بارگذاری ایندکس را در ماشین‌های
               چندپردازنده‌ای کاهش می‌دهد، اما هنگام خواندن ایندکس با استفاده از
               نسخه‌های Git پیش از 2.20 پیام "ignoring IEOT extension" تولید
               می‌کند. در صورتی که index.threads به طور صریح فعال شده باشد
               پیش‌فرض true است، در غیر این صورت false می‌باشد.

           index.sparse
               در صورت فعال بودن، ایندکس را با استفاده از مدخل‌های دایرکتوری
               خلوت (sparse-directory) می‌نویسد. این گزینه تاثیری ندارد مگر
               اینکه هر دو core.sparseCheckout و core.sparseCheckoutCone فعال
               باشند. پیش‌فرض false است.

           index.threads
               تعداد نخ‌هایی را مشخص می‌کند که باید هنگام بارگذاری ایندکس ایجاد
               شوند. هدف از این کار کاهش زمان بارگذاری ایندکس روی ماشین‌های
               چندپردازنده‌ای است. تعیین 0 یا true باعث می‌شود Git تعداد CPUها
               را به طور خودکار شناسایی کرده و تعداد نخ‌ها را متناسب با آن
               تنظیم کند. تعیین 1 یا false چندنخی را غیرفعال می‌کند. پیش‌فرض
               true است.

           index.version
               نسخه‌ای را مشخص می‌کند که فایل‌های ایندکس جدید باید با آن مقداردهی
               اولیه شوند. این گزینه بر مخازن موجود تاثیری ندارد. اگر
               feature.manyFiles فعال باشد، مقدار پیش‌فرض 4 است.

           index.skipHash
               در صورت فعال بودن، هش پایانی فایل ایندکس محاسبه نمی‌شود. این کار
               به اجرای سریع‌تر دستورات Git که ایندکس را دستکاری می‌کنند، مانند
               git add, git commit, یا git status کمک می‌کند. به جای ذخیره
               مجموع مقابله‌ای (checksum)، مجموعه‌ای از بایت‌های پایانی با مقدار
               صفر نوشته می‌شود که نشان می‌دهد از محاسبه صرف‌نظر شده است.

               اگر index.skipHash را فعال کنید، کلاینت‌های Git قدیمی‌تر از
               2.13.0 از تجزیه ایندکس خودداری می‌کنند و کلاینت‌های Git قدیمی‌تر
               از 2.40.0 در حین اجرای git fsck خطا گزارش می‌دهند.

           init.templateDir
               دایرکتوری را مشخص می‌کند که الگوها از آن کپی خواهند شد. (به بخش
               "TEMPLATE DIRECTORY" در git-init(1) مراجعه کنید.)

           init.defaultBranch
               امکان بازنویسی نام شاخه پیش‌فرض را مثلاً هنگام مقداردهی اولیه یک
               مخزن جدید فراهم می‌کند.

           init.defaultObjectFormat
               امکان بازنویسی قالب پیش‌فرض شیء را برای مخازن جدید فراهم می‌کند.
               ببینید --object-format= در git-init(1). هم گزینه خط فرمان و هم
               متغیر محیطی GIT_DEFAULT_HASH بر این پیکربندی اولویت دارند.

           init.defaultRefFormat
               امکان بازنویسی قالب پیش‌فرض ذخیره‌سازی مراجع را برای مخازن جدید
               فراهم می‌کند. ببینید --ref-format= در git-init(1). هم گزینه خط
               فرمان و هم متغیر محیطی GIT_DEFAULT_REF_FORMAT بر این پیکربندی
               اولویت دارند.

           init.defaultSubmodulePathConfig
               یک مقدار بولی که مشخص می‌کند آیا git init و git clone باید به
               طور خودکار extensions.submodulePathConfig را روی true تنظیم
               کنند یا خیر. این به تمام مخازن جدید اجازه می‌دهد تا به صورت
               خودکار از افزونه مسیر زیرماژول استفاده کنند. در صورت عدم تنظیم،
               پیش‌فرض false است.

           instaweb.browser
               برنامه‌ای را مشخص می‌کند که برای مرور مخزن کاری شما در gitweb
               استفاده خواهد شد. ببینید git-instaweb(1).

           instaweb.httpd
               خط فرمان دیمن HTTP برای راه‌اندازی gitweb روی مخزن کاری شما.
               ببینید git-instaweb(1).

           instaweb.local
               اگر روی true تنظیم باشد، وب‌سرور راه‌اندازی‌شده توسط git-
               instaweb(1) به IP محلی (127.0.0.1) متصل خواهد شد.

           instaweb.modulePath
               مسیر پیش‌فرض ماژول برای استفاده توسط git-instaweb(1) به جای
               /usr/lib/apache2/modules. تنها در صورتی استفاده می‌شود که httpd
               آپاچی باشد.

           instaweb.port
               شماره پورتی که httpd مربوط به gitweb باید به آن متصل شود.
               ببینید git-instaweb(1).

           interactive.singleKey
               هنگامی که روی true تنظیم شود، به کاربر اجازه می‌دهد در دستورات
               تعاملی ورودی یک‌حرفی را با فشردن یک کلید (یعنی بدون فشردن کلید
               Enter) ارائه دهد. این در حال حاضر توسط حالت --patch در دستورات
               git-add(1), git-checkout(1), git-restore(1), git-commit(1),
               git-reset(1) و git-stash(1) استفاده می‌شود.

           interactive.diffFilter
               هنگامی که یک دستور تعاملی (مانند git add --patch) یک diff رنگی
               را نشان می‌دهد، git تفاضل (diff) را از طریق دستور شل تعریف‌شده
               توسط این متغیر پیکربندی هدایت (pipe) می‌کند. این دستور می‌تواند
               diff را برای درک بهتر توسط انسان بیشتر نشانه‌گذاری کند، به شرط
               آنکه تطابق یک‌به‌یک با خطوط diff اصلی حفظ شود. پیش‌فرض غیرفعال است
               (بدون فیلتر کردن).

           log.abbrevCommit
               اگر true باشد، باعث می‌شود git-log(1), git-show(1) و git-
               whatchanged(1) گزینه --abbrev-commit را فرض بگیرند. می‌توانید
               این گزینه را با --no-abbrev-commit بازنویسی کنید.

           log.date
               حالت پیش‌فرض تاریخ-زمان را برای دستور log تنظیم می‌کند. تنظیم یک
               مقدار برای log.date مشابه استفاده از گزینه --date در git log
               است. برای جزئیات به git-log(1) مراجعه کنید.

               اگر قالب روی "auto:foo" تنظیم شده باشد و صفحه‌بند در حال استفاده
               باشد، از قالب "foo" برای تاریخ استفاده خواهد شد. در غیر این
               صورت از "default" استفاده می‌شود.

           log.decorate
               نام‌های مراجع مربوط به هر کامیت نمایش‌داده‌شده توسط دستور log را
               چاپ می‌کند. مقادیر ممکن عبارتند از:

               short
                   پیشوندهای نام مرجع refs/heads/, refs/tags/ و refs/remotes/
                   چاپ نمی‌شوند.

               full
                   نام کامل مرجع (شامل پیشوند) چاپ می‌شود.

               auto
                   اگر خروجی به یک ترمینال برود، نام‌های مراجع به گونه‌ای نمایش
                   داده می‌شوند که گویی short داده شده است، در غیر این صورت هیچ
                   نام مرجعی نمایش داده نمی‌شود.

               این معادل با گزینه --decorate در git log است.

           log.initialDecorationSet
               به‌طور پیش‌فرض، git log نشانه‌ها (decorations) را فقط برای فضاهای
               نام مرجع شناخته‌شده مشخصی نمایش می‌دهد. اگر all مشخص شود، همه
               مراجع به عنوان نشانه نمایش داده می‌شوند.

           log.excludeDecoration
               الگوهای مشخص‌شده را از نشانه‌های لاگ مستثنی می‌کند. این شبیه به
               گزینه خط فرمان --decorate-refs-exclude است، اما این گزینه
               پیکربندی می‌تواند توسط گزینه --decorate-refs لغو و بازنویسی شود.

           log.diffMerges
               قالب diff مورد استفاده را زمانی که --diff-merges=on مشخص شده
               است تنظیم می‌کند؛ برای جزئیات --diff-merges را در git-log(1)
               ببینید. پیش‌فرض روی separate است.

           log.follow
               اگر true باشد، زمانی که یک  واحد داده می‌شود، git log به
               گونه‌ای عمل می‌کند که گویی گزینه --follow استفاده شده است. این
               مورد همان محدودیت‌های --follow را دارد، یعنی نمی‌توان از آن برای
               دنبال کردن چندین فایل استفاده کرد و روی تاریخچه غیرخطی به خوبی
               کار نمی‌کند.

           log.graphColors
               فهرستی از رنگ‌ها، جداشده با کاما، که می‌توان از آن‌ها برای رسم
               خطوط تاریخچه در git log --graph استفاده کرد.

           log.showRoot
               اگر true باشد، کامیت اولیه به عنوان یک رویداد بزرگ ایجاد نمایش
               داده خواهد شد. این معادل یک diff در برابر یک درخت خالی است.
               ابزارهایی مانند git-log(1) یا git-whatchanged(1) که معمولاً
               کامیت ریشه را پنهان می‌کنند، اکنون آن را نمایش خواهند داد. به‌طور
               پیش‌فرض true است.

           log.showSignature
               اگر true باشد، باعث می‌شود git-log(1)، git-show(1) و git-
               whatchanged(1) فرض کنند که --show-signature مشخص شده است.

           log.mailmap
               اگر true باشد، باعث می‌شود git-log(1)، git-show(1) و git-
               whatchanged(1) فرض کنند که --use-mailmap مشخص شده است، در غیر
               این صورت --no-use-mailmap فرض می‌شود. به‌طور پیش‌فرض true است.

           lsrefs.unborn
               می‌تواند "advertise" (پیش‌فرض)، "allow" یا "ignore" باشد. اگر
               "advertise" باشد، کارساز (سرور) به کلاینتی که "unborn" ارسال
               می‌کند پاسخ خواهد داد (همان‌طور که در gitprotocol-v2(5) توصیف شده
               است) و پشتیبانی از این ویژگی را در طول اعلان قابلیت‌های پروتکل
               نسخه ۲ تبلیغ (اعلام) خواهد کرد. مقدار "allow" همانند
               "advertise" است با این تفاوت که سرور پشتیبانی از این ویژگی را
               اعلام نخواهد کرد؛ این قابلیت برای سرورهای با بار متوازن
               (load-balanced) که نمی‌توانند به‌صورت هم‌زمان و یکپارچه به‌روزرسانی
               شوند مفید است (برای مثال)، زیرا مدیر سیستم می‌تواند ابتدا
               "allow" را پیکربندی کرده و سپس پس از مدتی تأخیر، "advertise" را
               تنظیم نماید.

           mailinfo.scissors
               اگر true باشد، باعث می‌شود git-mailinfo(1) (و در نتیجه git-
               am(1)) به‌طور پیش‌فرض به گونه‌ای عمل کنند که گویی گزینه --scissors
               در خط فرمان ارائه شده است. هنگامی که فعال باشد، این ویژگی همه
               چیز را از بدنه پیام قبل از خط قیچی (scissors line، یعنی خطی
               عمدتاً شامل ">8"، "8<" و "-") حذف می‌کند.

           mailmap.file
               مکان یک فایل mailmap تکمیلی. فایل mailmap پیش‌فرض واقع در ریشه
               مخزن، ابتدا بارگذاری می‌شود و سپس فایل mailmap که توسط این متغیر
               مشخص شده است. مکان فایل mailmap می‌تواند در یک زیرپوشه از مخزن
               یا در جایی بیرون از خود مخزن باشد. ببینید: git-shortlog(1) و
               git-blame(1).

           mailmap.blob
               مشابه mailmap.file، اما مقدار را به عنوان مرجعی به یک blob در
               مخزن در نظر می‌گیرد. اگر هر دو mailmap.file و mailmap.blob مشخص
               شوند، هر دو تجزیه می‌شوند و مدخل‌های mailmap.file اولویت خواهند
               داشت. در یک مخزن bare، مقدار پیش‌فرض آن HEAD:.mailmap است. در
               مخزن غیر bare، مقدار پیش‌فرض خالی است.

           maintenance.auto
               این گزینه پیکربندی بولی کنترل می‌کند که آیا برخی دستورات پس از
               انجام کار عادی خود، git maintenance run --auto را اجرا کنند یا
               خیر. پیش‌فرض روی true است.

           maintenance.autoDetach
               بسیاری از دستورات Git پس از نوشتن داده‌ها در مخزن، نگهداری
               خودکار را راه‌اندازی می‌کنند. این گزینه پیکربندی بولی کنترل می‌کند
               که آیا این نگهداری خودکار باید در پیش‌زمینه انجام شود یا اینکه
               فرآیند نگهداری باید جدا شده (detach) و در پس‌زمینه به اجرا ادامه
               دهد.

               در صورت تنظیم نشدن، مقدار gc.autoDetach به عنوان جایگزین
               استفاده می‌شود. اگر هر دو تنظیم نشده باشند، پیش‌فرض true است، به
               این معنی که فرآیند نگهداری جدا خواهد شد.

           maintenance.strategy
               این گزینه پیکربندی رشته‌ای راهکاری برای تعیین یکی از راهبردهای
               توصیه‌شده برای نگهداری مخزن فراهم می‌کند. این تنظیم تعیین می‌کند
               که در حین اجرای git maintenance run چه وظایفی اجرا شوند، به
               شرطی که هیچ آرگومان --task= ارائه نشده باشد. این تنظیم بر
               نگهداری دستی، نگهداری خودکار و همچنین نگهداری زمان‌بندی‌شده تأثیر
               می‌گذارد. وظایفی که اجرا می‌شوند ممکن است بسته به نوع نگهداری
               متفاوت باشند.

               راهبرد نگهداری را می‌توان با تنظیم maintenance..enabled و
               maintenance..schedule بیشتر سفارشی کرد. در صورت تنظیم،
               این مقادیر به جای مقادیر پیش‌فرض ارائه‌شده توسط
               maintenance.strategy استفاده می‌شوند.

               راهبردهای ممکن عبارتند از:

               •   none: این راهبرد به این معنی است که هیچ وظیفه‌ای اصلاً اجرا
                   نمی‌شود. این راهبرد پیش‌فرض برای نگهداری زمان‌بندی‌شده است.

               •   gc: این راهبرد وظیفه gc را اجرا می‌کند.

               •   geometric: این راهبرد بسته‌بندی مجدد هندسی (geometric
                   repacking) فایل‌های بسته را انجام داده و ساختارهای داده کمکی
                   را به‌روز نگه می‌دارد. این راهبرد داده‌ها را در reflog منقضی
                   می‌کند و درخت‌های کاری (worktrees) را که دیگر قابل مکان‌یابی
                   نیستند حذف می‌نماید. هنگامی که راهبرد بسته‌بندی مجدد هندسی
                   تصمیم بگیرد یک بسته‌بندی همه در یک (all-into-one) انجام دهد،
                   برای تمام اشیاء غیرقابل‌دسترس یک cruft pack ایجاد می‌کند.
                   اشیایی که از قبل بخشی از یک cruft pack هستند منقضی خواهند
                   شد.

                   این راهبرد بسته‌بندی مجدد، جایگزینی کامل برای راهبرد gc بوده
                   و برای مخازن بزرگ توصیه می‌شود. این راهبرد پیش‌فرض برای
                   نگهداری دستی است. * incremental: این تنظیم برای انجام
                   فعالیت‌های نگهداری کوچک که هیچ داده‌ای را حذف نمی‌کنند
                   بهینه‌سازی شده است. این گزینه وظیفه gc را زمان‌بندی نمی‌کند،
                   بلکه وظایف prefetch و commit-graph را به‌صورت ساعتی، وظایف
                   loose-objects و incremental-repack را به‌صورت روزانه، و
                   وظیفه pack-refs را به‌صورت هفتگی اجرا می‌کند. نگهداری دستی
                   مخزن از وظیفه gc استفاده می‌کند.

           maintenance..enabled
               این گزینه پیکربندی بولی کنترل می‌کند که آیا وظیفه نگهداری با نام
                زمانی که هیچ گزینه --task به git maintenance run مشخص
               نشده باشد اجرا شود یا خیر. در صورت وجود گزینه --task، این
               مقادیر پیکربندی نادیده گرفته می‌شوند. به‌طور پیش‌فرض، فقط
               maintenance.gc.enabled برابر با true است.

           maintenance..schedule
               این گزینه پیکربندی کنترل می‌کند که آیا  داده‌شده در طول یک
               دستور git maintenance run --schedule= اجرا شود یا
               خیر. مقدار باید یکی از "hourly"، "daily" یا "weekly" باشد.

           maintenance.commit-graph.auto
               این گزینه پیکربندی عدد صحیح کنترل می‌کند که وظیفه commit-graph
               هر چند وقت یک‌بار باید به عنوان بخشی از git maintenance run
               --auto اجرا شود. اگر صفر باشد، وظیفه commit-graph با گزینه
               --auto اجرا نخواهد شد. یک مقدار منفی وظیفه را مجبور می‌کند که هر
               بار اجرا شود. در غیر این صورت، یک مقدار مثبت به این معنی است که
               دستور باید زمانی اجرا شود که تعداد کامیت‌های قابل‌دسترس که در
               فایل commit-graph نیستند حداقل به اندازه مقدار
               maintenance.commit-graph.auto باشد. مقدار پیش‌فرض ۱۰۰ است.

           maintenance.loose-objects.auto
               این گزینه پیکربندی عدد صحیح کنترل می‌کند که وظیفه loose-objects
               هر چند وقت یک‌بار باید به عنوان بخشی از git maintenance run
               --auto اجرا شود. اگر صفر باشد، وظیفه loose-objects با گزینه
               --auto اجرا نخواهد شد. یک مقدار منفی وظیفه را مجبور می‌کند که هر
               بار اجرا شود. در غیر این صورت، یک مقدار مثبت به این معنی است که
               دستور باید زمانی اجرا شود که تعداد اشیاء مستقل (loose objects)
               حداقل به اندازه مقدار maintenance.loose-objects.auto باشد.
               مقدار پیش‌فرض ۱۰۰ است.

           maintenance.loose-objects.batchSize
               این گزینه پیکربندی عدد صحیح حداکثر تعداد اشیاء مستقل نوشته‌شده
               در یک فایل بسته در طول وظیفه loose-objects را کنترل می‌کند.
               پیش‌فرض پنجاه هزار است. از مقدار 0 برای نشان دادن عدم وجود
               محدودیت استفاده کنید.

           maintenance.incremental-repack.auto
               این گزینه پیکربندی عدد صحیح کنترل می‌کند که وظیفه
               incremental-repack هر چند وقت یک‌بار باید به عنوان بخشی از git
               maintenance run --auto اجرا شود. اگر صفر باشد، وظیفه
               incremental-repack با گزینه --auto اجرا نخواهد شد. یک مقدار
               منفی وظیفه را مجبور می‌کند که هر بار اجرا شود. در غیر این صورت،
               یک مقدار مثبت به این معنی است که دستور باید زمانی اجرا شود که
               تعداد فایل‌های بسته خارج از multi-pack-index حداقل به اندازه
               مقدار maintenance.incremental-repack.auto باشد. مقدار پیش‌فرض ۱۰
               است.

           maintenance.geometric-repack.auto
               این گزینه پیکربندی عدد صحیح کنترل می‌کند که وظیفه
               geometric-repack هر چند وقت یک‌بار باید به عنوان بخشی از git
               maintenance run --auto اجرا شود. اگر صفر باشد، وظیفه
               geometric-repack با گزینه --auto اجرا نخواهد شد. یک مقدار منفی
               وظیفه را مجبور می‌کند که هر بار اجرا شود. در غیر این صورت، یک
               مقدار مثبت به این معنی است که دستور باید یا زمانی اجرا شود که
               فایل‌های بسته‌ای وجود داشته باشند که برای حفظ تصاعد هندسی نیاز به
               ادغام با یکدیگر دارند، یا زمانی که حداقل این تعداد شیء مستقل
               وجود داشته باشد که در یک فایل بسته جدید نوشته شوند. مقدار
               پیش‌فرض ۱۰۰ است.

           maintenance.geometric-repack.splitFactor
               این گزینه پیکربندی عدد صحیح ضریب مورد استفاده برای دنباله هندسی
               را کنترل می‌کند. برای جزئیات بیشتر گزینه --geometric= را در git-
               repack(1) ببینید. پیش‌فرض 2 است.

           maintenance.reflog-expire.auto
               این گزینه پیکربندی عدد صحیح کنترل می‌کند که وظیفه reflog-expire
               هر چند وقت یک‌بار باید به عنوان بخشی از git maintenance run
               --auto اجرا شود. اگر صفر باشد، وظیفه reflog-expire با گزینه
               --auto اجرا نخواهد شد. یک مقدار منفی وظیفه را مجبور می‌کند که هر
               بار اجرا شود. در غیر این صورت، یک مقدار مثبت به این معنی است که
               دستور باید زمانی اجرا شود که تعداد مدخل‌های منقضی‌شده reflog در
               وقایع‌نگار مرجع "HEAD" حداقل به اندازه مقدار
               maintenance.loose-objects.auto باشد. مقدار پیش‌فرض ۱۰۰ است.

           maintenance.rerere-gc.auto
               این گزینه پیکربندی عدد صحیح کنترل می‌کند که وظیفه rerere-gc هر
               چند وقت یک‌بار باید به عنوان بخشی از git maintenance run --auto
               اجرا شود. اگر صفر باشد، وظیفه rerere-gc با گزینه --auto اجرا
               نخواهد شد. یک مقدار منفی وظیفه را مجبور می‌کند که هر بار اجرا
               شود. در غیر این صورت، هر مقدار مثبت به این معنی است که دستور
               زمانی اجرا خواهد شد که پوشه "rr-cache" وجود داشته باشد و حداقل
               یک مدخل داشته باشد، صرف‌نظر از اینکه بیات (stale) است یا خیر.
               این روش تجربی (heuristic) ممکن است در آینده بهبود یابد. مقدار
               پیش‌فرض ۱ است.

           maintenance.worktree-prune.auto
               این گزینه پیکربندی عدد صحیح کنترل می‌کند که وظیفه worktree-prune
               هر چند وقت یک‌بار باید به عنوان بخشی از git maintenance run
               --auto اجرا شود. اگر صفر باشد، وظیفه worktree-prune با گزینه
               --auto اجرا نخواهد شد. یک مقدار منفی وظیفه را مجبور می‌کند که هر
               بار اجرا شود. در غیر این صورت، یک مقدار مثبت به این معنی است که
               دستور باید زمانی اجرا شود که تعداد درخت‌های کاری قابل هرس از این
               مقدار بیشتر شود. مقدار پیش‌فرض ۱ است.

           man.viewer
               برنامه‌هایی را که می‌توان برای نمایش راهنما در قالب man استفاده
               کرد مشخص می‌کند. ببینید: git-help(1).

           man..cmd
               دستور فراخوانی نمایش‌دهنده man مشخص‌شده را تعیین می‌کند. دستور
               مشخص‌شده در پوسته با صفحه man که به عنوان یک آرگومان ارسال شده
               است، ارزیابی می‌گردد. (ببینید: git-help(1).)

           man..path
               مسیر ابزار داده‌شده را که ممکن است برای نمایش راهنما در قالب man
               استفاده شود لغو و جایگزین می‌کند. ببینید: git-help(1).

           merge.conflictStyle
               سبکی را که در آن قطعه‌های دچار تعارض هنگام ادغام در فایل‌های درخت
               کاری نوشته می‌شوند مشخص می‌کند. حالت پیش‌فرض "merge" است که یک
               نشانگر تعارض <<<<<<<، تغییرات ایجاد شده توسط یک طرف، یک نشانگر
               =======، تغییرات ایجاد شده توسط طرف دیگر، و سپس یک نشانگر
               >>>>>>> را نشان می‌دهد. یک سبک جایگزین، "diff3"، یک نشانگر
               ||||||| و متن اصلی را قبل از نشانگر ======= اضافه می‌کند. سبک
               "merge" معمولاً نواحی تعارض کوچک‌تری نسبت به diff3 ایجاد می‌کند،
               هم به دلیل حذف متن اصلی و هم به این دلیل که وقتی زیرمجموعه‌ای از
               خطوط در هر دو طرف مطابقت دارند، آن‌ها به سادگی از ناحیه تعارض
               خارج می‌شوند. سبک جایگزین دیگر، "zdiff3"، شبیه به diff3 است اما
               خطوط منطبق در هر دو طرف را از ناحیه تعارض حذف می‌کند، در صورتی
               که آن خطوط منطبق در نزدیکی ابتدا یا انتهای یک ناحیه تعارض ظاهر
               شوند.

           merge.defaultToUpstream
               اگر merge بدون هیچ آرگومان کامیتی فراخوانی شود، شاخه‌های بالادست
               (upstream) پیکربندی‌شده برای شاخه فعلی را با استفاده از آخرین
               مقادیر مشاهده‌شده ذخیره‌شده در شاخه‌های ردیابی ریموت آن‌ها ادغام
               می‌کند. مقادیر branch..merge که شاخه‌های موجود در
               ریموت مشخص‌شده توسط branch..remote را نام می‌برند
               بررسی شده، و سپس از طریق remote..fetch به شاخه‌های
               ردیابی ریموت متناظرشان نگاشت می‌شوند و نوک (tip) این شاخه‌های
               ردیابی ادغام می‌گردند. پیش‌فرض روی true است.

           merge.ff
               به‌طور پیش‌فرض، Git هنگام ادغام کامیتی که از نوادگان کامیت فعلی
               است، یک کامیت ادغام اضافی ایجاد نمی‌کند. در عوض، نوک شاخه فعلی
               به‌صورت فوروارد سریع (fast-forward) پیش می‌رود. هنگامی که روی
               false تنظیم شود، این متغیر به Git می‌گوید در چنین حالتی یک کامیت
               ادغام اضافی ایجاد کند (معادل ارسال گزینه --no-ff از خط فرمان).
               هنگامی که روی only تنظیم شود، تنها این‌گونه ادغام‌های فوروارد
               سریع مجاز هستند (معادل ارسال گزینه --ff-only از خط فرمان).

           merge.verifySignatures
               اگر true باشد، این معادل گزینه خط فرمان --verify-signatures
               است. برای جزئیات git-merge(1) را ببینید.

           merge.branchdesc
               علاوه بر نام شاخه‌ها، پیام لاگ را با متن توضیحات شاخه مرتبط با
               آن‌ها نیز پر می‌کند. پیش‌فرض false است.

           merge.log
               علاوه بر نام شاخه‌ها، پیام لاگ را حداکثر با تعداد مشخص‌شده‌ای از
               توضیحات تک‌خطی از کامیت‌های واقعی که در حال ادغام هستند پر می‌کند.
               پیش‌فرض false است و true مترادف با ۲۰ می‌باشد.

           merge.suppressDest
               با افزودن یک الگوی عمومی (glob) که با نام‌های شاخه‌های
               یکپارچه‌سازی تطابق دارد به این متغیر پیکربندی چندمقداری، پیام
               پیش‌فرض ادغام محاسبه‌شده برای ادغام در این شاخه‌های یکپارچه‌سازی،
               عبارت "into " را از عنوان خود حذف خواهد کرد.

               یک عنصر با مقدار خالی می‌تواند برای پاک کردن فهرست الگوهای عمومی
               انباشته‌شده از مدخل‌های پیکربندی قبلی استفاده شود. هنگامی که هیچ
               متغیر merge.suppressDest تعریف نشده باشد، مقدار پیش‌فرض master
               برای سازگاری با گذشته استفاده می‌شود.

           merge.renameLimit
               تعداد فایل‌هایی که در بخش جامع تشخیص تغییر نام در حین ادغام باید
               در نظر گرفته شوند. در صورت عدم تعیین، مقدار پیش‌فرض آن برابر با
               مقدار diff.renameLimit خواهد بود. اگر نه merge.renameLimit و نه
               diff.renameLimit مشخص نشده باشند، در حال حاضر مقدار پیش‌فرض ۷۰۰۰
               است. این تنظیم در صورت غیرفعال بودن تشخیص تغییر نام هیچ اثری
               ندارد.

           merge.renames
               آیا Git تغییر نام‌ها را تشخیص دهد یا خیر. اگر روی false تنظیم
               شود، تشخیص تغییر نام غیرفعال می‌گردد. اگر روی true تنظیم شود،
               تشخیص پایه تغییر نام فعال می‌شود. به‌طور پیش‌فرض برابر با مقدار
               diff.renames است.

           merge.directoryRenames
               آیا Git تغییر نام پوشه‌ها را تشخیص دهد یا خیر، که بر سرنوشت
               فایل‌های جدید اضافه‌شده به یک پوشه در یک طرف تاریخچه در زمان
               ادغام، هنگامی که آن پوشه در طرف دیگر تاریخچه تغییر نام یافته
               است، تأثیر می‌گذارد. مقادیر ممکن عبارتند از:

               false
                   تشخیص تغییر نام پوشه غیرفعال است، به این معنی که چنین
                   فایل‌های جدیدی در پوشه قدیمی جا خواهند ماند.

               true
                   تشخیص تغییر نام پوشه فعال است، به این معنی که چنین فایل‌های
                   جدیدی به پوشه جدید منتقل خواهند شد.

               conflict
                   برای چنین مسیرهایی یک تعارض گزارش خواهد شد.

               اگر merge.renames برابر با false باشد، merge.directoryRenames
               نادیده گرفته شده و مانند false با آن رفتار می‌شود. پیش‌فرض
               conflict است.

           merge.renormalize
               به Git اعلام می‌کند که نمایش متعارف فایل‌ها در مخزن در طول زمان
               تغییر کرده است (به عنوان مثال کامیت‌های قبلی فایل‌های متنی را با
               پایان خط CRLF ثبت کرده‌اند، اما کامیت‌های اخیر از پایان خط LF
               استفاده می‌کنند). در چنین مخزنی، برای هر فایلی که در آن به یک
               ادغام محتوایی سه‌طرفه نیاز است، Git می‌تواند داده‌های ثبت‌شده در
               کامیت‌ها را قبل از انجام ادغام به یک شکل متعارف تبدیل کند تا
               تعارض‌های غیرضروری کاهش یابند. برای اطلاعات بیشتر، بخش "Merging
               branches with differing checkin/checkout attributes" را در
               gitattributes(5) ببینید.

           merge.stat
               چه چیزی (در صورت وجود) بین ORIG_HEAD و نتیجه ادغام در پایان
               ادغام چاپ شود. مقادیر ممکن عبارتند از:

               false
                   چیزی نشان داده نشود.

               true
                   نمایش git diff --diffstat --summary ORIG_HEAD.

               compact
                   نمایش git diff --compact-summary ORIG_HEAD.

               اما هر مقدار ناشناخته (مثلاً مقداری که توسط نسخه آینده Git اضافه
               شده باشد) به جای ایجاد خطا به عنوان true در نظر گرفته می‌شود.
               پیش‌فرض true است.

           merge.autoStash
               هنگامی که روی true تنظیم شود، پیش از شروع عملیات به‌طور خودکار
               یک مدخل موقت استش (stash) ایجاد کرده و پس از پایان عملیات آن را
               اعمال می‌کند. این بدان معناست که می‌توانید ادغام را روی یک درخت
               کاری کثیف (دارای تغییرات ثبت‌نشده) اجرا کنید. با این حال، با
               احتیاط استفاده کنید: اعمال نهایی استش پس از یک ادغام موفقیت‌آمیز
               ممکن است به تعارض‌های غیرپیش‌پاافتاده منجر شود. این گزینه می‌تواند
               توسط گزینه‌های --no-autostash و --autostash در git-merge(1) لغو
               و بازنویسی شود. پیش‌فرض روی false است.

           merge.tool
               کنترل می‌کند که کدام ابزار ادغام توسط git-mergetool(1) استفاده
               شود. فهرست زیر مقادیر معتبر توکار را نشان می‌دهد. هر مقدار دیگری
               به عنوان یک ابزار ادغام سفارشی در نظر گرفته می‌شود و مستلزم آن
               است که متغیر متناظر mergetool..cmd تعریف شده باشد.

           merge.guitool
               کنترل می‌کند که در زمان مشخص شدن فلگ -g/--gui، کدام ابزار ادغام
               توسط git-mergetool(1) استفاده شود. فهرست زیر مقادیر معتبر توکار
               را نشان می‌دهد. هر مقدار دیگری به عنوان یک ابزار ادغام سفارشی در
               نظر گرفته می‌شود و مستلزم آن است که متغیر متناظر
               mergetool..cmd تعریف شده باشد.

               araxis
                   استفاده از Araxis Merge (نیازمند نشست گرافیکی)

               bc
                   استفاده از Beyond Compare (نیازمند نشست گرافیکی)

               bc3
                   استفاده از Beyond Compare (نیازمند نشست گرافیکی)

               bc4
                   استفاده از Beyond Compare (نیازمند نشست گرافیکی)

               codecompare
                   استفاده از Code Compare (نیازمند نشست گرافیکی)

               deltawalker
                   استفاده از DeltaWalker (نیازمند نشست گرافیکی)

               diffmerge
                   استفاده از DiffMerge (نیازمند نشست گرافیکی)

               diffuse
                   استفاده از Diffuse (نیازمند نشست گرافیکی)

               ecmerge
                   استفاده از ECMerge (نیازمند نشست گرافیکی)

               emerge
                   استفاده از Emerge در Emacs

               examdiff
                   استفاده از ExamDiff Pro (نیازمند نشست گرافیکی)

               guiffy
                   استفاده از ابزار Diff گویفی (Guiffy) (نیازمند نشست گرافیکی)

               gvimdiff
                   استفاده از gVim (نیازمند نشست گرافیکی) با یک چیدمان سفارشی
                   (بخش BACKEND SPECIFIC HINTS در git help mergetool را
                   ببینید)

               gvimdiff1
                   استفاده از gVim (نیازمند نشست گرافیکی) با چیدمان ۲ پانلی
                   (LOCAL و REMOTE)

               gvimdiff2
                   استفاده از gVim (نیازمند نشست گرافیکی) با چیدمان ۳ پانلی
                   (LOCAL، MERGED و REMOTE)

               gvimdiff3
                   استفاده از gVim (نیازمند نشست گرافیکی) که در آن فقط فایل
                   MERGED نمایش داده می‌شود

               kdiff3
                   استفاده از KDiff3 (نیازمند نشست گرافیکی)

               meld
                   استفاده از Meld (نیازمند نشست گرافیکی) با ادغام خودکار
                   اختیاری (بخش CONFIGURATION در git help mergetool را ببینید)

               nvimdiff
                   استفاده از Neovim با یک چیدمان سفارشی (بخش BACKEND SPECIFIC
                   HINTS در git help mergetool را ببینید)

               nvimdiff1
                   استفاده از Neovim با چیدمان ۲ پانلی (LOCAL و REMOTE)

               nvimdiff2
                   استفاده از Neovim با چیدمان ۳ پانلی (LOCAL، MERGED و
                   REMOTE)

               nvimdiff3
                   استفاده از Neovim که در آن فقط فایل MERGED نمایش داده می‌شود

               opendiff
                   استفاده از FileMerge (نیازمند نشست گرافیکی)

               p4merge
                   استفاده از HelixCore P4Merge (نیازمند نشست گرافیکی)

               smerge
                   استفاده از Sublime Merge (نیازمند نشست گرافیکی)

               tkdiff
                   استفاده از TkDiff (نیازمند نشست گرافیکی)

               tortoisemerge
                   استفاده از TortoiseMerge (نیازمند نشست گرافیکی)

               vimdiff
                   استفاده از Vim با یک چیدمان سفارشی (بخش BACKEND SPECIFIC
                   HINTS در git help mergetool را ببینید)

               vimdiff1
                   استفاده از Vim با چیدمان ۲ پانلی (LOCAL و REMOTE)

               vimdiff2
                   استفاده از Vim با چیدمان ۳ پانلی (LOCAL، MERGED و REMOTE)

               vimdiff3
                   استفاده از Vim که در آن فقط فایل MERGED نمایش داده می‌شود

               vscode
                   استفاده از Visual Studio Code (نیازمند نشست گرافیکی)

               winmerge
                   استفاده از WinMerge (نیازمند نشست گرافیکی)

               xxdiff
                   استفاده از xxdiff (نیازمند نشست گرافیکی)

           merge.verbosity
               میزان خروجی نمایش‌داده‌شده توسط راهبرد ادغام بازگشتی را کنترل
               می‌کند. سطح ۰ هیچ چیزی به جز پیام خطای نهایی در صورت تشخیص تعارض
               خروجی نمی‌دهد. سطح ۱ فقط تعارض‌ها را خروجی می‌دهد، سطح ۲ تعارض‌ها و
               تغییرات فایل را خروجی می‌دهد. سطح ۵ و بالاتر اطلاعات اشکال‌زدایی
               را خروجی می‌دهد. پیش‌فرض سطح ۲ است. می‌تواند توسط متغیر محیطی
               GIT_MERGE_VERBOSITY لغو و بازنویسی شود.

           merge..name
               یک نام خوانا برای انسان برای یک راه‌انداز ادغام سطح‌پایین سفارشی
               تعریف می‌کند. برای جزئیات gitattributes(5) را ببینید.

           merge..driver
               دستوری را که یک راه‌انداز ادغام سطح‌پایین سفارشی را پیاده‌سازی
               می‌کند تعریف می‌نماید. برای جزئیات gitattributes(5) را ببینید.

           merge..recursive
               نام یک راه‌انداز ادغام سطح‌پایین را تعیین می‌کند که هنگام انجام
               ادغام داخلی میان نیاکان مشترک استفاده شود. برای جزئیات
               gitattributes(5) را ببینید.

           mergetool..path
               مسیر ابزار داده‌شده را لغو و بازنویسی می‌کند. این در صورتی مفید
               است که ابزار شما در $PATH نباشد.

           mergetool..cmd
               دستور فراخوانی ابزار ادغام مشخص‌شده را تعیین می‌کند. دستور
               مشخص‌شده در پوسته با متغیرهای زیر در دسترس ارزیابی می‌شود: BASE
               نام یک فایل موقت حاوی پایه مشترک فایل‌های در حال ادغام است (در
               صورت موجود بودن)؛ LOCAL نام یک فایل موقت حاوی محتویات فایل در
               شاخه فعلی است؛ REMOTE نام یک فایل موقت حاوی محتویات فایل از
               شاخه‌ای است که در حال ادغام است؛ MERGED شامل نام فایلی است که
               ابزار ادغام باید نتایج یک ادغام موفقیت‌آمیز را در آن بنویسد.

           mergetool..hideResolved
               به کاربر اجازه می‌دهد مقدار سراسری mergetool.hideResolved را
               برای یک ابزار خاص لغو و بازنویسی کند. برای شرح کامل
               mergetool.hideResolved را ببینید.

           mergetool..trustExitCode
               برای یک دستور ادغام سفارشی، مشخص می‌کند که آیا می‌توان از کد خروج
               دستور ادغام برای تعیین موفقیت‌آمیز بودن ادغام استفاده کرد یا
               خیر. اگر این روی true تنظیم نشده باشد، برچسب زمانی فایل مقصد
               ادغام بررسی می‌شود و در صورتی که فایل به‌روزرسانی شده باشد فرض
               می‌شود ادغام موفقیت‌آمیز بوده است؛ در غیر این صورت، از کاربر
               خواسته می‌شود موفقیت ادغام را مشخص کند.

           mergetool.meld.hasOutput
               نسخه‌های قدیمی‌تر meld از گزینه --output پشتیبانی نمی‌کنند. Git با
               بررسی خروجی meld --help تلاش خواهد کرد تشخیص دهد که آیا meld از
               --output پشتیبانی می‌کند یا خیر. پیکربندی
               mergetool.meld.hasOutput باعث می‌شود Git از این بررسی‌ها صرف‌نظر
               کرده و در عوض از مقدار پیکربندی‌شده استفاده کند. تنظیم
               mergetool.meld.hasOutput روی true به Git می‌گوید بدون قیدوشرط از
               گزینه --output استفاده کند، و false از استفاده از --output
               خودداری می‌کند.

           mergetool.meld.useAutoMerge
               هنگامی که گزینه --auto-merge داده می‌شود، meld تمام بخش‌های بدون
               تعارض را به‌طور خودکار ادغام می‌کند، بخش‌های دارای تعارض را برجسته
               می‌سازد و منتظر تصمیم کاربر می‌ماند. تنظیم
               mergetool.meld.useAutoMerge روی true به Git می‌گوید بدون قیدوشرط
               از گزینه --auto-merge همراه با meld استفاده کند. تنظیم این
               مقدار روی auto باعث می‌شود git تشخیص دهد که آیا --auto-merge
               پشتیبانی می‌شود یا خیر و تنها زمانی که در دسترس باشد از
               --auto-merge استفاده کند. مقدار false به‌طور کلی از استفاده از
               --auto-merge خودداری می‌کند و مقدار پیش‌فرض است.

           mergetool..layout
               چیدمان پنجره تقسیم‌شده (split window) را برای  مربوط به
               vimdiff پیکربندی می‌کند، که می‌تواند هر یک از vimdiff، nvimdiff
               یا gvimdiff باشد. هنگام راه‌اندازی git mergetool با
               --tool= (یا بدون --tool اگر merge.tool به عنوان
                پیکربندی شده باشد)، Git به mergetool..layout
               مراجعه می‌کند تا چیدمان ابزار را تعیین کند. اگر پیکربندی مخصوص
               نسخه موجود نباشد، چیدمان vimdiff به عنوان جایگزین استفاده
               می‌شود. اگر آن هم موجود نباشد، یک چیدمان پیش‌فرض با ۴ پنجره
               استفاده خواهد شد. برای پیکربندی چیدمان، بخش BACKEND SPECIFIC
               HINTS را در git-mergetool(1) ببینید.

           mergetool.hideResolved
               در حین یک ادغام، Git به‌طور خودکار تا حد امکان تعارض‌ها را برطرف
               کرده و فایل $MERGED را می‌نویسد که حاوی نشانگرهای تعارض در اطراف
               هر تعارضی است که نتوانسته آن را برطرف کند؛ $LOCAL و $REMOTE
               به‌طور معمول نسخه‌های فایل از قبل از حل تعارض توسط Git هستند. این
               فلگ باعث می‌شود $LOCAL و $REMOTE رونویسی شوند تا فقط تعارض‌های
               حل‌نشده به ابزار ادغام ارائه گردند. می‌تواند برای هر ابزار از
               طریق متغیر پیکربندی mergetool..hideResolved پیکربندی شود.
               پیش‌فرض روی false است.

           mergetool.keepBackup
               پس از انجام ادغام، فایل اصلی همراه با نشانگرهای تعارض می‌تواند
               به عنوان فایلی با پسوند .orig ذخیره شود. اگر این متغیر روی
               false تنظیم شود، این فایل حفظ نمی‌گردد. پیش‌فرض true است (یعنی
               فایل‌های پشتیبان نگه‌داری شوند).

           mergetool.keepTemporaries
               هنگام فراخوانی یک ابزار ادغام سفارشی، Git از مجموعه‌ای از
               فایل‌های موقت برای ارسال به ابزار استفاده می‌کند. اگر ابزار خطایی
               بازگرداند و این متغیر روی true تنظیم شده باشد، این فایل‌های موقت
               حفظ خواهند شد؛ در غیر این صورت، پس از خروج ابزار حذف می‌شوند.
               پیش‌فرض false است.

           mergetool.writeToTemp
               به‌طور پیش‌فرض Git نسخه‌های موقت BASE، LOCAL و REMOTE از فایل‌های
               دارای تعارض را در درخت کاری می‌نویسد. هنگامی که روی true تنظیم
               شود، Git تلاش خواهد کرد از یک دایرکتوری موقت برای این فایل‌ها
               استفاده کند. پیش‌فرض false است.

           mergetool.prompt
               پیش از هر بار فراخوانی برنامه حل تعارض ادغام، اعلان نمایش می‌دهد
               (تایید می‌گیرد).

           mergetool.guiDefault
               روی true تنظیم کنید تا به‌طور پیش‌فرض از merge.guitool استفاده
               شود (معادل مشخص کردن آرگومان --gui)، یا auto تا بسته به وجود
               مقدار متغیر محیطی DISPLAY، بین merge.guitool یا merge.tool
               انتخاب شود. مقدار پیش‌فرض false است که در آن آرگومان --gui باید
               صریحاً ارائه شود تا merge.guitool استفاده گردد.

           notes.mergeStrategy
               کدام راهبرد ادغام به‌طور پیش‌فرض هنگام حل تعارض‌های یادداشت‌ها
               انتخاب شود. باید یکی از manual، ours، theirs، union یا
               cat_sort_uniq باشد. پیش‌فرض روی manual است. برای اطلاعات بیشتر
               درباره هر راهبرد، بخش "NOTES MERGE STRATEGIES" را در git-
               notes(1) ببینید.

               این تنظیم را می‌توان با ارسال گزینه --strategy به git-notes(1)
               لغو و بازنویسی کرد.

           notes..mergeStrategy
               کدام راهبرد ادغام هنگام انجام ادغام یادداشت‌ها در
               refs/notes/ انتخاب شود. این گزینه راهبرد عمومی‌تر
               notes.mergeStrategy را لغو و بازنویسی می‌کند. برای اطلاعات بیشتر
               در مورد راهبردهای موجود، بخش "NOTES MERGE STRATEGIES" را در
               git-notes(1) ببینید.

           notes.displayRef
               علاوه بر مقدار پیش‌فرض تعیین‌شده توسط core.notesRef یا
               GIT_NOTES_REF، هنگام نمایش پیام‌های کامیت با خانواده دستورات git
               log، یادداشت‌ها از کدام مرجع (یا مراجع، در صورت استفاده از الگو
               یا تعیین چندباره) خوانده شوند.

               این تنظیم را می‌توان با متغیر محیطی GIT_NOTES_DISPLAY_REF که
               باید فهرستی از مراجع یا الگوهای عمومی جداشده با دو نقطه (:)
               باشد، لغو و بازنویسی کرد.

               برای مراجعی که وجود ندارند هشداری صادر خواهد شد، اما الگویی که
               با هیچ مرجعی تطابق نداشته باشد بدون صدا نادیده گرفته می‌شود.

               این تنظیم را می‌توان با گزینه --no-notes در خانواده دستورات git-
               log(1) یا با گزینه --notes= که توسط آن دستورات پذیرفته
               می‌شود، غیرفعال کرد.

               مقدار مؤثر core.notesRef (که احتمالاً توسط GIT_NOTES_REF
               بازنویسی شده است) نیز به‌طور ضمنی به فهرست مراجع قابل نمایش
               اضافه می‌شود.

           notes.rewrite.
               هنگام بازنویسی کامیت‌ها با  (در حال حاضر amend یا
               rebase)، اگر این متغیر false باشد، git یادداشت‌ها را از کامیت
               اصلی به کامیت بازنویسی‌شده کپی نخواهد کرد. پیش‌فرض true است.
               همچنین notes.rewriteRef را در زیر ببینید.

               این تنظیم را می‌توان با متغیر محیطی GIT_NOTES_REWRITE_REF که
               باید فهرستی از مراجع یا الگوهای عمومی جداشده با دو نقطه (:)
               باشد، لغو و بازنویسی کرد.

           notes.rewriteMode
               هنگام کپی کردن یادداشت‌ها در طول بازنویسی (گزینه
               notes.rewrite. را ببینید)، تعیین می‌کند که در صورت
               داشتن یادداشت در کامیت مقصد چه اقدامی انجام شود. باید یکی از
               overwrite، concatenate، cat_sort_uniq یا ignore باشد. پیش‌فرض
               concatenate است.

               این تنظیم را می‌توان با متغیر محیطی GIT_NOTES_REWRITE_MODE لغو و
               بازنویسی کرد.

           notes.rewriteRef
               هنگام کپی کردن یادداشت‌ها در حین بازنویسی، مرجع (کاملاً واجد
               شرایط) را مشخص می‌کند که یادداشت‌های آن باید کپی شوند. می‌تواند یک
               الگوی عمومی (glob) باشد که در این صورت یادداشت‌ها در تمام مراجع
               منطبق کپی خواهند شد. همچنین می‌توانید این پیکربندی را چندین بار
               مشخص کنید.

               مقدار پیش‌فرض ندارد؛ برای فعال کردن بازنویسی یادداشت باید این
               متغیر را پیکربندی کنید. برای فعال‌سازی بازنویسی برای یادداشت‌های
               پیش‌فرض کامیت، آن را روی refs/notes/commits تنظیم کنید.

               می‌تواند با متغیر محیطی GIT_NOTES_REWRITE_REF لغو و بازنویسی
               شود. برای توضیح بیشتر در مورد قالب آن، notes.rewrite.
               را در بالا ببینید.

           pack.window
               اندازه پنجره مورد استفاده توسط git-pack-objects(1) هنگامی که
               اندازه پنجره‌ای در خط فرمان داده نشده باشد. پیش‌فرض ۱۰ است.

           pack.depth
               حداکثر عمق دلتا مورد استفاده توسط git-pack-objects(1) هنگامی که
               حداکثر عمقی در خط فرمان داده نشده باشد. پیش‌فرض ۵۰ است. حداکثر
               مقدار ۴۰۹۵ می‌باشد.

           pack.windowMemory
               حداکثر مقدار حافظه‌ای که توسط هر ریسه (thread) در git-pack-
               objects(1) برای حافظه پنجره بسته مصرف می‌شود، در صورتی که هیچ
               محدودیتی در خط فرمان داده نشده باشد. مقدار می‌تواند با پسوندهای
               "k"، "m" یا "g" همراه باشد. هنگامی که پیکربندی نشود (یا صریحاً
               روی 0 تنظیم شود)، هیچ محدودیتی وجود نخواهد داشت.

           pack.compression
               یک عدد صحیح بین -1..9، که سطح فشرده‌سازی اشیاء را در یک فایل
               بسته (pack file) مشخص می‌کند. -1 پیش‌فرض zlib است. مقدار 0 به
               معنای عدم فشرده‌سازی است، و 1..9 موازنه‌های مختلف میان سرعت و
               اندازه هستند که 9 کندترین آن‌هاست. اگر تنظیم نشود، به صورت
               پیش‌فرض core.compression در نظر گرفته می‌شود. اگر آن هم تنظیم
               نشده باشد، مقدار پیش‌فرض -1 (پیش‌فرض zlib) خواهد بود، که «یک سازش
               پیش‌فرض میان سرعت و فشرده‌سازی است (در حال حاضر معادل سطح 6)».

               توجه داشته باشید که تغییر سطح فشرده‌سازی به‌طور خودکار تمام اشیاء
               موجود را مجدداً فشرده نمی‌کند. می‌توانید با دادن گزینه -F به git-
               repack(1) فشرده‌سازی مجدد را اجبار کنید.

           pack.allowPackReuse
               هنگامی که روی true یا "single" تنظیم شده باشد، و بیت‌مپ‌های
               دسترسی‌پذیری فعال باشند، pack-objects تلاش خواهد کرد بخش‌هایی از
               فایل بسته دارای بیت‌مپ را عیناً ارسال کند. هنگامی که روی "multi"
               تنظیم شده باشد، و یک بیت‌مپ دسترسی‌پذیری چندبسته‌ای در دسترس باشد،
               pack-objects تلاش خواهد کرد بخش‌هایی از تمام بسته‌ها را در MIDX
               ارسال کند.

               اگر فقط یک بیت‌مپ بسته تکی در دسترس باشد، و pack.allowPackReuse
               روی "multi" تنظیم شده باشد، تنها بخش‌هایی از همان فایل بسته
               دارای بیت‌مپ مجدداً استفاده می‌شود. این کار می‌تواند مصرف حافظه و
               پردازنده را برای پاسخ به واکشی‌ها کاهش دهد، اما ممکن است منجر به
               ارسال بسته‌ای کمی بزرگ‌تر شود. مقدار پیش‌فرض true است.

           pack.island
               یک عبارت باقاعده گسترش‌یافته (extended regular expression) برای
               پیکربندی مجموعه‌ای از جزیره‌های دلتا (delta islands). برای جزئیات
               به بخش "DELTA ISLANDS" در git-pack-objects(1) مراجعه کنید.

           pack.islandCore
               نام جزیره‌ای را مشخص می‌کند که اشیاء آن باید در ابتدا بسته‌بندی
               شوند. این کار نوعی شبه‌بسته (pseudo-pack) در ابتدای یک بسته
               ایجاد می‌کند، به‌طوری‌که اشیاء متعلق به جزیره مشخص‌شده با سرعت
               بیشتری در هر بسته‌ای که قرار است برای کاربری که آن اشیاء را
               درخواست کرده ارسال شود، کپی شوند. در عمل این بدان معناست که
               جزیره مشخص‌شده احتمالاً باید با آنچه معمولاً در مخزن کلون می‌شود
               مطابقت داشته باشد. همچنین به "DELTA ISLANDS" در git-pack-
               objects(1).  مراجعه کنید.

           pack.deltaCacheSize
               حداکثر حافظه بر حسب بایت که برای کش کردن دلتاها در git-pack-
               objects(1) قبل از نوشتن آن‌ها در یک بسته استفاده می‌شود. این کش
               برای افزایش سرعت مرحله نوشتن اشیاء استفاده می‌شود تا پس از یافتن
               بهترین تطابق برای تمام اشیاء، نیازی به محاسبه مجدد نتیجه نهایی
               دلتا نباشد. البته بسته‌بندی مجدد مخازن بزرگ در دستگاه‌هایی با
               حافظه محدود ممکن است از این امر به شدت متأثر شود، به‌ویژه اگر
               این کش سیستم را به فضای مبادله (swapping) بکشاند. مقدار 0 به
               معنای عدم وجود محدودیت است. کوچک‌ترین اندازه یعنی 1 بایت می‌تواند
               برای غیرفعال کردن مجازی این کش استفاده شود. مقدار پیش‌فرض 256
               MiB است.

           pack.deltaCacheLimit
               حداکثر اندازه یک دلتا که در git-pack-objects(1).  کش می‌شود. این
               کش برای افزایش سرعت مرحله نوشتن شیء استفاده می‌شود تا پس از
               یافتن بهترین تطابق برای همه اشیاء، نیازی به محاسبه مجدد نتیجه
               دلتای نهایی نباشد. مقدار پیش‌فرض 1000 است. حداکثر مقدار 65535
               می‌باشد.

           pack.threads
               تعداد ریسمان‌هایی (threads) را مشخص می‌کند که هنگام جستجو برای
               بهترین تطابق‌های دلتا ایجاد می‌شوند. این نیازمند آن است که git-
               pack-objects(1) با پشتیبانی از pthreads کامپایل شده باشد، در
               غیر این صورت این گزینه با نمایش یک هشدار نادیده گرفته می‌شود.
               این کار برای کاهش زمان بسته‌بندی در ماشین‌های چندپردازنده‌ای در
               نظر گرفته شده است. با این حال، مقدار حافظه مورد نیاز برای پنجره
               جستجوی دلتا در تعداد ریسمان‌ها ضرب می‌شود. تعیین مقدار 0 باعث
               می‌شود Git تعداد پردازنده‌ها را به‌طور خودکار تشخیص داده و تعداد
               ریسمان‌ها را متناسب با آن تنظیم کند.

           pack.indexVersion
               نسخه پیش‌فرض ایندکس بسته را مشخص می‌کند. مقادیر معتبر عبارتند از
               1 برای ایندکس بسته قدیمی که توسط نسخه‌های Git قبل از 1.5.2
               استفاده می‌شد، و 2 برای ایندکس بسته جدید با قابلیت پشتیبانی از
               بسته‌های بزرگ‌تر از 4 گیگابایت و همچنین محافظت مناسب در برابر
               بسته‌بندی مجدد بسته‌های خراب. نسخه 2 پیش‌فرض است. توجه داشته باشید
               که هر زمان بسته مربوطه بزرگ‌تر از 2 گیگابایت باشد، نسخه 2 اجباری
               شده و این گزینه پیکربندی نادیده گرفته می‌شود.

               اگر نسخه قدیمی Git را دارید که فایل *.idx نسخه 2 را درک نمی‌کند،
               کلون کردن یا واکشی از طریق یک پروتکل غیربومی (مانند "http") که
               هر دو فایل *.pack و فایل مربوطه *.idx را از طرف دیگر کپی می‌کند،
               ممکن است مخزنی به شما بدهد که با نسخه قدیمی‌تر Git شما قابل
               دسترسی نباشد. اما اگر فایل *.pack کوچک‌تر از 2 گیگابایت باشد،
               می‌توانید از git-index-pack(1) روی فایل *.pack برای تولید مجدد
               فایل *.idx استفاده کنید.

           pack.packSizeLimit
               حداکثر اندازه یک بسته. این تنظیم فقط روی بسته‌بندی در یک فایل
               هنگام بسته‌بندی مجدد تأثیر می‌گذارد، یعنی پروتکل git:// تحت تأثیر
               قرار نمی‌گیرد. این گزینه می‌تواند با گزینه --max-pack-size از
               دستور git-repack(1) بازنویسی شود. رسیدن به این محدودیت منجر به
               ایجاد چندین فایل بسته می‌شود.

               توجه داشته باشید که این گزینه به ندرت مفید است و ممکن است منجر
               به افزایش اندازه کل روی دیسک (زیرا Git دلتاها را میان بسته‌ها
               ذخیره نمی‌کند) و کارایی ضعیف‌تر در زمان اجرا شود (جستجوی اشیاء در
               چندین بسته کندتر از یک بسته است، و بهینه‌سازی‌هایی مانند بیت‌مپ‌های
               دسترسی‌پذیری نمی‌توانند با چند بسته سازگار شوند).

               اگر نیاز دارید Git را با فایل‌های بسته کوچک‌تر اجرا کنید (مثلاً به
               این دلیل که سیستم فایل شما از فایل‌های بزرگ پشتیبانی نمی‌کند)،
               این گزینه ممکن است کمک کند. اما اگر هدف شما انتقال فایل بسته از
               طریق رسانه‌ای است که از اندازه‌های محدود پشتیبانی می‌کند (مثلاً
               رسانه‌های جداشدنی که نمی‌توانند کل مخزن را ذخیره کنند)، احتمالاً
               بهتر است یک فایل بسته بزرگ تکی ایجاد کرده و آن را با استفاده از
               یک ابزار عمومی آرشیو چندبخشی (مانند split در یونیکس) تقسیم
               کنید.

               حداقل اندازه مجاز به 1 MiB محدود شده است. پیش‌فرض نامحدود است.
               پسوندهای رایج واحد k، m، یا g پشتیبانی می‌شوند.

           pack.useBitmaps
               هنگامی که روی true تنظیم شود، git هنگام بسته‌بندی در stdout
               (مانند زمان سمت سرور در یک واکشی) از بیت‌مپ‌های بسته (در صورت
               موجود بودن) استفاده خواهد کرد. مقدار پیش‌فرض true است. به‌طور کلی
               نباید نیازی به خاموش کردن این گزینه داشته باشید، مگر اینکه در
               حال اشکال‌زدایی بیت‌مپ‌های بسته باشید.

           pack.useBitmapBoundaryTraversal
               هنگامی که روی true تنظیم شود، Git از یک الگوریتم آزمایشی برای
               محاسبه پرس‌وجوهای دسترسی‌پذیری با بیت‌مپ‌ها استفاده خواهد کرد. به
               جای ساخت بیت‌مپ‌های کامل برای تمام سرشاخه‌های منفی‌شده (negated
               tips) و سپس اعمال عملگر OR بین آن‌ها، سرشاخه‌های منفی‌شده با
               بیت‌مپ‌های موجود را افزایشی در نظر می‌گیرد (یعنی اگر وجود داشته
               باشند، آن‌ها را در نتیجه OR می‌کند و در غیر این صورت از آن‌ها
               صرف‌نظر می‌کند)، و در عوض یک بیت‌مپ در مرز می‌سازد.

               هنگام استفاده از این الگوریتم، Git ممکن است به دلیل باز نکردن
               درخت‌های متعلق به کامیت‌های خاص UNINTERESTING، اشیاء بسیار زیادی
               را شامل شود. این عدم دقت با الگوریتم پیمایش بدون بیت‌مپ مطابقت
               دارد.

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

           pack.useSparse
               هنگامی که روی true تنظیم شود، git به طور پیش‌فرض هنگام حضور
               گزینه --sparse از گزینه --sparse در git pack-objects استفاده
               خواهد کرد. این الگوریتم تنها درخت‌هایی را پیمایش می‌کند که در
               مسیرهای معرفی‌کننده اشیاء جدید ظاهر می‌شوند. این کار می‌تواند
               هنگام محاسبه یک بسته برای ارسال تغییری کوچک، مزایای عملکردی
               چشمگیری داشته باشد. با این حال، اگر کامیت‌های شامل‌شده دارای
               انواع خاصی از تغییر نام‌های مستقیم باشند، ممکن است اشیاء اضافی
               به فایل بسته افزوده شوند. پیش‌فرض true است.

           pack.usePathWalk
               گزینه --path-walk را به صورت پیش‌فرض برای فرآیندهای git
               pack-objects فعال می‌کند. برای جزئیات کامل به git-pack-
               objects(1) مراجعه کنید.

           pack.preferBitmapTips
               یک سلسله‌مراتب مرجع (ref hierarchy) را مشخص می‌کند (مانند
               "refs/heads/")؛ می‌تواند چند بار برای مشخص کردن بیش از یک
               سلسله‌مراتب داده شود. هنگام انتخاب اینکه کدام کامیت‌ها بیت‌مپ
               دریافت کنند، کامیتی که در سرشاخه (tip) مرجعی قرار دارد که در هر
               یک از سلسله‌مراتب‌های پیکربندی‌شده گنجانده شده است، در اولویت قرار
               می‌گیرد.

               توجه داشته باشید که تنظیم این پیکربندی روی refs/foo/ به این
               معنی نیست که کامیت‌های موجود در سرشاخه‌های refs/foo/bar و
               refs/foo/baz لزوماً انتخاب خواهند شد. دلیل این امر آن است که
               کامیت‌ها برای بیت‌مپ‌ها از میان مجموعه‌ای از پنجره‌های با طول متغیر
               انتخاب می‌شوند.

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

           pack.writeBitmaps (منسوخ‌شده)
               این یک مترادف منسوخ‌شده برای repack.writeBitmaps است.

           pack.writeBitmapHashCache
               هنگامی که روی true تنظیم شود، git بخشی تحت عنوان "hash cache"
               را در ایندکس بیت‌مپ (در صورت نوشته شدن) شامل خواهد کرد. این کش
               می‌تواند برای تغذیه قواعد مکاشفه‌ای دلتا در git استفاده شود، که
               بالقوه منجر به دلتاهای بهتری میان اشیاء دارای بیت‌مپ و فاقد
               بیت‌مپ می‌شود (برای مثال، هنگام پاسخ‌گویی به یک واکشی میان یک بسته
               قدیمی‌تر دارای بیت‌مپ و اشیائی که پس از آخرین gc پوش شده‌اند). عیب
               آن این است که 4 بایت به ازای هر شیء از فضای دیسک را مصرف می‌کند.
               مقدار پیش‌فرض true است.

               هنگام نوشتن یک بیت‌مپ دسترسی‌پذیری چندبسته‌ای، هیچ namehash جدیدی
               محاسبه نمی‌شود؛ در عوض، هر namehash ذخیره‌شده در یک بیت‌مپ موجود
               هنگام نوشتن یک بیت‌مپ جدید به مکان مناسب خود جابه‌جا (permuted)
               می‌شود.

           pack.writeBitmapLookupTable
               هنگامی که روی true تنظیم شود، Git بخشی تحت عنوان "lookup table"
               (جدول جستجو) را در ایندکس بیت‌مپ (در صورت نوشته شدن) می‌گنجاند.
               این جدول برای به تعویق انداختن بارگذاری بیت‌مپ‌های منفرد تا جای
               ممکن استفاده می‌شود. این کار می‌تواند در مخازنی که ایندکس‌های
               بیت‌مپ نسبتاً بزرگی دارند سودمند باشد. مقدار پیش‌فرض false است.

           pack.readReverseIndex
               هنگامی که روی true تنظیم شود، git هر فایل .rev موجود را می‌خواند
               (ببینید: gitformat-pack(5)). هنگامی که روی false باشد، ایندکس
               معکوس از ابتدا تولید شده و در حافظه ذخیره می‌شود. مقدار پیش‌فرض
               true است.

           pack.writeReverseIndex
               هنگامی که روی true تنظیم شود، git برای هر فایل بسته جدیدی که
               می‌نویسد، یک فایل .rev متناظر می‌نویسد (ببینید: gitformat-
               pack(5))، در همه جا به جز در git-fast-import(1) و در سازوکار
               ثبت فله‌ای (bulk checkin). مقدار پیش‌فرض true است.

           pager.
               اگر مقدار یک بولی باشد، صفحه‌بندی خروجی یک زیردستور خاص Git را
               هنگام نوشتن در tty روشن یا خاموش می‌کند. در غیر این صورت،
               صفحه‌بندی را برای آن زیردستور با استفاده از صفحه‌بندی‌کننده‌ای
               (pager) که مقدار pager. مشخص کرده فعال می‌کند. اگر
               --paginate یا --no-pager در خط فرمان مشخص شود، بر این گزینه
               اولویت دارد. برای غیرفعال کردن صفحه‌بندی برای همه دستورات،
               core.pager یا GIT_PAGER را روی cat تنظیم کنید.

           pretty.
               نام مستعار برای یک رشته قالب --pretty=، همان‌طور که در git-
               log(1) مشخص شده است. هر نام مستعاری که در اینجا تعریف شود
               می‌تواند درست مانند قالب‌های تزیینی (pretty formats) توکار
               استفاده شود. برای مثال، اجرای git config pretty.changelog
               "format:* %H %s" باعث می‌شود که فراخوانی git log
               --pretty=changelog معادل اجرای git log "--pretty=format:* %H
               %s" باشد. توجه داشته باشید که نام مستعار هم‌نام با یک قالب
               توکار، بدون هیچ پیامی نادیده گرفته خواهد شد.

           promisor.quiet
               اگر روی "true" تنظیم شود، هنگام واکشی اشیاء اضافی برای یک کلون
               جزئی (partial clone)، گزینه --quiet فرض می‌شود.

           promisor.advertise
               اگر روی "true" تنظیم شود، یک سرور از قابلیت "promisor-remote"
               (ببینید: gitprotocol-v2(5)) برای اعلان ریموت‌های promisor که
               استفاده می‌کند (در صورت وجود) استفاده خواهد کرد. مقدار پیش‌فرض
               "false" است، به این معنی که قابلیت "promisor-remote" اعلان
               نمی‌شود.

           promisor.sendFields
               فهرستی از نام‌های فیلدهای اضافی مرتبط با ریموت که با کاما یا
               فاصله از هم جدا شده‌اند. سرور هنگام اعلان ریموت‌های promisor خود
               با استفاده از قابلیت "promisor-remote" (ببینید: gitprotocol-
               v2(5))، این نام‌های فیلد و مقادیر مرتبط با آن‌ها را از پیکربندی
               خود ارسال می‌کند. در حال حاضر، تنها نام‌های فیلد
               "partialCloneFilter" و "token" پشتیبانی می‌شوند.

           partialCloneFilter
               شامل فیلتر کلون جزئی است که برای ریموت استفاده می‌شود.

           token
               شامل یک توکن احراز هویت برای ریموت است.

               هنگامی که یک نام فیلد بخشی از این فهرست باشد و متغیر پیکربندی
               متناظر "remote.foo." در سرور روی مقداری غیرخالی
               تنظیم شده باشد، آنگاه نام و مقدار فیلد هنگام اعلان ریموت
               promisor با نام "foo" ارسال می‌شوند.

               این فهرست هیچ اثری ندارد مگر اینکه متغیر پیکربندی
               "promisor.advertise" روی "true" تنظیم شده باشد، و فیلدهای
               "name" و "url" همیشه فارغ از این تنظیم اعلان می‌شوند.

           promisor.acceptFromServer
               اگر روی "all" تنظیم شود، کلاینت تمام ریموت‌های promisor را که
               ممکن است سرور با استفاده از قابلیت "promisor-remote" اعلان کند
               می‌پذیرد. اگر روی "knownName" تنظیم شود، کلاینت ریموت‌های
               promisor را که از قبل روی کلاینت پیکربندی شده‌اند و نامی یکسان
               با موارد اعلان‌شده دارند می‌پذیرد. این حالت چندان امن نیست، اما
               می‌تواند در یک ساختار شرکتی که به سرورها و کلاینت‌ها برای تغییر
               ندادن نام و URLها اعتماد وجود دارد استفاده شود. اگر روی
               "knownUrl" تنظیم شود، کلاینت ریموت‌های promisor را می‌پذیرد که هم
               نام و هم URL یکسانی در کلاینت با نام و URL اعلان‌شده توسط سرور
               داشته باشند. این حالت از "all" یا "knownName" امن‌تر است،
               بنابراین در صورت امکان باید به جای آن گزینه‌ها استفاده شود.
               مقدار پیش‌فرض "none" است، به این معنی که هیچ ریموت promisor
               اعلان‌شده توسط سرور پذیرفته نخواهد شد. با پذیرش یک ریموت
               promisor، کلاینت موافقت می‌کند که سرور ممکن است اشیائی را که
               می‌توان آن‌ها را به‌صورت تنبل (lazily) از این ریموت promisor واکشی
               کرد، از پاسخ‌های خود به درخواست‌های "fetch" و "clone" از سوی
               کلاینت حذف کند. مقایسه‌های نام و URL به حروف بزرگ و کوچک حساس
               هستند. ببینید: gitprotocol-v2(5).

           promisor.checkFields
               فهرستی از نام‌های فیلدهای اضافی مرتبط با ریموت که با کاما یا
               فاصله از هم جدا شده‌اند. کلاینت پیش از پذیرش یک ریموت promisor
               بررسی می‌کند که آیا مقادیر این فیلدها که توسط یک سرور ارسال
               شده‌اند با مقادیر این فیلدها در پیکربندی خود مطابقت دارند یا
               خیر. در حال حاضر، "partialCloneFilter" و "token" تنها نام‌های
               فیلد پشتیبانی‌شده هستند.

               اگر یکی از این نام‌های فیلد (مثلاً "token") برای یک ریموت
               promisor اعلان‌شده (مثلاً "foo") در حال بررسی باشد، سه شرط باید
               برقرار باشد تا بررسی این فیلد خاص پذیرفته شود:

                1. پیکربندی محلی متناظر (مثلاً remote.foo.token) باید تنظیم شده
                   باشد.

                2. سرور باید فیلد "token" را برای ریموت "foo" اعلان کند.

                3. مقدار پیکربندی محلی remote.foo.token باید دقیقاً با مقدار
                   اعلان‌شده توسط سرور برای فیلد "token" مطابقت داشته باشد.

               اگر هر یک از این شرایط برای هر نام فیلد فهرست‌شده در
               promisor.checkFields برقرار نباشد، ریموت اعلان‌شده "foo" رد
               می‌شود.

               برای فیلد "partialCloneFilter"، این به کلاینت اجازه می‌دهد تا
               اطمینان حاصل کند که فیلتر سرور با آنچه کلاینت به صورت محلی
               انتظار دارد مطابقت دارد، و از ناسازگاری‌ها در رفتار فیلتر کردن
               جلوگیری شود. برای فیلد "token"، می‌توان از این برای تأیید اینکه
               اطلاعات احراز هویت با مقادیر مورد انتظار مطابقت دارند استفاده
               کرد.

               مقادیر فیلدها با حساسیت به حروف بزرگ و کوچک مقایسه می‌شوند.

               فیلدهای "name" و "url" همیشه بر اساس سیاست
               promisor.acceptFromServer و مستقل از این تنظیم بررسی می‌شوند.

               نام‌ها و مقادیر فیلدها باید از طریق قابلیت "promisor-remote"
               توسط سرور با استفاده از متغیر پیکربندی promisor.sendFields
               ارسال شوند. این فیلدها تنها در صورتی بررسی می‌شوند که متغیر
               پیکربندی promisor.acceptFromServer روی "None" تنظیم نشده باشد.
               در صورت تنظیم روی "None"، این متغیر پیکربندی هیچ اثری ندارد.
               ببینید: gitprotocol-v2(5).

           promisor.storeFields
               فهرستی از نام‌های فیلدهای اضافی مرتبط با ریموت که با کاما یا
               فاصله از هم جدا شده‌اند. اگر کلاینت یک ریموت اعلان‌شده را بپذیرد،
               مقادیر مرتبط با این نام‌های فیلد برگرفته از اعلان ریموت را در
               پیکربندی خود ذخیره کرده و سپس پیکربندی ریموت خود را مجدداً
               بارگذاری می‌کند. در حال حاضر، "partialCloneFilter" و "token"
               تنها نام‌های فیلد پشتیبانی‌شده هستند.

               برای مثال، اگر سرور "partialCloneFilter=blob:limit=20k" را برای
               ریموت "foo" اعلان کند و آن ریموت پذیرفته شود، آنگاه
               "blob:limit=20k" برای متغیر پیکربندی
               "remote.foo.partialCloneFilter" ذخیره خواهد شد.

               البته اگر مقدار جدید فیلد از یک ریموت اعلان‌شده همان مقدار فیلد
               موجود برای آن ریموت در سمت کلاینت باشد، هیچ تغییری در پیکربندی
               کلاینت داده نمی‌شود.

               هنگامی که مقدار جدیدی ذخیره می‌شود، پیامی در خطای استاندارد چاپ
               می‌شود تا کاربران را از این موضوع مطلع سازد.

               توجه داشته باشید که به دلایل امنیتی، اگر ریموت از قبل در سمت
               کلاینت پیکربندی نشده باشد، هیچ چیزی برای آن ریموت ذخیره نخواهد
               شد. در هر صورت، هیچ ریموت جدیدی ایجاد نخواهد شد و هیچ URLی
               ذخیره نخواهد شد.

               پیش از ذخیره فیلتر کلون جزئی، آن فیلتر تجزیه می‌شود تا معتبر
               بودنش بررسی گردد. اگر معتبر نباشد، هشداری صادر شده و ذخیره
               نمی‌شود.

               پیش از ذخیره توکن، بررسی انجام می‌شود تا اطمینان حاصل شود که
               فاقد نویسه‌های کنترلی است. اگر بررسی ناموفق باشد، هشداری صادر
               شده و ذخیره نمی‌شود.

           protocol.allow
               در صورت تنظیم، یک سیاست پیش‌فرض تعریف‌شده توسط کاربر برای تمام
               پروتکل‌هایی که صراحتاً سیاستی ندارند (protocol..allow)
               فراهم می‌کند. به‌طور پیش‌فرض در صورت تنظیم نشدن، پروتکل‌های
               شناخته‌شده به عنوان امن (http، https، git، ssh) دارای سیاست
               پیش‌فرض always، پروتکل‌های شناخته‌شده به عنوان خطرناک (ext) دارای
               سیاست پیش‌فرض never، و سایر پروتکل‌ها (از جمله file) دارای سیاست
               پیش‌فرض user هستند. سیاست‌های پشتیبانی‌شده:

               •   always - پروتکل همیشه قابل استفاده است.

               •   never - پروتکل هرگز قابل استفاده نیست.

               •   user - پروتکل تنها زمانی قابل استفاده است که
                   GIT_PROTOCOL_FROM_USER یا تنظیم نشده باشد یا مقدار 1 داشته
                   باشد. این سیاست باید زمانی استفاده شود که می‌خواهید پروتکل
                   مستقیماً توسط کاربر قابل استفاده باشد اما نمی‌خواهید توسط
                   دستوراتی که دستورات clone/fetch/push را بدون ورودی کاربر
                   اجرا می‌کنند (مانند مقداردهی اولیه بازگشتی زیرماژول‌ها)
                   استفاده شود.

           protocol..allow
               سیاستی را برای استفاده توسط پروتکل  با دستورات
               clone/fetch/push تنظیم می‌کند. برای سیاست‌های موجود، به
               protocol.allow در بالا مراجعه کنید.

               نام‌های پروتکل‌هایی که در حال حاضر توسط git استفاده می‌شوند
               عبارتند از:

               •   file: هر مسیر مبتنی بر فایل محلی (شامل نشانی‌های file:// یا
                   مسیرهای محلی)

               •   git: پروتکل ناشناس git روی یک اتصال مستقیم TCP (یا پروکسی،
                   در صورت پیکربندی)

               •   ssh: پروتکل git روی ssh (شامل ساختار host:path، ssh:// و
                   غیره).

               •   http: پروتکل git روی http، هم "smart http" و هم "dumb
                   http". توجه داشته باشید که این شامل https نمی‌شود؛ اگر
                   می‌خواهید هر دو را پیکربندی کنید، باید این کار را جداگانه
                   انجام دهید.

               •   هر کمک‌کننده خارجی با پروتکل خود نام‌گذاری می‌شود (برای مثال،
                   از hg برای مجاز کردن کمک‌کننده git-remote-hg استفاده کنید)

           protocol.version
               در صورت تنظیم، کلاینت‌ها تلاش خواهند کرد با استفاده از نسخه
               مشخص‌شده پروتکل با سرور ارتباط برقرار کنند. اگر سرور از آن
               پشتیبانی نکند، ارتباط به نسخه 0 تنزل می‌یابد. در صورت تنظیم
               نشدن، پیش‌فرض 2 است. نسخه‌های پشتیبانی‌شده:

               •   0 - پروتکل مخابره‌ای (wire protocol) اصلی.

               •   1 - پروتکل مخابره‌ای اصلی با اضافه شدن یک رشته نسخه در پاسخ
                   اولیه از سرور.

               •   2 - نسخه 2 پروتکل مخابره‌ای، ببینید: gitprotocol-v2(5).

           pull.ff
               به‌طور پیش‌فرض، Git هنگام ادغام کامیتی که از نوادگان کامیت فعلی
               است، کامیت ادغام اضافی ایجاد نمی‌کند. در عوض، سرشاخه شاخه فعلی
               به جلو رانده می‌شود (fast-forward). هنگامی که روی false تنظیم
               شود، این متغیر به Git می‌گوید که در چنین مواردی یک کامیت ادغام
               اضافی ایجاد کند (معادل دادن گزینه --no-ff از خط فرمان). هنگامی
               که روی only تنظیم شود، فقط چنین ادغام‌های رو به جلویی
               (fast-forward) مجاز هستند (معادل دادن گزینه --ff-only از خط
               فرمان). این تنظیم در زمان اجرای pull، گزینه merge.ff را
               بازنویسی می‌کند.

           pull.rebase
               هنگامی که true باشد، هنگام اجرای "git pull"، شاخه‌ها به جای
               ادغام با شاخه پیش‌فرض از ریموت پیش‌فرض، بر روی شاخه واکشی‌شده
               ریبیس (rebase) می‌شوند. برای تنظیم این مورد برای هر شاخه به صورت
               جداگانه، به "branch..rebase" مراجعه کنید.

               هنگامی که روی merges (یا فقط m) تنظیم شود، گزینه
               --rebase-merges به git rebase داده می‌شود تا کامیت‌های ادغام محلی
               در ریبیس گنجانده شوند (برای جزئیات به git-rebase(1) مراجعه
               کنید).

               هنگامی که مقدار interactive (یا فقط i) باشد، ریبیس در حالت
               تعاملی اجرا می‌شود.

               نکته: این عملیاتی احتمالاً خطرناک است؛ از آن استفاده نکنید مگر
               اینکه از پیامدهای آن آگاه باشید (برای جزئیات به git-rebase(1)
               مراجعه کنید).

           pull.octopus
               راهبرد ادغام پیش‌فرض برای استفاده هنگام پول کردن همزمان چند
               شاخه.

           pull.autoStash
               هنگامی که روی true تنظیم شود، پیش از شروع عملیات به‌طور خودکار
               یک مدخل موقت در اندوخته (stash) ایجاد می‌کند تا تغییرات محلی را
               ثبت کند، و پس از اتمام عملیات آن‌ها را بازیابی می‌کند. زمانی که
               "git pull" شما ریبیس انجام می‌دهد (به جای ادغام)، این کار
               می‌تواند بسیار مفید باشد؛ زیرا بر خلاف پول مبتنی بر ادغام که
               تغییرات محلی بدون تداخل با ادغام را تحمل می‌کند، پول مبتنی بر
               ریبیس از کار با هرگونه تغییر محلی خودداری می‌کند.

               اگر pull.autostash تنظیم شده باشد (چه روی true و چه false)،
               گزینه‌های merge.autostash و rebase.autostash نادیده گرفته
               می‌شوند. اگر pull.autostash اصلاً تنظیم نشده باشد، بسته به مقدار
               pull.rebase، به جای آن از merge.autostash یا rebase.autostash
               استفاده می‌شود. می‌تواند توسط گزینه خط فرمان --[no-]autostash
               بازنویسی شود.

           pull.twohead
               راهبرد ادغام پیش‌فرض برای استفاده هنگام پول کردن یک شاخه منفرد.

           push.autoSetupRemote
               اگر روی true تنظیم شود، هنگام پوش پیش‌فرض در شرایطی که هیچ
               ردیابی بالادستی (upstream tracking) برای شاخه فعلی وجود ندارد،
               گزینه --set-upstream را فرض می‌کند؛ این گزینه با مقادیر simple،
               upstream و current از تنظیم push.default اثر می‌گذارد. این تنظیم
               زمانی مفید است که بخواهید شاخه‌های جدید به‌طور پیش‌فرض به ریموت
               پیش‌فرض پوش شوند (مانند رفتار push.default=current) و همچنین
               بخواهید ردیابی بالادست تنظیم گردد. جریان‌های کاری که بیشترین
               بهره را از این گزینه می‌برند، جریان‌های کاری متمرکز simple هستند
               که در آن‌ها انتظار می‌رود تمام شاخه‌ها نام یکسانی در ریموت داشته
               باشند.

           push.default
               عملیاتی را تعریف می‌کند که git push در صورت مشخص نشدن هیچ مشخصه
               مرجعی (refspec) (چه از خط فرمان، چه پیکربندی یا جای دیگر) باید
               انجام دهد. مقادیر مختلف برای جریان‌های کاری خاصی مناسب هستند؛
               برای مثال، در یک جریان کاری کاملاً متمرکز (یعنی منبع واکشی با
               مقصد پوش یکسان است)، احتمالاً upstream همان چیزی است که
               می‌خواهید. مقادیر ممکن عبارتند از:

               nothing
                   هیچ چیزی را پوش نکن (با خطا خارج شو) مگر اینکه یک مشخصه
                   مرجع داده شده باشد. این گزینه در درجه اول برای افرادی در
                   نظر گرفته شده است که می‌خواهند با صریح بودن همیشگی، از
                   اشتباهات جلوگیری کنند.

               current
                   شاخه فعلی را برای به‌روزرسانی شاخه‌ای با همان نام در سمت
                   دریافت‌کننده پوش می‌کند. هم در جریان‌های کاری متمرکز و هم
                   غیرمتمرکز کار می‌کند.

               upstream
                   شاخه فعلی را به شاخه‌ای که تغییراتش معمولاً در شاخه فعلی
                   ادغام می‌شوند (که @{upstream} نامیده می‌شود) برمی‌گرداند و پوش
                   می‌کند. این حالت تنها در صورتی منطقی است که به همان مخزنی
                   پوش می‌کنید که معمولاً از آن پول می‌کنید (یعنی جریان کاری
                   متمرکز).

               tracking
                   این یک مترادف منسوخ‌شده برای upstream است.

               simple
                   شاخه فعلی را با همان نام در ریموت پوش می‌کند.

                   این حالت نیازمند آن است که مخزن ریموتی که قرار است به آن
                   پوش شود، شناخته‌شده باشد. هنگام پوش به همان ریموتی که از آن
                   پول می‌کنید، شاخه فعلی نیز باید یک شاخه ردیابی بالادست با
                   همان نام داشته باشد.

                   این حالت از نسخه Git 2.0 پیش‌فرض است، و امن‌ترین گزینه مناسب
                   برای مبتدیان است.

               matching
                   تمام شاخه‌هایی را که نام یکسانی در هر دو طرف دارند پوش
                   می‌کند. این باعث می‌شود مخزنی که به آن پوش می‌کنید، مجموعه
                   شاخه‌هایی را که پوش می‌شوند به خاطر بسپارد (برای مثال اگر
                   همیشه maint و master را به آنجا پوش کنید و هیچ شاخه دیگری
                   را پوش نکنید، مخزنی که به آن پوش می‌کنید دارای این دو شاخه
                   خواهد بود و شاخه‌های محلی maint و master شما به آنجا پوش
                   خواهند شد).

                   برای استفاده مؤثر از این حالت، باید مطمئن شوید که تمام
                   شاخه‌هایی که می‌خواهید پوش کنید، قبل از اجرای git push آماده
                   پوش شدن هستند؛ زیرا کل هدف این حالت این است که به شما امکان
                   دهد تمام شاخه‌ها را یک‌باره پوش کنید. اگر معمولاً کار روی تنها
                   یک شاخه را تمام کرده و نتیجه را پوش می‌کنید در حالی که سایر
                   شاخه‌ها ناتمام هستند، این حالت مناسب شما نیست. همچنین این
                   حالت برای پوش کردن به یک مخزن متمرکز اشتراکی مناسب نیست،
                   زیرا ممکن است افراد دیگر شاخه‌های جدیدی در آنجا اضافه کنند،
                   یا سرشاخه شاخه‌های موجود را خارج از کنترل شما به‌روزرسانی
                   کنند.

                   این حالت قبلاً پیش‌فرض بود، اما از Git 2.0 به بعد این‌گونه
                   نیست (simple پیش‌فرض جدید است).

           push.followTags
               اگر روی true تنظیم شود، گزینه --follow-tags را به صورت پیش‌فرض
               فعال می‌کند. می‌توانید این پیکربندی را در زمان پوش با مشخص کردن
               --no-follow-tags بازنویسی کنید.

           push.gpgSign
               می‌تواند روی یک مقدار بولی، یا رشته if-asked تنظیم شود. مقدار
               true باعث می‌شود تمام پوش‌ها با GPG امضا شوند، گویی که --signed
               به git-push(1) داده شده است. رشته if-asked باعث می‌شود پوش‌ها در
               صورتی که سرور از آن پشتیبانی کند امضا شوند، گویی که
               --signed=if-asked به git push داده شده است. مقدار false می‌تواند
               مقداری از یک فایل پیکربندی با اولویت پایین‌تر را بازنویسی کند.
               یک فلگ صریح خط فرمان همیشه این گزینه پیکربندی را بازنویسی
               می‌کند.

           push.pushOption
               هنگامی که هیچ آرگومان --push-option=