GIT-WORKTREE(1) Git Manual GIT-WORKTREE(1) نام (NAME) git-worktree - مدیریت چندین درخت کاری خلاصه دستور (SYNOPSIS) git worktree add [-f] [--detach] [--checkout] [--lock [--reason ]] [--orphan] [(-b | -B) ] [] git worktree list [-v | --porcelain [-z]] git worktree lock [--reason ] git worktree move git worktree prune [-n] [-v] [--expire ] git worktree remove [-f] git worktree repair [...] git worktree unlock توضیحات (DESCRIPTION) مدیریت چندین درخت کاری متصل به یک مخزن مشترک. یک مخزن گیت می‌تواند از چندین درخت کاری پشتیبانی کند و به شما اجازه می‌دهد بیش از یک شاخه را به طور هم‌زمان دریافت و بازبینی (checkout) کنید. با دستور git worktree add یک درخت کاری جدید با مخزن مرتبط می‌شود، همراه با فراداده‌های اضافی که آن درخت کاری را از بقیه درخت‌های کاری موجود در همان مخزن متمایز می‌کند. درخت کاری همراه با این فراداده‌ها، یک «worktree» نامیده می‌شود. این درخت کاری جدید در مقایسه با «درخت کاری اصلی» (main worktree) که توسط git-init(1) یا git-clone(1) ایجاد شده است، «درخت کاری پیوند‌یافته» (linked worktree) نامیده می‌شود. یک مخزن دارای یک درخت کاری اصلی (در صورتی که یک مخزن bare نباشد) و صفر یا چند درخت کاری پیوند‌یافته است. هنگامی که کار شما با یک درخت کاری پیوند‌یافته به پایان رسید، آن را با دستور git worktree remove حذف کنید. در ساده‌ترین حالت، دستور git worktree add به‌طور خودکار شاخه جدیدی ایجاد می‌کند که نام آن آخرین مؤلفه از است؛ این قابلیت هنگامی که قصد دارید روی یک مبحث جدید کار کنید بسیار کاربردی است. برای نمونه، دستور git worktree add ../hotfix شاخه جدید hotfix را می‌سازد و آن را در مسیر ../hotfix دریافت می‌کند. اگر می‌خواهید در درخت کاری جدید روی یک شاخه از پیش موجود کار کنید، از git worktree add استفاده کنید. از سوی دیگر، چنانچه تنها قصد دارید تغییرات آزمایشی انجام دهید یا بدون به هم ریختن روند توسعه جاری آزمایشی انجام دهید، ایجاد یک درخت کاری دورریختنی (throwaway) که به هیچ شاخه‌ای وابسته نیست مناسب خواهد بود. به عنوان مثال، دستور git worktree add -d یک درخت کاری جدید با HEAD جداشده (detached) در همان کامیت شاخه جاری ایجاد می‌کند. اگر یک درخت کاری بدون استفاده از دستور git worktree remove حذف شود، فایل‌های مدیریتی مرتبط با آن که درون مخزن قرار دارند (بخش «جزئیات (DETAILS)» را در ادامه ببینید) در نهایت به صورت خودکار حذف خواهند شد (گزینه gc.worktreePruneExpire در git-config(1) را ببینید)، یا می‌توانید دستور git worktree prune را در درخت کاری اصلی یا هر درخت کاری پیوند‌یافته دیگری اجرا کنید تا فایل‌های مدیریتی منسوخ پاکسازی شوند. اگر درخت کاری برای یک درخت کاری پیوند‌یافته بر روی یک دستگاه حافظه قابل‌حمل یا یک پوشه به اشتراک گذاشته شده در شبکه قرار داشته باشد که همواره متصل (mount) نیست، می‌توانید با اجرای دستور git worktree lock از هرس شدن فایل‌های مدیریتی آن جلوگیری نمایید و به دلخواه با سوییچ --reason دلیل قفل بودن درخت کاری را شرح دهید. دستورها (COMMANDS) add [] یک درخت کاری در ایجاد کرده و را در آن دریافت و مستقر می‌کند. درخت کاری جدید به مخزن جاری متصل شده و همه چیز را به جز فایل‌های مختص هر درخت کاری نظیر HEAD، index و غیره به اشتراک می‌گذارد. برای راحتی کار، می‌تواند یک «-» تنها باشد که مترادف با @{-1} است. اگر نام یک شاخه باشد (فرض کنید ) و یافت نشود، و هیچ‌یک از گزینه‌های -b یا -B یا --detach به کار نرفته باشند، اما یک شاخه ردیابی دقیقاً در یک ریموت (فرض کنید ) با نام منطبق موجود باشد، معادل دستور زیر در نظر گرفته می‌شود: $ git worktree add --track -b / اگر شاخه در چندین ریموت وجود داشته باشد و یکی از آن‌ها با متغیر پیکربندی checkout.defaultRemote نام‌گذاری شده باشد، برای ابهام‌زدایی از آن استفاده خواهد شد، حتی اگر در بین تمام ریموت‌ها یکتا نباشد. برای نمونه آن را روی checkout.defaultRemote=origin تنظیم کنید تا چنانچه مبهم بود اما در ریموت origin وجود داشت، همیشه شاخه‌های ریموت از آنجا دریافت شوند. همچنین checkout.defaultRemote را در git-config(1) ببینید. اگر حذف شود و هیچ‌یک از گزینه‌های -b، -B یا --detach استفاده نشوند، برای سهولت کار، درخت کاری جدید با شاخه‌ای (فرض کنید ) هم‌نام با $(basename ) مرتبط می‌شود. اگر وجود نداشته باشد، شاخه جدیدی بر پایه HEAD به‌طور خودکار ایجاد می‌گردد، گویی گزینه -b داده شده است. اگر وجود داشته باشد، در صورتی که در جای دیگری دریافت نشده باشد، در درخت کاری جدید بازبینی می‌شود؛ در غیر این صورت دستور از ایجاد درخت کاری خودداری خواهد کرد (مگر آنکه از گزینه --force استفاده شود). اگر حذف شود، هیچ‌یک از گزینه‌های --detach یا --orphan به کار نروند، و هیچ شاخه محلی معتبری وجود نداشته باشد (یا شاخه‌های ریموت در صورتی که --guess-remote مشخص شده باشد)، برای سهولت، درخت کاری جدید به یک شاخه جدید هنوز متولدنشده با نام (بر اساس $(basename ) در صورتی که هیچ‌یک از -b یا -B استفاده نشده باشند) مرتبط می‌شود، گویی سوییچ --orphan به دستور ارسال شده است. در حالتی که مخزن دارای یک ریموت باشد و --guess-remote استفاده شود، اما هیچ شاخه ریموت یا محلی وجود نداشته باشد، دستور با هشداری با خطا مواجه می‌شود و به کاربر یادآوری می‌کند ابتدا از ریموت واکشی (fetch) کند (یا با استفاده از -f/--force این رفتار را نادیده بگیرد). list جزئیات هر درخت کاری را فهرست می‌کند. ابتدا درخت کاری اصلی فهرست می‌شود و پس از آن هر یک از درخت‌های کاری پیوند‌یافته قرار می‌گیرند. جزئیات خروجی شامل مواردی نظیر bare بودن درخت کاری، بازنگری (revision) که هم‌اکنون دریافت شده است، شاخه‌ای که در حال حاضر دریافت شده (یا «detached HEAD» در صورت نبود شاخه)، عبارت «locked» در صورت قفل بودن درخت کاری، و عبارت «prunable» در صورتی که درخت کاری قابل هرس توسط دستور prune باشد، است. lock اگر یک درخت کاری بر روی یک حافظه قابل‌حمل یا یک اشتراک شبکه قرار دارد که همواره متصل نیست، آن را قفل کنید تا از هرس شدن خودکار فایل‌های مدیریتی‌اش جلوگیری شود. این کار همچنین مانع جابه‌جا شدن یا حذف آن می‌گردد. به صورت اختیاری، دلیل قفل کردن را با گزینه --reason مشخص نمایید. move یک درخت کاری را به مکان جدیدی جابه‌جا می‌کند. توجه داشته باشید که درخت کاری اصلی یا درخت‌های کاری پیوند‌یافته شامل زیرماژول‌ها را نمی‌توان با این دستور جابه‌جا کرد. (با این حال، در صورتی که درخت کاری اصلی را به‌صورت دستی جابه‌جا کنید، دستور git worktree repair می‌تواند پیوند با درخت‌های کاری متصل را دوباره برقرار سازد.) prune اطلاعات درخت کاری را در مسیر $GIT_DIR/worktrees برای درخت‌های کاری که درخت کاری فیزیکی آن‌ها وجود ندارد حذف می‌کند. این دستور پس از حذف دستی یک درخت کاری که دیگر نیازی به آن نیست مفید است (هرچند دفعات بعد بهتر است از «git worktree remove» برای این منظور استفاده کنید). همچنین اگر یک درخت کاری را به جای دیگری منتقل کرده‌اید و موجب شده‌اید اطلاعات درخت کاری معلق بماند، برای اتصال مجدد درخت کاری به مکان جدید آن، به «git worktree repair» مراجعه کنید. remove یک درخت کاری را حذف می‌کند. فقط درخت‌های کاری تمیز (بدون فایل‌های ردگیری‌نشده و بدون هیچ‌گونه تغییر در فایل‌های ردگیری‌شده) قابل حذف هستند. درخت‌های کاری ناپاک یا درخت‌های حاوی زیرماژول‌ها را می‌توان با سوییچ --force حذف کرد. درخت کاری اصلی هرگز قابل حذف نیست. repair [...] در صورت امکان، فایل‌های مدیریتی درخت کاری را که به دلیل عوامل خارجی خراب یا قدیمی شده‌اند تعمیر می‌کند. برای نمونه، اگر درخت کاری اصلی (یا مخزن bare) جابه‌جا شود، درخت‌های کاری پیوند‌یافته قادر به پیدا کردن آن نخواهند بود. اجرای دستور repair در درخت کاری اصلی، اتصال را از درخت‌های کاری پیوند‌یافته به درخت کاری اصلی بازسازی می‌کند. مشابهاً، اگر درخت کاریِ یک درخت کاری پیوند‌یافته بدون استفاده از دستور git worktree move جابه‌جا شود، درخت کاری اصلی (یا مخزن bare) قادر به مکان‌یابی آن نخواهد بود. اجرای دستور repair درون درخت کاری تازه جابه‌جاشده، اتصال را دوباره برقرار می‌سازد. اگر چندین درخت کاری پیوند‌یافته جابه‌جا شده باشند، اجرای دستور repair از هر درخت کاری با قرار دادن جدید هر درخت به عنوان آرگومان، اتصال به تمام مسیرهای مشخص‌شده را مجدداً برقرار می‌کند. اگر هم درخت کاری اصلی و هم درخت‌های کاری پیوند‌یافته به صورت دستی منتقل یا کپی شده باشند، اجرای repair در درخت کاری اصلی و تعیین مسیر جدید هر درخت کاری پیوند‌یافته، کلیه ارتباطات را در هر دو سو بازسازی خواهد کرد. unlock قفل یک درخت کاری را باز می‌کند و امکان هرس شدن، جابه‌جایی یا حذف آن را فراهم می‌آورد. گزینه‌ها (OPTIONS) -f, --force به‌طور پیش‌فرض، add از ایجاد یک درخت کاری جدید خودداری می‌کند هنگامی که نام یک شاخه باشد و از پیش توسط درخت کاری دیگری دریافت شده باشد، یا اگر قبلاً به درخت کاری اختصاص داده شده اما موجود نباشد (مثلاً اگر به صورت دستی پاک شده باشد). این گزینه این تدابیر حفاظتی را نادیده می‌گیرد. برای افزودن مسیر درخت کاری مفقود اما قفل‌شده، سوییچ --force را دو بار مشخص کنید. دستور move از انتقال یک درخت کاری قفل‌شده خودداری می‌ورزد مگر آنکه سوییچ --force دو بار مشخص شده باشد. اگر مقصد از قبل به درخت کاری دیگری منتسب شده اما مفقود باشد (برای نمونه اگر به‌صورت دستی حذف شده باشد)، آنگاه --force اجازه انجام انتقال را می‌دهد؛ در صورتی که مقصد قفل باشد، سوییچ --force را دو بار به کار ببرید. دستور remove از پاک کردن یک درخت کاری ناپاک خودداری می‌کند مگر اینکه گزینه --force استفاده شود. جهت حذف یک درخت کاری قفل‌شده، گزینه --force را دو بار مشخص کنید. -b , -B همراه با دستور add، یک شاخه جدید به نام با شروع از ایجاد نموده و را درون درخت کاری جدید دریافت می‌کند. اگر حذف شود، مقدار پیش‌فرض آن HEAD خواهد بود. به‌طور پیش‌فرض، گزینه -b اگر شاخه از قبل وجود داشته باشد از ایجاد آن خودداری می‌کند. گزینه -B این محافظت را لغو کرده و را به بازنشانی می‌نماید. -d, --detach همراه با دستور add، HEAD را در درخت کاری جدید جدا می‌کند. بخش «DETACHED HEAD» را در git-checkout(1) ببینید. --checkout, --no-checkout به‌طور پیش‌فرض، دستور add محتوای را دریافت می‌کند؛ با این وجود، می‌توان از گزینه --no-checkout جهت صرف‌نظر کردن از دریافت به منظور انجام تنظیمات سفارشی (مانند پیکربندی sparse-checkout) استفاده کرد. بخش «Sparse checkout» را در git-read-tree(1) ببینید. --guess-remote, --no-guess-remote همراه با دستور worktree add ، بدون درج ، به جای ایجاد شاخه جدید بر مبنای HEAD، چنانچه شاخه ردیابی دقیقاً در یک ریموت وجود داشته باشد که با نام پایه مسیر مطابقت دارد، شاخه جدید را بر پایه آن شاخه ردیابی ریموت قرار می‌دهد و شاخه ردیابی ریموت را به عنوان بالادست («upstream») شاخه جدید علامت‌گذاری می‌کند. این حالت همچنین می‌تواند با استفاده از گزینه پیکربندی worktree.guessRemote به عنوان رفتار پیش‌فرض تنظیم شود. --relative-paths, --no-relative-paths درخت‌های کاری را با استفاده از مسیرهای نسبی یا مسیرهای مطلق (پیش‌فرض) پیوند می‌دهد. این گزینه بر متغیر پیکربندی worktree.useRelativePaths ارجحیت دارد؛ به git-config(1) مراجعه کنید. همراه با دستور repair، در صورت عدم تطابق نسبی/مطلق، فایل‌های پیوند به‌روزرسانی می‌شوند، حتی اگر پیوندها صحیح باشند. --track, --no-track هنگام ساخت یک شاخه جدید، در صورتی که یک شاخه باشد، آن را به عنوان بالادست شاخه جدید نشانه‌گذاری می‌کند. اگر یک شاخه ردیابی ریموت باشد، این رفتار پیش‌فرض است. برای جزئیات به --track در git-branch(1) مراجعه نمایید. --lock درخت کاری را پس از ایجاد در وضعیت قفل‌شده نگه می‌دارد. این عمل معادل اجرای دستور git worktree lock پس از git worktree add است، اما بدون خطر شرایط رقابتی (race condition). -n, --dry-run همراه با دستور prune، هیچ چیزی را پاک نمی‌کند؛ صرفاً مواردی را که حذف می‌شدند گزارش می‌دهد. --orphan همراه با دستور add، درخت کاری جدید و ایندکس را خالی کرده و درخت کاری را با یک شاخه متولدنشده به نام مرتبط می‌سازد. --porcelain همراه با دستور list، خروجی را در قالبی با پردازش آسان برای اسکریپت‌ها تولید می‌کند. این قالب در بین نسخه‌های گیت و بدون توجه به پیکربندی‌های کاربر پایدار باقی می‌ماند. توصیه می‌شود این سوییچ با گزینه -z همراه شود. برای جزئیات به ادامه متن رجوع کنید. -z هنگامی که گزینه --porcelain همراه با list مشخص شده باشد، پایان هر خط را به جای خط جدید با یک کاراکتر NUL علامت می‌زند. این ویژگی تجزیه خروجی را هنگامی که مسیر درخت کاری حاوی نویسه خط جدید باشد ممکن می‌سازد. -q, --quiet همراه با دستور add، پیام‌های بازخورد را مهار و ناپیدا می‌کند. -v, --verbose همراه با دستور prune، تمام حذفیات را گزارش می‌دهد. همراه با دستور list، اطلاعات اضافه‌ای درباره درخت‌های کاری ارائه می‌کند (در ادامه ببینید). --expire