پالت فرمان

دنبال فرمانی برای اجرا بگردید…

ZarynZaryn
میزبانی کد و کنترل نسخه·۴ دقیقه مطالعه·

زیرمخزن‌ها

مخزنی دیگر درون مخزن شما، سنجاق‌شده به یک کامیت: یک کیت رابط کاربری مشترک، یک کتابخانهٔ آورده‌شده، یک دیتاست. zev خودش در clone، checkout و pull آن را می‌آورد و به‌روز می‌کند، سنجاق را در فایلی نگه می‌دارد که بازبینی می‌کنید، و کاری را که درونش انجام شده هرگز دور نمی‌ریزد. همان چیزی که زیرماژول‌های Git باید می‌بودند.

گاهی یک پروژه به پروژه‌ای دیگر با نسخه‌ای دقیق درون خودش نیاز دارد، مثل کیت رابط کاربری‌ای که سه برنامه از آن استفاده می‌کنند، کتابخانه‌ای که وصله‌اش می‌کنید، یا یک دیتاست. پاسخ Git زیرماژول‌هاست، و بیشتر کسانی که با آن‌ها کار کرده‌اند از آن‌ها دوری می‌کنند: - `--recursive` را فراموش کنید و پوشه خالی است؛ - کد درونش روی HEAD جداشده است، پس کاری که آن‌جا انجام می‌شود به‌آسانی گم می‌شود؛ - نسخه‌ای که به آن وابسته‌اید ورودی‌ای نامرئی است که بازبینی‌ها نشانش نمی‌دهند. **زیرمخزن‌های** zev ایده را نگه می‌دارند و تله‌ها را کنار می‌گذارند. ```diagram type: cards title: تفاوت زیرمخزن‌ها با زیرماژول‌ها --- 📄 | سنجاق فایلی است که می‌خوانید | .zevsubs نشانی، شاخه و کامیت هرکدام را فهرست می‌کند؛ هر تغییرش در هر دیف و بازبینی دیده می‌شود 🔁 | چیزی برای به یاد سپردن نیست | zev clone، checkout و pull خودشان زیرمخزن‌ها را می‌آورند و سر سنجاقشان می‌گذارند 🛟 | کار شما امن است | زیرمخزنی با تغییرات ذخیره‌نشده یا کامیت‌های خودش هرگز جابه‌جا نمی‌شود؛ zev به‌جایش این را می‌گوید 🌿 | همیشه روی یک شاخه | HEAD جداشده‌ای در کار نیست: درونش مثل هر مخزنی کامیت کنید ``` ## افزودن ```bash zev sub add zaryn/ui-kit lib/ui ``` zev مخزن را در `lib/ui` کلون می‌کند، نشانی، شاخه و کامیت کنونی‌اش را در `.zevsubs` می‌نویسد و آن فایل را مرحله‌بندی می‌کند. کامیتش کنید: ```bash zev commit -m "استفاده از کیت رابط کاربری مشترک" ``` ```text # Subrepositories: see them with zev sub, fetch them with zev sub update. [lib/ui] url = zaryn/ui-kit branch = main commit = 8fef7c70fd8de3da1fed658b65bab8d1c3296c6f07f4e550274e43a3fde39a9c ``` مخزن والد هرگز فایل‌های زیرمخزن را ردیابی نمی‌کند. `zev status` و `zev add .` کاری به آن‌ها ندارند، چون آن فایل‌ها به تاریخچهٔ خود زیرمخزن تعلق دارند. ## همه آن را با همان نسخه می‌گیرند ```bash zev clone you/app sub lib/ui: fetched, at its pin ``` یک کلون هر زیرمخزن را می‌آورد و سر کامیت سنجاق‌شده‌اش می‌گذارد. `zev checkout`، `zev switch` و `zev pull` هم هر وقت سنجاق عوض شود همین کار را می‌کنند: به شاخه‌ای بروید که نسخه‌ای قدیمی‌تر را سنجاق کرده و زیرمخزن دنبالش می‌آید، برگردید و آن هم برمی‌گردد. نه `--recursive` لازم است و نه گام به‌روزرسانی جداگانه. ## رفتن به نسخه‌ای تازه‌تر ```bash zev sub pull # شاخهٔ هر زیرمخزن را pull و آنچه آمد را سنجاق می‌کند zev commit -m "کیت رابط کاربری ۲٫۴" ``` `zev sub pin` آنچه یک زیرمخزن اکنون در آن است را ثبت می‌کند، مثلاً پس از این‌که اصلاحی را درونش کامیت کرده‌اید. آن اصلاح را از درون زیرمخزن هم push کنید تا دیگران بتوانند کامیتی را که سنجاق کرده‌اید بیاورند. ## ببینید کجا هستند ```bash $ zev sub ✓ lib/ui zaryn/ui-kit @ 8fef7c70 at its pin ! vendor/parser zaryn/parser @ 1c2d3e4f has commits newer than the pin: zev sub pin records them ``` هر زیرمخزن یا سر سنجاقش است، یا پشت آن، یا جلوتر از آن (کامیت‌های خودتان)، یا جای دیگر، یا نیست، یا تغییرات ذخیره‌نشده دارد، و zev برای هرکدام می‌گوید چه چیزی را اجرا کنید. `--brief` برای هرکدام یک خط می‌دهد و `--json` مسیر، نشانی، شاخه، سنجاق، کامیت کنونی، وضعیت و شمار تغییرات را. ## کار شما درون آن هرگز گم نمی‌شود زیرمخزن مخزنی عادی روی شاخه‌ای عادی است. `cd lib/ui` کنید، ویرایش، کامیت و push کنید، مثل همیشه. zev تنها وقتی جابه‌جایش می‌کند که چیزی از دست نرود: - **تغییرات ذخیره‌نشده** درونش: zev هرگز جابه‌جایش نمی‌کند و این را می‌گوید؛ - **کامیت‌های خودتان** فراتر از سنجاق: عوض کردن شاخهٔ والد آن را دست‌نخورده می‌گذارد و دلیلش را می‌گوید. `zev sub pin` آن‌ها را ثبت می‌کند؛ `zev sub update --force` آن را به سنجاق برمی‌گرداند، و `zev undo` درون زیرمخزن این را برمی‌گرداند. ## دستورها ```text zev sub هرکدام کجاست و چه نیاز دارد zev sub add <address> <folder> [--branch B] آوردن یک مخزن، سنجاق‌شده zev sub update [<folder>…] [--force] آوردن، و گذاشتن هرکدام سر سنجاقش zev sub pin [<folder>…] ثبت کامیت کنونی هرکدام zev sub pull [<folder>…] pull شاخهٔ هرکدام، سپس سنجاق zev sub remove <folder> دیگر این‌جا دنبالش نکن (فایل‌هایش می‌مانند) ``` ## آمدن از زیرماژول‌های Git `zev import-git` زیرماژول‌هایی را که پیدا کرده فهرست می‌کند. وقتی مخزن‌هایشان روی zev بود (آن‌ها را هم با `zev import-git` بیاورید)، برای هرکدام `zev sub add <address> <folder>` را اجرا کنید. | زیرماژول‌های Git | زیرمخزن‌های zev | |---|---| | `git clone --recursive`، یا پس از آن `git submodule update --init` | `zev clone`؛ پس از آن هیچ | | یک ورودی درخت و `.gitmodules`؛ نسخه در بازبینی‌ها دیده نمی‌شود | `.zevsubs`، یک فایل خوانا که کامیت در آن است | | HEAD جداشده درونش | روی یک شاخه | | `git submodule update` می‌تواند کامیت‌های ساخته‌شده درونش را دور بریزد | بی `--force` هرگز روی کار ذخیره‌نشده یا کامیت‌های خودتان جابه‌جا نمی‌شود، و برگشت‌پذیر است | | `git status` دربارهٔ وضعیت درونش چیز کمی می‌گوید | `zev sub` می‌گوید هرکدام کجاست و چه چیزی را اجرا کنید | همچنین ببینید: [شاخه‌ها و ادغام](/docs/fa/branches)، [مهاجرت از Git](/docs/fa/from-git).