SCALAR(1) Git Manual SCALAR(1)

scalar - ابزاری برای مدیریت مخازن بزرگ گیت

scalar clone [--single-branch] [--branch <main-branch>] [--full-clone]
        [--[no-]src] [--[no-]tags] [--[no-]maintenance] <url> [<enlistment>]
scalar list
scalar register [--[no-]maintenance] [<enlistment>]
scalar unregister [<enlistment>]
scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>]
scalar reconfigure [--maintenance=(enable|disable|keep)] [ --all | <enlistment> ]
scalar diagnose [<enlistment>]
scalar delete <enlistment>

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

یک مفهوم مهم در اسکلار ثبت‌نام (enlistment) است: این پوشه سطح بالای پروژه است. این پوشه معمولاً شامل زیرپوشه src/ است که یک درخت کاری (worktree) گیت می‌باشد. این ساختار تفکیک میان فایل‌های ردیابی‌شده (درون src/) و فایل‌های ردیابی‌نشده مانند خروجی‌های ساخت و کامپایل (بیرون از src/) را تقویت می‌کند. هنگام ثبت یک درخت کاری گیت موجود در اسکلار که نام آن src نیست، enlistment دقیقاً منطبق بر همان درخت کاری خواهد بود.

دستور scalar زیردستورهای مختلفی را پیاده‌سازی می‌کند و گزینه‌های متفاوتی بسته به زیردستور دارد. به استثنای clone، list و reconfigure --all، تمام زیردستورها انتظار دارند که درون یک enlistment اجرا شوند.

گزینه‌های زیر می‌توانند پیش از زیردستور مشخص شوند:

-C <directory>

پیش از اجرای زیردستور، پوشه کاری را تغییر می‌دهد. این گزینه رفتاری مشابه گزینه متناظر در git(1) دارد.

-c <key>=<value>

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

clone [<options>] <url> [<enlistment>]

مخزن مشخص‌شده را مشابه git-clone(1) کلون می‌کند. به‌طور پیش‌فرض، فقط اشیاء کامیت و درخت کلون می‌شوند. پس از اتمام، درخت کاری در <enlistment>/src قرار می‌گیرد.

قابلیت دریافت پراکنده (sparse-checkout) فعال است (به جز زمانی که با --full-clone اجرا شود) و تنها فایل‌های موجود، فایل‌های سطح بالای دایرکتوری هستند. از git sparse-checkout set برای گسترش مجموعه دایرکتوری‌هایی که می‌خواهید ببینید، یا از git sparse-checkout disable برای گسترش به تمام فایل‌ها استفاده کنید (برای جزئیات بیشتر به git-sparse-checkout(1) مراجعه فرمایید). می‌توانید زیرپوشه‌های خارج از sparse-checkout خود را با استفاده از git ls-tree HEAD[:<directory>] بررسی کنید.

-b <name>, --branch <name>

به‌جای دریافت شاخه‌ای که HEAD مخزن کلون‌شده به آن اشاره دارد، شاخه <name> را دریافت (checkout) می‌کند.

--single-branch, --no-single-branch

تنها تاریخچه منتهی به نوک یک شاخه واحد را کلون می‌کند، چه توسط گزینه --branch مشخص شده باشد و چه شاخه اصلی که HEAD ریموت به آن اشاره می‌کند.

دریافت‌های بعدی در مخزن حاصل تنها شاخه ردیابی ریموت را برای شاخه‌ای که این گزینه برای کلون اولیه آن به کار رفته بود به‌روزرسانی می‌کنند. اگر HEAD در ریموت هنگام ایجاد کلون با --single-branch به هیچ شاخه‌ای اشاره نکرده باشد، هیچ شاخه ردیابی ریموتی ایجاد نمی‌شود.

--src, --no-src

به‌طور پیش‌فرض، scalar clone مخزن کلون‌شده را درون یک دایرکتوری <enlistment>/src قرار می‌دهد. از --no-src برای قرار دادن مخزن کلون‌شده مستقیماً درون دایرکتوری <enlistment> استفاده کنید.

--tags, --no-tags

به‌طور پیش‌فرض، scalar clone اشیاء تگ اعلام‌شده توسط ریموت را دریافت می‌کند و دستورات بعدی git fetch نیز همین کار را انجام خواهند داد. از --no-tags برای جلوگیری از دریافت تگ‌ها در scalar clone و پیکربندی مخزن به منظور جلوگیری از دریافت تگ‌ها در آینده استفاده کنید. برای دریافت تگ‌ها پس از کلون با --no-tags، دستور git fetch --tags را اجرا کنید.

--full-clone, --no-full-clone

قابلیت دریافت پراکنده (sparse-checkout) به‌طور پیش‌فرض راه‌اندازی می‌شود. این رفتار را می‌توان با --full-clone غیرفعال کرد.

--maintenance, --no-maintenance

به‌طور پیش‌فرض، scalar clone enlistment را طوری پیکربندی می‌کند که از قابلیت نگهداری در پس‌زمینه گیت استفاده کند. از گزینه --no-maintenance برای صرف‌نظر کردن از این پیکربندی استفاده کنید.

list

فهرست enlistmentهایی را که هم‌اکنون توسط اسکلار ثبت شده‌اند نمایش می‌دهد. این زیردستور نیازی به اجرا درون یک enlistment ندارد.

register [<enlistment>]

مخزن enlistment را به فهرست مخازن ثبت‌شده اضافه کرده و نگهداری پس‌زمینه را آغاز می‌کند. اگر <enlistment> ارائه نشود، enlistment مرتبط با دایرکتوری کاری جاری ثبت می‌شود.

نکته: هنگامی که این زیردستور در یک درخت کاری با نام src/ فراخوانی شود، دایرکتوری والد آن به عنوان Scalar enlistment تلقی می‌گردد. اگر درخت کاری src/ نامیده نشده باشد، خود آن به عنوان Scalar enlistment در نظر گرفته خواهد شد.

--maintenance, --no-maintenance

به‌طور پیش‌فرض، scalar register پوشه enlistment را طوری پیکربندی می‌کند که از قابلیت نگهداری در پس‌زمینه گیت استفاده کند. از گزینه --no-maintenance برای صرف‌نظر کردن از این پیکربندی استفاده کنید. این کار هیچ نگهداری دیگری را که ممکن است قبلاً از روش‌های دیگر فعال شده باشد غیرفعال نمی‌کند.

unregister [<enlistment>]

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

scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>]

وظیفه نگهداری داده‌شده (یا تمام وظایف در صورت مشخص شدن all) را اجرا می‌کند. به جز all و config، این زیردستور وظایف را مستقیماً به git-maintenance(1) تحویل می‌دهد (با نگاشت fetch به prefetch و pack-files به incremental-repack).

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

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

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

--all

هنگامی که --all مشخص شود، تمام enlistmentهایی را که هم‌اکنون از طریق کلید پیکربندی scalar.repo در اسکلار ثبت شده‌اند مجدداً پیکربندی می‌کند. از این گزینه پس از هر ارتقا برای بهره‌مندی از آخرین ویژگی‌ها استفاده کنید.

--maintenance=(enable|disable|keep)

به‌طور پیش‌فرض، اسکلار enlistment را طوری پیکربندی می‌کند که از قابلیت نگهداری در پس‌زمینه گیت استفاده کند؛ این مشابه با استفاده از مقدار ‘enable’ برای این گزینه است. از مقدار disable برای حذف هر یک از enlistmentهای مدنظر از نگهداری پس‌زمینه استفاده کنید. از ‘keep’ برای دست‌نخورده باقی گذاشتن پیکربندی نگهداری پس‌زمینه برای این مخازن استفاده کنید.

diagnose [<enlistment>]

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

خروجی این دستور یک فایل .zip است که در دایرکتوری مجاور درخت کاری در پوشه src نوشته می‌شود.

delete <enlistment>

این زیردستور به شما امکان می‌دهد تا یک Scalar enlistment موجود را از فایل‌سیستم محلی خود حذف کرده و ثبت مخزن را لغو نمایید.

به عنوان بخشی از هر دو دستور scalar clone و scalar register، مقادیر پیکربندی مشخصی در گیت تنظیم می‌شوند تا عملکرد برای مخازن بزرگ یا پشتیبانی از چندسکویی (cross-platform) بهینه گردد. این گزینه‌ها در نسخه‌های جدید گیت مطابق با بهترین توصیه‌های شناخته‌شده برای مخازن بزرگ به‌روزرسانی می‌شوند و کاربران می‌توانند با اجرای scalar reconfigure [--all] آخرین توصیه‌ها را دریافت کنند.

این بخش دلایل و توجیهات مربوط به مقادیر پیکربندی تنظیم‌شده در آخرین نسخه را فهرست می‌کند.

am.keepCR=true

این تنظیم برای توسعه چندسکویی میان پلتفرم‌های ویندوز و غیرویندوز و حفظ کاراکترهای carriage return (\r) در گردش‌های کاری خاص حائز اهمیت است.

commitGraph.changedPaths=true

این تنظیم به مراحل نگهداری در پس‌زمینه که commit-graph سریالی‌شده را محاسبه می‌کنند کمک می‌کند تا فیلترهای بلوم مسیرهای تغییریافته را نیز ذخیره کنند. این کار دستورات تاریخچه فایل را تسریع کرده و به کاربران اجازه می‌دهد بدون نیاز به اجرای دستور در پیش‌زمینه، به‌طور خودکار از این مزیت بهره‌مند شوند.

commitGraph.generationVersion=1

در حالی که نسخه ترجیحی به دلایل عملکردی نسخه ۲ است، کاربران پیشینی که نسخه ۱ را به طور پیش‌فرض داشتند برای ارتقا به نسخه ۲ نیاز به مراقبت ویژه دارند. با تثبیت فرآیند ارتقا در آینده، احتمالاً این وضعیت تغییر خواهد کرد.

core.autoCRLF=false

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

core.logAllRefUpdates=true

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

core.safeCRLF=false

مشابه با core.autoCRLF=false، این گزینه بررسی‌های مربوط به برگشت‌پذیر بودن تبدیل CRLF را غیرفعال می‌کند. این یک بهبود عملکردی است، اما اگر core.autoCRLF مجدداً توسط کاربر فعال شود می‌تواند مخاطره‌آمیز باشد.

credential.https://dev.azure.com.useHttpPath=true

این تنظیم قابلیت credential.useHttpPath را فقط برای آدرس‌های وب مربوط به Azure DevOps فعال می‌سازد. این مورد برای کاربرانی که با چندین سازمان و در نتیجه چندین توکن اعتبارسنجی با آن سرویس تعامل دارند اهمیت دارد.

feature.experimental=false

این تنظیم بهینه‌سازی‌های «آزمایشی» گروه‌بندی‌شده تحت این کانفیگ را غیرفعال می‌کند. انتظار این است که تمامی بهینه‌سازی‌های ارزشمند به طور صریح توسط پیکربندی اسکلار تنظیم شوند و هرگونه تفاوت تعمدی است. تفاوت‌های بارز شامل چندین گزینه پیکربندی مرتبط با بیت‌مپ (bitmap) است که برای مخازن اسکلار متمرکز بر کلاینت غیرفعال شده‌اند.

feature.manyFiles=false

این تنظیم بهینه‌سازی‌های مربوط به «تعداد فایل‌های زیاد» گروه‌بندی‌شده تحت این ویژگی را غیرفعال می‌کند. انتظار می‌رود تمام بهینه‌سازی‌های سودمند به طور صریح توسط کانفیگ اسکلار تنظیم شوند و هر تفاوتی عامدانه است.

fetch.showForcedUpdates=false

این تنظیم بررسی انتهای دستور git fetch را غیرفعال می‌کند که در صورت اجباری بودن به‌روزرسانی ارجاع (حالتی که موقعیت قبلی از موقعیت جدید قابل دسترسی نیست) به کاربر اطلاع می‌دهد. این بررسی در مخازن بزرگ می‌تواند بسیار سنگین باشد، بنابراین غیرفعال شده و با یک پیام راهنما جایگزین شده است. مقدار advice.fetchShowForcedUpdates=false را برای غیرفعال کردن این پیام راهنما تنظیم کنید.

fetch.unpackLimit=1

این تنظیم از باز کردن بسته‌فایل‌ها (packfiles) به اشیاء منفصل حین دانلود از سرور توسط گیت جلوگیری می‌کند. حد پیش‌فرض ۱۰۰ با هدف جلوگیری از افت عملکرد ناشی از تعداد زیاد بسته‌فایل‌ها در نظر گرفته شده بود، اما اسکلار از نگهداری پس‌زمینه برای دسته‌بندی بسته‌فایل‌ها و پوشش آن‌ها با multi-pack-index استفاده می‌کند و این مشکل را برطرف می‌سازد.

fetch.writeCommitGraph=false

این تنظیم برای کمک به کاربران جهت به‌روزرسانی خودکار فایل‌های commit-graph در حین انجام عملیات دریافت (fetch) ایجاد شده بود. با این حال، این کار زمان عملیات‌های fetch و pull در پیش‌زمینه را افزایش می‌دهد و اسکلار در عوض برای این کارکرد از نگهداری در پس‌زمینه استفاده می‌کند.

gc.auto=0

این تنظیم جمع‌آوری خودکار زباله (garbage collection) را غیرفعال می‌کند، چرا که اسکلار از نگهداری پس‌زمینه برای حفظ سلامت داده‌های مخزن استفاده می‌نماید.

gui.GCWarning=false

از آنجا که اسکلار با مقداردهی gc.auto=0 جمع‌آوری زباله را غیرفعال می‌کند، ابزار git-gui ممکن است شروع به نمایش هشدار درباره این تنظیم کند. این هشدار غیرفعال می‌شود زیرا پیکربندی نگهداری پس‌زمینه اسکلار این هشدار را بی‌مورد می‌سازد.

index.skipHash=true

محاسبه هش محتوای نمایه (index) را هنگام نوشتن آن غیرفعال می‌کند. این کار به بهبود کارایی، به ویژه برای فایل‌های ایندکس بزرگ کمک می‌کند.

index.threads=true

این گزینه به گیت می‌گوید با توجه به مقدار پیش‌فرض core.preloadIndex که خواندن موازی ایندکس را فعال می‌کند، به طور خودکار تعداد رشته‌های (threads) مورد استفاده در حین خواندن نمایه را تشخیص دهد. این تنظیم صریح همچنین index.recordOffsetTable=true را برای سرعت بخشیدن به خواندن موازی نمایه فعال می‌سازد.

index.version=4

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

log.excludeDecoration=refs/prefetch/*

از آنجا که اسکلار نگهداری در پس‌زمینه را با استراتژی incremental فعال می‌کند، این تنظیم از شلوغ شدن خروجی دستور git log با ارجاع‌های ذخیره‌شده توسط عملیات پیش‌دریافت (prefetch) پس‌زمینه جلوگیری می‌نماید.

merge.renames=true

هنگام محاسبه ادغام‌ها (merges) در مخازن بزرگ، تشخیص تغییر نام‌ها برای به حداکثر رساندن احتمال دستیابی به نتیجه‌ای که به درستی اعتبارسنجی شود اهمیت بالایی دارد. کاربرانی که ادغام‌ها را به صورت محلی انجام می‌دهند بیشتر به این دلیل است که ادغام سمت سرور (از طریق pull request یا موارد مشابه) منجر به تعارض (conflict) شده است. اگرچه این تنظیم پیش‌فرض است، اما به طور ویژه برای لغو تغییر احتمالی در diff.renames که ممکن است کاربر به دلایل عملکردی اعمال کرده باشد، تنظیم می‌شود.

merge.stat=false

این تنظیم خروجی آمار diff را پس از محاسبه ادغام غیرفعال می‌کند. این کار ضمن کاهش خروجی‌های غیرضروری، عملکرد دستور git merge را برای مخازن بزرگ بهبود می‌بخشد.

pack.useBitmaps=false

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

pack.usePathWalk=true

این تنظیم گزینه --path-walk را در دستور git pack-objects به طور پیش‌فرض فعال می‌کند. این کار می‌تواند محاسبه و فشرده‌سازی بسته‌فایل‌های ایجادشده توسط git push و سایر عملیات‌های بسته‌بندی مجدد را تسریع کند.

receive.autoGC=false

مشابه با gc.auto، این تنظیم نیز به نفع نگهداری در پس‌زمینه غیرفعال شده است.

status.aheadBehind=false

این تنظیم محاسبه جلوتر/عقب‌تر بودن (ahead/behind) را که معمولاً در حین اجرای دستور git status رخ می‌دهد غیرفعال می‌سازد. این اطلاعات معمولاً توسط کاربران نادیده گرفته می‌شود اما محاسبه آن در مخازن بزرگی که روزانه هزاران کامیت دریافت می‌کنند می‌تواند بسیار پرهزینه باشد. این محاسبه با یک پیام راهنما جایگزین شده است که می‌توان با غیرفعال کردن تنظیم advice.statusAheadBehind آن را غیرفعال کرد.

تنظیمات زیر بر اساس پلتفرم مورد استفاده متفاوت هستند:

core.untrackedCache=(true|false)

قابلیت حافظه پنهان ردیابی‌نشده (untracked cache) برای بهبود عملکرد در مخازن بزرگ حائز اهمیت است، اما باگ‌هایی را روی سیستم‌فایل‌های ویندوز نشان داده است. بنابراین، این تنظیم برای پلتفرم‌های دیگر فعال ولی در ویندوز غیرفعال است.

http.sslBackend=schannel

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

git-clone(1), git-maintenance(1).

بخشی از مجموعه git(1)

2026-06-29 Git 2.55.0