| GIT-CHECKOUT-INDEX(1) | Git Manual | GIT-CHECKOUT-INDEX(1) |
نام (NAME)
git-checkout-index - کپی فایلها از ایندکس به درخت کاری
خلاصه دستور (SYNOPSIS)
git checkout-index [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
[--stage=<number>|all]
[--temp]
[--ignore-skip-worktree-bits]
[-z] [--stdin]
[--] [<file>...]
توضیحات (DESCRIPTION)
تمام فایلهای فهرستشده را از ایندکس به دایرکتوری کاری کپی میکند (فایلهای موجود بازنویسی نمیشوند).
گزینهها (OPTIONS)
-u, --index
-q, --quiet
-f, --force
-a, --all
-n, --no-create
--prefix=<string>
--stage=<number>|all
--temp
--ignore-skip-worktree-bits
--stdin
-z
--
ترتیب فلگها در گذشته اهمیت داشت، اما اکنون دیگر تفاوتی ندارد.
اجرای خالی git checkout-index هیچ کاری انجام نمیدهد. احتمالاً منظور شما git checkout-index -a بوده است. و اگر میخواهید بازنویسی را اجبار کنید، باید از git checkout-index -f -a استفاده کنید.
شهودی بودن هدف این دستور نیست؛ تکرارپذیری هدف آن است. دلیل رفتار «نبود آرگومان یعنی هیچ کاری انجام نشود» این است که در اسکریپتها بتوانید چنین کارهایی انجام دهید:
$ find . -name '*.h' -print0 | xargs -0 git checkout-index -f --
این دستور تمام فایلهای موجود *.h را با نسخههای کششده آنها جایگزین میکند. اگر یک خط فرمان خالی به معنی «همه» میبود، در این صورت همهچیز در ایندکس به اجبار تازهسازی میشد که هدف این نبود. اما از آنجا که git checkout-index گزینه --stdin را میپذیرد، استفاده از روش زیر سریعتر خواهد بود:
$ find . -name '*.h' -print0 | git checkout-index -f -z --stdin
استفاده از -- زمانی که میدانید باقی آرگومانها نام فایل هستند، ایده بسیار خوبی است؛ این کار از بروز مشکل با نام فایلهایی نظیر -a جلوگیری میکند. استفاده از -- در اسکریپتها یک شیوه مناسب و پیشنهادی است.
استفاده از --TEMP یا --STAGE=ALL (USING --TEMP OR --STAGE=ALL)
هنگامی که --temp استفاده شود (یا با --stage=all بهطور ضمنی اعمال گردد)، دستور git checkout-index برای هر مدخل ایندکس که استخراج میشود یک فایل موقت ایجاد میکند. ایندکس با اطلاعات stat بهروزرسانی نخواهد شد. این گزینهها زمانی کاربرد دارند که فراخواننده به تمام مراحل (stages) همه مدخلهای ادغامنشده نیاز داشته باشد تا فایلهای ادغامنشده توسط یک ابزار ادغام خارجی پردازش شوند.
فهرستی در stdout نوشته خواهد شد که ارتباط میان نام فایلهای موقت و مسیرهای ردگیریشده را ارائه میدهد. قالب این فهرست دارای دو حالت است:
قالب نخست زمانی استفاده میشود که --stage مشخص نشده باشد یا برابر با --stage=all نباشد. فیلد tempname نام فایل موقتی است که محتوای فایل را در بر دارد و path مسیر ردگیریشده در ایندکس است. تنها مدخلهای درخواستشده در خروجی درج میشوند.
قالب دوم زمانی استفاده میشود که --stage=all باشد. سه فیلد موقت مراحل (stage1temp, stage2temp, stage3temp) نام فایل موقت را در صورت وجود مدخل مرحله در ایندکس یا علامت . را در صورت عدم وجود مدخل مرحله درج میکنند. مسیرهایی که تنها مدخل مرحله 0 دارند همیشه از خروجی حذف میشوند.
در هر دو قالب، RS (جداکننده رکورد) بهطور پیشفرض خط جدید (newline) است اما اگر -z در خط فرمان داده شده باشد، بایت null خواهد بود. نام فایلهای موقت همیشه رشتههای امن هستند؛ هرگز شامل جداکنندههای دایرکتوری یا کاراکترهای فاصله نخواهند بود. فیلد path همیشه نسبت به دایرکتوری جاری و نام فایلهای موقت همیشه نسبت به دایرکتوری ریشه سطح بالا (top level) است.
اگر شیئی که در یک فایل موقت کپی میشود یک پیوند نمادین (symlink) باشد، محتوای پیوند در یک فایل معمولی نوشته میشود. استفاده از این اطلاعات به عهده کاربر نهایی یا دستور سطح بالا (پورسلین) است.
مثالها (EXAMPLES)
بهروزرسانی و تازهسازی فقط فایلهایی که از قبل استخراج شدهاند
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
استفاده از git checkout-index برای «برونبری یک درخت کامل»
$ git checkout-index --prefix=git-export-dir/ -a
دستور git checkout-index ایندکس را در دایرکتوری مشخصشده «برونبری» میکند.
علامت "/" پایانی اهمیت دارد. نام فایلهای برونبریشده دقیقاً با رشته تعیینشده پیشوندگذاری میشوند. این مورد را با مثال بعدی مقایسه کنید.
برونبری فایلها با یک پیشوند
$ git checkout-index --prefix=.merged- Makefile
این دستور نسخه ذخیرهشده جاری از Makefile را در فایل .merged-Makefile استخراج میکند.
همچنین ببینید (SEE ALSO)
گیت (GIT)
بخشی از مجموعه git(1)
| 2026-06-29 | Git 2.55.0 |