| HG(1) | Mercurial Manual | HG(1) |
نام (NAME)
hg - سیستم مدیریت کد منبع Mercurial
خلاصه دستور (SYNOPSIS)
hg command [option]... [argument]...
توضیحات (DESCRIPTION)
دستور hg یک واسط خط فرمان برای سیستم Mercurial ارائه میدهد.
عناصر دستور (COMMAND ELEMENTS)
- files...
- نشاندهنده یک یا چند نام فایل یا نام فایل با مسیر نسبی است؛ برای اطلاعات درباره تطبیق الگو به File Name Patterns مراجعه کنید
- path
- نشاندهنده یک مسیر در دستگاه محلی است
- revision
- نشاندهنده یک مجموعه تغییرات (changeset) است که میتواند به عنوان شماره نسخه مجموعه تغییرات، یک برچسب (tag) یا یک زیررشته یکتا از مقدار هش (hash) مجموعه تغییرات مشخص شود
- repository path
- یا نام مسیر یک مخزن محلی و یا URI یک مخزن دوردست (remote) است.
گزینهها (OPTIONS)
- -R,--repository <REPO>
- دایرکتوری ریشه مخزن یا نام فایل overlay bundle
- --cwd <DIR>
- تغییر دایرکتوری کاری
- -y, --noninteractive
- پرسشی مطرح نشود، انتخاب خودکار نخستین گزینه برای تمام اعلانها
- -q, --quiet
- جلوگیری از نمایش خروجی
- -v, --verbose
- فعال کردن خروجی با جزئیات بیشتر
- --color <TYPE>
- زمان رنگیسازی (boolean، always، auto، never یا debug)
- --config <CONFIG[+]>
- تنظیم/بازنویسی گزینه پیکربندی (استفاده از 'section.name=value')
- --config-file <HGRC[+]>
- بارگذاری فایل پیکربندی برای تنظیم/بازنویسی گزینههای پیکربندی
- --debug
- فعالسازی خروجی اشکالزدایی
- --debugger
- راهاندازی اشکالزدا (debugger)
- --encoding <ENCODE>
- تنظیم کدگذاری نویسهها (پیشفرض: UTF-8)
- --encodingmode <MODE>
- تنظیم حالت کدگذاری نویسهها (پیشفرض: strict)
- --traceback
- چاپ همیشگی ردیابی پشته (traceback) در زمان رخداد استثنا
- --time
- محاسبه مدتزمان اجرای دستور
- --profile
- چاپ نمایه (profile) اجرای دستور
- --version
- نمایش اطلاعات نسخه و خروج
- -h, --help
- نمایش راهنما و خروج
- در نظر گرفتن مجموعههای تغییرات پنهان (hidden changesets)
- --pager <TYPE>
- زمان صفحهبندی خروجی (boolean، always، auto یا never) (پیشفرض: auto)
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SH "دستورها (COMMANDS)"
ساخت مخزن (Repository creation)
clone
تهیهٔ یک رونوشت از یک مخزن موجود:
hg clone [OPTION]... SOURCE [DEST]
ایجاد یک رونوشت از یک مخزن موجود در یک دایرکتوری جدید.
اگر نام دایرکتوری مقصد مشخص نشده باشد، بهطور پیشفرض نام پایهٔ (basename) مبدأ در نظر گرفته میشود.
مکان مبدأ به فایل .hg/hgrc مخزن جدید افزوده میشود تا به عنوان پیشفرضی برای pullهای آینده استفاده شود.
تنها مسیرهای محلی و نشانیهای ssh:// به عنوان مقصد پشتیبانی میشوند. برای مقصدهای ssh://، هیچ دایرکتوری کاری یا فایل .hg/hgrc در سمت دوردست (remote) ایجاد نخواهد شد.
اگر در مخزن مبدأ نشانکی (bookmark) به نام '@' تنظیم شده باشد، آن بازنگری بهطور پیشفرض در مخزن جدید استخراج (checked out) خواهد شد.
برای استخراج یک نسخهٔ خاص از -u/--update، یا از -U/--noupdate برای ایجاد یک شبیهسازی (clone) بدون دایرکتوری کاری استفاده کنید.
برای دریافت تنها زیرمجموعهای از مجموعهتغییرات (changesets)، یک یا چند شناسهٔ بازنگری را با -r/--rev یا شاخهها را با -b/--branch مشخص کنید. مخزن شبیهسازیشدهٔ حاصل تنها شامل مجموعهتغییرات مشخصشده و نیاکان آنها خواهد بود. این گزینهها (یا 'clone src#rev dest') متضمن استفاده از --pull هستند، حتی برای مخازن مبدأ محلی.
در حالت عادیِ شبیهسازی، سمت دوردست دادههای مخزن را به یک قالب تبادل مشترک تبدیل میکند و طرف گیرنده این دادهها را به قالب ذخیرهسازی محلی خود برمیگرداند. گزینهٔ --stream حالت شبیهسازی متفاوتی را فعال میکند که اساساً فایلهای مخزن را از سمت دوردست با کمترین پردازش داده کپی میکند. این کار بار پردازشی (CPU) شبیهسازی را چه از راه دور و چه بهصورت محلی بهطور چشمگیری کاهش میدهد. با این حال، معمولاً اندازهٔ دادههای منتقلشده را ۳۰ تا ۴۰ درصد افزایش میدهد. این امر در مواردی که پهنای باند و توان ورودی/خروجی (I/O) فراوان است، بهویژه برای مخازن بزرگتر، میتواند منجر به شبیهسازی بسیار سریعتر شود. یکی از اثرهای جانبی شبیهسازی با --stream این است که تنظیمات و الزامات ذخیرهسازی روی سرور دوردست بهصورت محلی اعمال میشوند: یک کلاینت امروزی ممکن است قالب ذخیرهسازی قدیمی یا ناکارآمد مورد استفادهٔ سرور دوردست را به ارث ببرد، یا یک کلاینت قدیمی Mercurial ممکن است نتواند از یک سرور دوردست مدرن Mercurial شبیهسازی را انجام دهد.
- نکته (Note)
- مشخص کردن یک برچسب (tag)، مجموعهتغییرات برچسبخورده را شامل میشود اما مجموعهتغییراتی را که حاوی آن برچسب است در بر نمیگیرد.
برای افزایش کارایی، هر زمان که مبدأ و مقصد روی یک سیستمفایل باشند، از پیوندهای سخت (hardlinks) برای شبیهسازی استفاده میشود (توجه داشته باشید این موضوع تنها بر دادههای مخزن اعمال میشود، نه بر دایرکتوری کاری). برخی سیستمهای فایل مانند AFS، پیوند سخت را بهنادرستی پیادهسازی میکنند اما خطایی نیز گزارش نمیدهند. در این موارد، از گزینهٔ --pull برای جلوگیری از ایجاد پیوندهای سخت استفاده کنید.
ابزار Mercurial دایرکتوری کاری را به اولین بازنگری قابلاعمال از این فهرست بهروزرسانی (update) خواهد کرد:
- a.
- null در صورتی که -U داده شده باشد یا مخزن مبدأ هیچ مجموعهتغییراتی نداشته باشد
- b.
- اگر -u . داده شده باشد و مخزن مبدأ محلی باشد، والد نخستِ دایرکتوری کاریِ مخزن مبدأ
- c.
- مجموعهتغییرات مشخصشده با -u (اگر نام یک شاخه باشد، به معنای تازهترین سرشاخهٔ (head) آن شاخه است)
- d.
- مجموعهتغییرات مشخصشده با -r
- e.
- نهاییترین سرشاخهٔ مشخصشده با -b
- f.
- نهاییترین سرشاخهٔ مشخصشده با ساختار مبدأ url#branch
- g.
- بازنگری نشانهگذاریشده با نشانک '@'، در صورت وجود
- h.
- نهاییترین سرشاخهٔ شاخهٔ پیشفرض (default)
- i.
- tip
هنگام شبیهسازی از سرورهایی که از آن پشتیبانی میکنند، Mercurial ممکن است دادههای از پیش تولیدشده را از یک نشانی اینترنتی اعلامشده توسط سرور، یا بهصورت درونخطی از همان جریان واکشی کند. وقتی این کار انجام میشود، قلابهایی (hooks) که روی مجموعهتغییرات و changegroupهای دریافتی عمل میکنند ممکن است بیش از یک بار فعال شوند؛ یک بار برای هر بستهٔ (bundle) از پیش تولیدشده و همچنین برای هر دادهٔ باقیماندهٔ دیگر. علاوه بر این، در صورت بروز خطا، مخزن ممکن است به یک شبیهسازی ناقص بازگردانده (rolled back) شود. این رفتار ممکن است در نسخههای آینده تغییر کند. برای اطلاعات بیشتر hg help -e clonebundles را ببینید.
مثالها:
- شبیهسازی
یک مخزن
دوردست در
دایرکتوری
جدیدی به
نام hg/:
hg clone https://www.mercurial-scm.org/repo/hg
- ایجاد یک
رونوشت
محلی
سبکوزن:
hg clone project/ project-feature/
- شبیهسازی
از یک مسیر
مطلق روی
سرور ssh (به
اسلش
دوگانه
توجه کنید):
hg clone ssh://user@server//home/projects/alpha/
- انجام
شبیهسازی
جریانی (streaming)
همزمان با
استخراج یک
نسخهٔ مشخص:
hg clone --stream http://server/repo -u 1.5
- ایجاد یک
مخزن بدون
مجموعهتغییراتِ
پس از یک
بازنگری
مشخص:
hg clone -r 04e544 experimental/ good/
- شبیهسازی
(و ردیابی)
یک شاخهٔ
نامگذاریشدهٔ
مشخص:
hg clone https://www.mercurial-scm.org/repo/hg/#stable
برای جزئیات مربوط به مشخص کردن URLها، hg help urls را ببینید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -U, --noupdate
- شبیهسازی شامل یک دایرکتوری کاری خالی خواهد بود (تنها مخزن)
- -u,--updaterev <REV>
- بازنگری، برچسب، یا شاخه برای استخراج
- -r,--rev <REV[+]>
- همهچیز شبیهسازی نشود، بلکه این مجموعهتغییرات و نیاکان آن گنجانده شوند.TP -b,--branch <BRANCH[+]> همه چیز کلون نشود، بلکه تنها مجموعهتغییرهای این شاخه و نیاکان آنها گنجانده شود
- --pull
- استفاده از پروتکل pull برای کپی کردن متادیتا
- --uncompressed
- نام مستعاری برای --stream (منسوخ شده)
- --stream
- کلون با کمترین میزان پردازش داده
- -e,--ssh <CMD>
- مشخص کردن دستور ssh مورد استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- گواهی سرور اعتبارسنجی نشود (نادیده گرفتن پیکربندی web.cacerts)
گزینهٔ مشخصشده با [+] را میتوان چندین بار مشخص کرد
init
ایجاد یک مخزن جدید در دایرکتوری دادهشده:
hg init [-e CMD] [--remotecmd CMD] [DEST]
یک مخزن جدید در دایرکتوری دادهشده مقداردهی اولیه میکند. اگر دایرکتوری دادهشده وجود نداشته باشد، ایجاد خواهد شد.
اگر هیچ دایرکتوریای داده نشود، از دایرکتوری جاری استفاده میشود.
امکان مشخص کردن یک نشانی اینترنتی ssh:// به عنوان مقصد وجود دارد. برای اطلاعات بیشتر hg help urls را ببینید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -e,--ssh <CMD>
- مشخص کردن دستور ssh مورد استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- گواهی سرور اعتبارسنجی نشود (نادیده گرفتن پیکربندی web.cacerts)
مدیریت مخزن دوردست (Remote repository management)
incoming
نمایش مجموعهتغییرهای جدیدِ یافتشده در مبدأ:
hg incoming [-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]
نمایش مجموعهتغییرهای جدیدِ یافتشده در مسیر/نشانی اینترنتی مشخصشده یا مکان پیشفرض واکشی (pull). اینها مجموعهتغییرهایی هستند که در زمان اجرای این دستور توسط hg pull واکشی میشدند.
برای جزئیات قالبهای معتبر مبدأ، pull را ببینید.
با -B/--bookmarks، نتیجهٔ مقایسهٔ بوکمارکها بین مخازن محلی و دوردست نمایش داده میشود. با -v/--verbose، وضعیت هر بوکمارک نیز مطابق زیر نمایش مییابد:
BM1 01234567890a added BM2 1234567890ab advanced BM3 234567890abc diverged BM4 34567890abcd changed
عملی که هنگام دریافت (pull) به صورت محلی انجام میشود به وضعیت هر بوکمارک بستگی دارد:
از نقطه نظر رفتار واکشی، بوکمارکهایی که فقط در مخزن دوردست وجود دارند به عنوان added در نظر گرفته میشوند، حتی اگر در واقع به صورت محلی حذف شده باشند.
برای مخزن دوردست، در صورتی که پس از incoming دستور pull اجرا شود، استفاده از --bundle از بارگیری دوبارهٔ مجموعهتغییرها جلوگیری میکند.
مثالها:
- نمایش
تغییرات
ورودی به
همراه
وصلهها و
توضیحات
کامل:
hg incoming -vp
- نمایش
تغییرات
ورودی بدون
ادغامها،
و ذخیرهٔ یک
bundle:
hg in -vpM --bundle incoming.hg hg pull incoming.hg
- فهرست کردن
خلاصهٔ
تغییرات
درون یک bundle:
hg in changes.hg -T "{desc|firstline}\n"
اگر تغییرات ورودی وجود داشته باشد 0 و در غیر این صورت 1 را برمیگرداند.
گزینهها:
- -f, --force
- اجرا حتی اگر مخزن دوردست نامرتبط باشد
- -n, --newest-first
- نمایش جدیدترین رکورد در ابتدا
- --bundle <FILE>
- فایل برای ذخیرهٔ بستهها (bundles) در آن
- -r,--rev <REV[+]>
- یک مجموعهتغییر دوردست که قصد اضافه کردن آن وجود دارد
- -B, --bookmarks
- مقایسهٔ بوکمارکها.TP -b,--branch <BRANCH[+]> یک شاخه خاص که مایل به دریافت (pull) آن هستید
- --remote-hidden
- شامل کردن مجموعهتغییرات (changesets) پنهانشده در مخزن دوردست (آزمایشی)
- -p, --patch
- نمایش وصله (patch)
- -g, --git
- استفاده از قالب diff گسترشیافته git
- -l,--limit <NUM>
- محدود کردن تعداد تغییرات نمایشدادهشده
- -M, --no-merges
- ادغامها نمایش داده نشوند
- --stat
- خروجی خلاصهای از تغییرات در سبک diffstat
- -G, --graph
- نمایش گراف جهتدار بدون دور (DAG) بازبینیها
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت الگو (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با الگو
- -e,--ssh <CMD>
- مشخص کردن دستور ssh برای استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم اعتبارسنجی گواهی کارگزار (نادیده گرفتن پیکربندی web.cacerts)
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها (subrepositories)
گزینههای مشخصشده با [+] را میتوان چندین بار تعیین کرد
نامهای مستعار: in
outgoing
نمایش مجموعهتغییراتی که در مقصد یافت نشدند:
hg outgoing [-M] [-p] [-n] [-f] [-r REV]... [DEST]...
نمایش مجموعهتغییراتی که در مخزن مقصدِ مشخصشده یا مکان پیشفرض push یافت نمیشوند. اینها مجموعهتغییراتی هستند که در صورت درخواست push، ارسال خواهند شد.
برای جزئیات قالبهای معتبر مقصد، pull را ببینید.
با -B/--bookmarks، نتیجه مقایسه نشانکها (bookmarks) بین مخازن محلی و دوردست نمایش داده میشود. با -v/--verbose، وضعیت هر نشانک نیز مانند زیر نمایش داده میشود:
BM1 01234567890a added BM2 deleted BM3 234567890abc advanced BM4 34567890abcd diverged BM5 4567890abcde changed
اقدام انجامشده هنگام ارسال (push) به وضعیت هر نشانک بستگی دارد:
از دیدگاه رفتار عملیات push، نشانکهایی که تنها در مخزن دوردست وجود دارند، به عنوان deleted در نظر گرفته میشوند، حتی اگر در واقع در سمت دوردست اضافه شده باشند.
در صورت وجود تغییرات ارسالی (outgoing)، مقدار 0 و در غیر این صورت 1 را برمیگرداند.
گزینهها:
- -f, --force
- اجرا حتی زمانی که مقصد نامرتبط است
- -r,--rev <REV[+]>
- مجموعهتغییری که در نظر است در مقصد گنجانده شود
- -n, --newest-first
- نمایش جدیدترین رکورد در ابتدا
- -B, --bookmarks
- مقایسه نشانکها
- -b,--branch <BRANCH[+]>
- یک شاخه خاص که مایل به ارسال (push) آن هستید
- -p, --patch
- نمایش وصله (patch)
- -g, --git
- استفاده از قالب diff گسترشیافته git
- -l,--limit <NUM>
- محدود کردن تعداد تغییرات نمایشدادهشده
- -M, --no-merges
- ادغامها نمایش داده نشوند
- --stat
- خروجی خلاصهای از تغییرات در سبک diffstat
- -G, --graph
- نمایش گراف جهتدار بدون دور (DAG) بازبینیها
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت الگو (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با الگو.TP -e,--ssh <CMD> مشخص کردن دستور ssh مورد استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت ریموت
- --insecure
- عدم تأیید گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
گزینه علامتگذاریشده با [+] میتواند چندین بار مشخص شود
نامهای مستعار: out
paths
نمایش نامهای مستعار مخازن ریموت:
hg paths [NAME]
نمایش تعریف نام نمادین مسیر NAME. اگر نامی مشخص نشود، تعریف تمام نامهای موجود نمایش داده میشود.
گزینه -q/--quiet هنگام جستجوی NAME تمام خروجیها را سرکوب میکند و هنگام فهرست کردن تمام تعاریف، تنها نام مسیرها را نشان میدهد.
نامهای مسیر در بخش [paths] فایل پیکربندی شما و در /etc/mercurial/hgrc تعریف میشوند. در صورت اجرا در داخل یک مخزن، .hg/hgrc نیز استفاده میشود.
نامهای مسیر default و default-push معنای ویژهای دارند. هنگام انجام عملیات push یا pull، در صورتی که مکانی در خط فرمان مشخص نشده باشد، این نامها بهعنوان جایگزین استفاده میشوند. هنگامی که default-push تنظیم شده باشد، برای push و از default برای pull استفاده خواهد شد؛ در غیر این صورت default بهعنوان جایگزین برای هر دو به کار میرود. هنگام clone کردن یک مخزن، منبع clone بهصورت default در .hg/hgrc نوشته میشود.
- نکته
- default و default-push برای تمام عملیاتهای ورودی (مانند hg incoming) و خروجی (مانند hg outgoing، hg email و hg bundle) اعمال میشوند.
برای اطلاعات بیشتر، hg help urls را ببینید.
قالب:
کلیدواژههای زیر پشتیبانی میشوند. همچنین hg help templates را ببینید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -T,--template <TEMPLATE>
- نمایش با
قالب
دریافت تغییرات از منبع مشخصشده:
hg pull [-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]...
دریافت تغییرات از یک مخزن دوردست به مخزن محلی.
این دستور تمامی تغییرات را از مخزن در مسیر یا نشانی اینترنتی (URL) مشخصشده پیدا کرده و آنها را به مخزن محلی اضافه میکند (مخزن جاری، مگر اینکه -R مشخص شده باشد). بهطور پیشفرض، این کار نسخه رونوشت پروژه در دایرکتوری کاری را بهروز نمیکند.
هنگام کلون کردن از سرورهایی که از این قابلیت پشتیبانی میکنند، ممکن است Mercurial دادههای از پیش تولیدشده را واکشی کند. در این حالت، قلابهایی (hooks) که روی مجموعهتغییرها (changesets) و changegroupهای ورودی عمل میکنند ممکن است بیش از یک بار اجرا شوند؛ یک بار برای هر بسته (bundle) از پیش تولیدشده و همچنین برای هر داده باقیمانده اضافی. برای اطلاعات بیشتر hg help -e clonebundles را ببینید.
اگر میخواهید ببینید چه مواردی در زمان اجرای این دستور توسط یک pull اضافه میشد، از hg incoming استفاده کنید. اگر سپس تصمیم گرفتید آن تغییرات را به مخزن اضافه کنید، باید از hg pull -r X استفاده کنید که در آن X آخرین مجموعهتغییر فهرستشده توسط hg incoming است.
اگر SOURCE مشخص نشود، مسیر 'default' استفاده خواهد شد. برای اطلاعات بیشتر hg help urls را ببینید.
اگر چندین منبع مشخص شوند، آنها به صورت متوالی دریافت خواهند شد، گویی دستور چندین بار اجرا شده است. اگر --update مشخص شود، دستور در اولین --update ناموفق متوقف خواهد شد.
مشخص کردن نشانک (bookmark) به عنوان . معادل مشخص کردن نام نشانک فعال است.
میتوان از پرچم --remote-hidden برای دریافت مجموعهتغییرهای پنهان در مخزن دوردست استفاده کرد. این پرچم بر پایه «بیشترین تلاش» (best effort) عمل میکند و تنها در صورتی کار خواهد کرد که سرور از این ویژگی پشتیبانی کرده و طوری پیکربندی شده باشد که به کاربر اجازه دسترسی به مجموعهتغییرهای پنهان را بدهد. این گزینه آزمایشی است و سازگاری رو به عقب آن تضمین نمیشود.
در صورت موفقیت مقدار 0، و در صورتی که بهروزرسانی دارای فایلهای حلنشده باشد 1 را برمیگرداند.
گزینهها:
- -u, --update
- بهروزرسانی به سرشاخه (head) جدید شاخه در صورت دریافت نوادگان جدید
- -f, --force
- اجرا حتی زمانی که مخزن دوردست نامرتبط باشد
- --confirm
- تأیید عملیات pull پیش از اعمال تغییرات
- -r,--rev <REV[+]>
- مجموعهتغییر دوردست که قصد اضافه کردن آن را دارید
- -B,--bookmark <BOOKMARK[+]>
- نشانک (bookmark) برای دریافت
- -b,--branch <BRANCH[+]>
- شاخه خاصی که مایل به دریافت آن هستید
- --remote-hidden
- شامل کردن مجموعهتغییرهای پنهان در سرور دوردست (آزمایشی)
- -e,--ssh <CMD>
- مشخص کردن دستور ssh مورد استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم اعتبارسنجی گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد.SS push
ارسال تغییرات به مقصد مشخصشده:
hg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]...
مجموعهتغییرات را از مخزن محلی به مقصد مشخصشده ارسال میکند.
این عملیات متقارن با pull است: دقیقاً مشابه اجرای یک pull در مخزن مقصد از روی مخزن فعلی است.
بهطور پیشفرض، push اجازهٔ ایجاد سرشاخههای (heads) جدید را در مقصد نمیدهد، زیرا وجود چند سرشاخه مشخص نخواهد کرد از کدام سرشاخه باید استفاده شود. در این وضعیت، توصیه میشود پیش از ارسال (push)، ابتدا تغییرات را دریافت (pull) و ادغام (merge) کنید.
اگر میخواهید به push اجازه دهید یک شاخهٔ نامدار جدید که در مقصد وجود ندارد ایجاد کند، از --new-branch استفاده کنید. این کار به شما امکان میدهد بدون تحمیل سایر تغییرات، فقط یک شاخهٔ جدید ایجاد نمایید.
- نکته
- در استفاده از گزینهٔ -f/--force باید دقت ویژهای به کار برد، چرا که این گزینه تمام سرشاخههای جدید در تمام شاخهها را ارسال خواهد کرد؛ اقدامی که تقریباً همیشه باعث سردرگمی همکاران خواهد شد.
اگر از -r/--rev استفاده شود، بازبینی (revision) مشخصشده و تمام نیاکان آن به مخزن دوردست ارسال خواهند شد.
اگر از -B/--bookmark استفاده شود، بازبینی بوکمارکشدهٔ مشخص، نیاکان آن و خود بوکمارک به مخزن دوردست ارسال خواهند شد. مشخص کردن . معادل تعیین نام بوکمارک فعال است. برای ارسال تمام بوکمارکهای جاری از گزینهٔ --all-bookmarks استفاده کنید.
لطفاً برای جزئیات مهم دربارهٔ نشانیهای اینترنتی ssh:// بخش hg help urls را ببینید. اگر DESTINATION حذف شود، از یک مسیر پیشفرض استفاده خواهد شد.
هنگامی که چندین مقصد مشخص شود، push آنها را یکی پس از دیگری پردازش میکند، اما در صورت بروز خطا متوقف میشود.
گزینهٔ --pushvars رشتههایی را به سرور میفرستد که با پیشوند HG_USERVAR_ تبدیل به متغیرهای محیطی میشوند. برای مثال، --pushvars ENABLE_FEATURE=true متغیر HG_USERVAR_ENABLE_FEATURE=true را به عنوان بخشی از محیط قلابهای سمت سرور در اختیار آنها قرار میدهد.
گزینهٔ pushvars میتواند امکان بازنویسی قلابها توسط کاربر و همچنین تنظیم سطوح اشکالزدایی (debug) را فراهم کند. یک نمونه، داشتن قلابی است که کامیتهای حاوی نشانگرهای تعارض (conflict markers) را مسدود میکند، اما به کاربر اجازه میدهد در صورتی که فایل برای اهداف آزمایشی از نشانگرهای تعارض استفاده کرده یا قالب فایل حاوی رشتههایی شبیه به نشانگرهای تعارض باشد، قلاب را بازنویسی (override) کند.
بهطور پیشفرض، سرورها --pushvars را نادیده میگیرند. برای فعالسازی آن، موارد زیر را به فایل پیکربندی خود بیفزایید:
[push] pushvars.server = true
در صورت موفقیتآمیز بودن push مقدار 0، و در صورتی که چیزی برای ارسال وجود نداشته باشد مقدار 1 را برمیگرداند.
گزینهها:
- -f, --force
- ارسال اجباری (force push)
- -r,--rev <REV[+]>
- مجموعهتغییراتی که قرار است در مقصد گنجانده شود
- -B,--bookmark <BOOKMARK[+]>
- بوکمارک برای ارسال
- --all-bookmarks
- ارسال تمام بوکمارکها (آزمایشی)
- -b,--branch <BRANCH[+]>
- شاخهٔ مشخصی که مایل به ارسال آن هستید
- --new-branch
- اجازهٔ ارسال یک شاخهٔ جدید
- --pushvars <VALUE[+]>
- متغیرهایی که میتوان به سرور ارسال کرد (پیشرفته)
- --publish
- ارسال مجموعهتغییرات به صورت عمومی (آزمایشی)
- -e,--ssh <CMD>
- مشخص کردن دستور ssh برای استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم اعتبارسنجی گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد.SS serve
راهاندازی وبسرور مستقل:
hg serve [OPTION]...
یک مرورگر مخزن و سرور pull محلی تحت HTTP را راهاندازی میکند. میتوانید از این قابلیت برای اشتراکگذاری و مرور موقت (ad-hoc) مخازن استفاده کنید. توصیه میشود برای سرویسدهی به یک مخزن در بازههای زمانی طولانیتر، از یک وبسرور واقعی استفاده نمایید.
لطفاً توجه داشته باشید که سرور کنترل دسترسی را پیادهسازی نمیکند. این بدان معناست که بهطور پیشفرض، هر کسی میتواند از سرور بخواند و هیچکس به طور پیشفرض نمیتواند روی آن بنویسد. گزینهٔ web.allow-push را روی * تنظیم کنید تا به همه اجازهٔ push کردن به سرور داده شود. اگر نیاز به احراز هویت کاربران دارید، باید از یک وبسرور واقعی استفاده کنید.
بهطور پیشفرض، سرور گزارش دسترسیها را در stdout و خطاها را در stderr ثبت میکند. از گزینههای -A/--accesslog و -E/--errorlog برای ثبت گزارشها در فایل استفاده کنید.
برای اینکه سرور یک شماره پورت آزاد را برای گوش دادن انتخاب کند، شماره پورت را 0 مشخص کنید؛ در این حالت، سرور شماره پورتی را که استفاده میکند چاپ خواهد کرد.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -A,--accesslog <FILE>
- نام فایل لاگ دسترسی برای نوشتن در آن
- -d, --daemon
- اجرای سرور در پسزمینه
- --daemon-postexec <VALUE[+]>
- بهصورت داخلی توسط حالت daemon استفاده میشود
- -E,--errorlog <FILE>
- نام فایل لاگ خطا برای نوشتن در آن
- -p,--port <PORT>
- پورت برای گوش دادن (پیشفرض: 8000)
- -a,--address <ADDR>
- آدرس برای گوش دادن (پیشفرض: تمام رابطها)
- --prefix <PREFIX>
- مسیر پیشوند برای سرویسدهی از آن (پیشفرض: ریشهٔ سرور)
- -n,--name <NAME>
- نام نمایشی در صفحات وب (پیشفرض: دایرکتوری کاری)
- --web-conf <FILE>
- نام فایل پیکربندی hgweb (ببینید 'hg help hgweb')
- --webdir-conf <FILE>
- نام فایل پیکربندی hgweb (منسوخشده)
- --pid-file <FILE>
- نام فایل برای نوشتن شناسه فرایند در آن
- --stdio
- برای کلاینتهای راهدور (پیشرفته)
- --cmdserver <MODE>
- برای کلاینتهای راهدور (پیشرفته)
- -t,--templates <TEMPLATE>
- قالبهای وب برای استفاده
- --style <STYLE>
- سبک قالب برای استفاده
- -6, --ipv6
- استفاده از IPv6 به جای IPv4
- --certificate <FILE>
- فایل گواهی SSL
- --print-url
- راهاندازی و فقط چاپ URL
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
گزینهٔ علامتگذاریشده با [+] میتواند چندین بار مشخص شود.SS ایجاد تغییرات
commit
ثبت فایلهای مشخصشده یا تمامی تغییرات باقیمانده:
hg commit [OPTION]... [FILE]...
تغییرات فایلهای مشخصشده را در مخزن ثبت میکند. بر خلاف یک SCM متمرکز، این یک عملیات محلی است. برای روشی جهت توزیع فعالانهٔ تغییرات خود، hg push را ببینید.
اگر فهرستی از فایلها مشخص نشود، تمامی تغییرات گزارششده توسط hg status ثبت خواهند شد.
اگر در حال ثبت نتیجهٔ یک ادغام (merge) هستید، هیچ نام فایل یا فیلترهای -I/-X را مشخص نکنید.
اگر هیچ پیام ثبتی مشخص نشده باشد، Mercurial ویرایشگر پیکربندیشدهٔ شما را اجرا میکند که در آن میتوانید پیامی وارد کنید. در صورتی که ثبت با شکست مواجه شود، یک نسخهٔ پشتیبان از پیام خود را در .hg/last-message.txt خواهید یافت.
پرچم --close-branch میتواند برای علامتگذاری نوک (head) شاخهٔ جاری به عنوان بستهشده استفاده شود. هنگامی که تمام نوکهای یک شاخه بسته شوند، آن شاخه بستهشده تلقی شده و دیگر در فهرست نمایش داده نخواهد شد.
پرچم --amend میتواند برای اصلاح والد دایرکتوری کاری با یک ثبت جدید استفاده شود که علاوه بر تغییراتی که در حال حاضر توسط hg status گزارش میشوند، حاوی تغییرات موجود در والد نیز هست (در صورت وجود). ثبت قدیمی در یک بستهٔ پشتیبان (backup bundle) در .hg/strip-backup ذخیره میشود (برای نحوهٔ بازیابی آن، hg help bundle و hg help unbundle را ببینید).
پیام، کاربر و تاریخ از ثبت اصلاحشده گرفته میشوند مگر آنکه مشخص شده باشند. هنگامی که پیامی در خط فرمان مشخص نشده باشد، ویرایشگر با پیامِ ثبت اصلاحشده باز خواهد شد.
امکان اصلاح مجموعهتغییرات (changeset) عمومی (نگاه کنید به hg help phases) یا مجموعهتغییراتی که فرزند دارند وجود ندارد.
برای فهرستی از قالبهای معتبر -d/--date به hg help dates مراجعه کنید.
در صورت موفقیت 0، و در صورتی که چیزی تغییر نکرده باشد 1 را برمیگرداند.
مثالها:
- ثبت تمام
فایلهایی
که به .py ختم
میشوند:
hg commit --include "set:**.py"
- ثبت تمام
فایلهای
غیرباینری:
hg commit --exclude "set:binary()"
- اصلاح ثبت
جاری و
تنظیم
تاریخ به
اکنون (now):
hg commit --amend --date now
گزینهها:
- -A, --addremove
- علامتگذاری فایلهای جدید/ناموجود به عنوان اضافهشده/حذفشده پیش از ثبت
- --close-branch
- علامتگذاری نوک یک شاخه به عنوان بستهشده
- --amend
- اصلاح والد دایرکتوری کاری
- -s, --secret
- استفاده از فاز secret برای ثبت
- --draft
- استفاده از فاز draft برای ثبت
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای ثبت
- --force-close-branch
- بستن اجباری شاخه از یک مجموعهتغییرات غیر از نوک شاخه (پیشرفته)
- -i, --interactive
- استفاده از حالت تعاملی
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام ثبت
- -l,--logfile <FILE>
- خواندن پیام ثبت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ ثبت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان ثبتکننده
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
گزینههای علامتگذاریشده با [+] میتوانند چندین بار مشخص شوند
نامهای مستعار: ci
abort
لغو یک عملیات ناتمام (آزمایشی):
hg abort
یک عملیات چندمرحلهای مانند graft، histedit، rebase، merge و unshelve را در صورتی که در وضعیتی ناتمام باشند لغو میکند.
از --dry-run/-n برای اجرای آزمایشی دستور استفاده کنید.
گزینهها:
- -n, --dry-run
- عملیاتی انجام نده، فقط خروجی را چاپ کن
backout
معکوس کردن اثر changeset پیشین:
hg backout [OPTION]... [-r] REV
یک changeset جدید را آماده میکند که در آن اثر REV در دایرکتوری کاری فعلی خنثی شده است. اگر هیچ تداخلی وجود نداشته باشد، فوراً کامیت خواهد شد.
اگر REV والد دایرکتوری کاری باشد، این changeset جدید بهطور خودکار کامیت میشود (مگر اینکه --no-commit مشخص شده باشد).
- نکته
- از hg backout نمیتوان برای اصلاح یک merge ناخواسته یا نادرست استفاده کرد.
مثالها:
- معکوس کردن
اثر والد
دایرکتوری
کاری. این backout
فوراً
کامیت
خواهد شد:
hg backout -r .
- معکوس کردن
اثر
بازبینی
نادرست
پیشین 23:
hg backout -r 23
- معکوس کردن
اثر
بازبینی
نادرست
پیشین 23 و
باقی
گذاشتن
تغییرات به
صورت
کامیتنشده:
hg backout -r 23 --no-commit hg commit -m "Backout revision 23"
بهطور پیشفرض، changeset در انتظار یک والد خواهد داشت که تاریخچه خطی را حفظ میکند. با --merge، این changeset در انتظار در عوض دو والد خواهد داشت: والد قدیمی دایرکتوری کاری و یک فرزند جدید از REV که بهسادگی REV را خنثی میکند.
قبل از نسخه 1.7، رفتار بدون --merge معادل تعیین --merge و به دنبال آن hg update --clean . برای لغو merge و باقی گذاشتن فرزند REV به عنوان یک head بود تا به طور جداگانه ادغام شود.
برای فهرستی از قالبهای معتبر برای -d/--date به hg help dates مراجعه کنید.
برای روشی جهت بازگرداندن فایلها به وضعیت یک بازبینی دیگر، به hg help revert مراجعه کنید.
در صورت موفقیت 0، و اگر چیزی برای backout وجود نداشته باشد یا فایلهای حلنشده باقی مانده باشند، 1 برمیگرداند.
گزینهها:
- --merge
- ادغام با والد قدیمی dirstate پس از backout
- --commit
- کامیت در صورت عدم برخورد با تداخل (منسوخشده)
- --no-commit
- کامیت انجام نشود
- --parent <REV>
- والد انتخابی هنگام backout کردن merge (منسوخشده)
- -r,--rev <REV>
- بازبینی برای backout
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای کامیت
- -t,--tool <TOOL>
- تعیین ابزار merge
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام کامیت
- -l,--logfile <FILE>
- خواندن پیام کامیت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ کامیت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان کامیتکننده
گزینههای مشخصشده با [+] را میتوان چندین بار تعیین کرد.SS continue
یک عملیات متوقفشده را از سر میگیرد (آزمایشی):
hg continue
یک عملیات چندمرحلهای مانند graft، histedit، rebase، merge و unshelve را در صورتی که در وضعیت متوقفشده باشند، به پایان میرساند.
برای اجرای آزمایشی دستور از --dry-run/-n استفاده کنید.
گزینهها:
- -n, --dry-run
- عملیات را انجام نده، تنها خروجی را چاپ کن
graft
تغییرات را از سایر شاخهها به شاخهٔ فعلی کپی میکند:
hg graft [OPTION]... [-r REV]... REV...
این دستور از منطق ادغام (merge) در Mercurial برای کپی کردن تغییرات مجزا از سایر شاخهها بدون ادغام شاخهها در گراف تاریخچه استفاده میکند. این عمل گاهی با عنوان 'backporting' یا 'cherry-picking' شناخته میشود. بهطور پیشفرض، graft کاربر، تاریخ و توضیحات را از دستهتغییرات (changesets) مبدأ کپی میکند.
دستهتغییراتی که نیاکان بازبینی فعلی باشند، قبلاً graft شده باشند، یا از نوع ادغام (merge) باشند، نادیده گرفته خواهند شد.
اگر --log مشخص شده باشد، توضیحی به شکل زیر به انتهای پیامهای گزارش اضافه خواهد شد:
(grafted from CHANGESETHASH)
اگر --force مشخص شده باشد، بازبینیها حتی اگر از قبل نیاکان مقصد باشند یا به مقصد graft شده باشند، اعمال خواهند شد. این مورد زمانی مفید است که بازبینیها از آن زمان واگردانی (backed out) شده باشند.
اگر یک ادغام graft به تداخل بیانجامد، فرایند graft متوقف میشود تا ادغام فعلی بتواند بهصورت دستی رفع شود. پس از برطرف شدن همهٔ تداخلها، فرایند graft را میتوان با گزینهٔ -c/--continue ادامه داد.
گزینهٔ -c/--continue تمام گزینههای قبلی را مجدداً اعمال میکند.
گزینهٔ --base اطلاعات بیشتری را دربارهٔ چگونگی استفادهٔ درونی graft از merge با یک بازبینی پایهٔ سفارشی نشان میدهد. از --base میتوان برای مشخص کردن نیاکانی غیر از نخستین و تنها والد استفاده کرد.
دستور:
hg graft -r 345 --base 234
بنابراین کموبیش معادل دستور زیر است:
hg diff --from 234 --to 345 | hg import
اما از ادغام برای حل تداخلها و ردگیری فایلهای جابهجاشده استفاده میکند.
بنابراین میتوان نتیجهٔ یک ادغام را با مشخص کردن یکی از والدین ادغام بهعنوان base، در قالب یک commit واحد منتقل (backport) کرد و در نتیجه تغییرات طرف دیگر را بهطور مؤثر graft نمود.
همچنین میتوان با مشخص کردن نیاکانی دیگر بهعنوان base، چندین دستهتغییر را یکپارچه (collapse) کرده و تاریخچه را پاکسازی نمود، بسیار شبیه به rebase --collapse --keep.
پیام commit را میتوان پس از انجام کار با استفاده از commit --amend اصلاح کرد.
برای استفاده از غیرنیاکان بهعنوان base جهت واگردانی تغییرات، دستور backout و گزینهٔ پنهان --parent را ببینید.
گزینهٔ آزمایشی --to امکان graft کردن یک بازبینی را بهصورت درونحافظهای و مستقل از نسخهٔ کاری (working copy) فراهم میکند. تداخلهای ادغام در حال حاضر پشتیبانی نمیشوند و چنانچه ابزار پیکربندیشده نتواند تداخلهای پیشآمده را مدیریت کند، عملیات لغو خواهد شد.
از آنجا که عملیات در حافظه انجام میشود، فایلهای روی دیسک تغییر نخواهند کرد و ممکن است برخی قلابها (hooks) اجرا نشوند.
مثالها:
- کپی کردن یک
تغییر واحد
به شاخهٔ stable و
ویرایش
توضیحات آن:
hg update stable hg graft --edit 9393
- اعمال (graft)
دامنهای
از
دستهتغییرها
با یک
استثنا و
بهروزرسانی
تاریخها:
hg graft -D "2085::2093 and not 2091"
- ادامه دادن
graft پس از حل
تداخلها:
hg graft -c
- نمایش مبدأ
یک
دستهتغییر
graft شده:
hg log --debug -r .
- نمایش
بازبینیها
مرتبشده
بر اساس
تاریخ:
hg log -r "sort(all(), date)"
- انتقال (backport)
نتیجهٔ یک
ادغام در
قالب یک commit
واحد:
hg graft -r 123 --base 123^
- انتقال
نهایی (land) یک
شاخهٔ
ویژگی در
قالب یک
دستهتغییر:
hg up -cr default hg graft -r featureX --base "ancestor('featureX', 'default')"
برای اطلاعات بیشتر دربارهٔ مشخص کردن بازبینیها، hg help revisions را ببینید.
در صورت موفقیت 0 و در صورت وجود فایلهای حلنشده 1 را برمیگرداند.
گزینهها:
- -r,--rev <REV[+]>
- بازبینیها جهت graft.TP --base <REV> بازبینی پایه هنگام انجام ادغام graft (پیشرفته)
- --to <VALUE>
- اعمال graft به این مقصد، در حافظه (آزمایشی)
- -c, --continue
- ازسرگیری graft متوقفشده
- --stop
- متوقف کردن graft متوقفشده
- --abort
- لغو graft متوقفشده
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای ثبت (commit)
- --log
- الحاق اطلاعات graft به پیام گزارش (log)
- --no-commit
- ثبت نکن، فقط تغییرات را در دایرکتوری کاری اعمال کن
- -f, --force
- اجبار در اجرای graft
- -D, --currentdate
- ثبت تاریخ جاری به عنوان تاریخ ثبت
- -U, --currentuser
- ثبت کاربر جاری به عنوان ثبتکننده
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ ثبت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان ثبتکننده
- -t,--tool <TOOL>
- مشخص کردن ابزار ادغام
- -n, --dry-run
- عملیاتی انجام نده، فقط خروجی را چاپ کن
گزینه علامتگذاریشده با [+] میتواند چندین بار مشخص شود
merge
ادغام بازبینی دیگر در دایرکتوری کاری:
hg merge [-P] [[-r] REV]
دایرکتوری کاری فعلی با تمام تغییرات ایجادشده در بازبینی درخواستشده از زمان آخرین بازبینی والد مشترک بهروزرسانی میشود.
فایلهایی که بین هر یک از والدین تغییر کردهاند برای ثبت بعدی به عنوان تغییریافته علامتگذاری میشوند و قبل از مجاز بودن هرگونه بهروزرسانی بعدی در مخزن، باید یک ثبت انجام شود. ثبت بعدی دو والد خواهد داشت.
--tool میتواند برای مشخص کردن ابزار ادغام استفادهشده جهت ادغام فایلها به کار رود. این گزینه متغیر محیطی HGMERGE و فایلهای پیکربندی شما را لغو (نادیده) میکند. برای گزینهها به hg help merge-tools مراجعه کنید.
اگر هیچ بازبینیای مشخص نشود، والد دایرکتوری کاری یک بازبینی head باشد و شاخه فعلی دقیقاً شامل یک head دیگر باشد، به طور پیشفرض با آن head دیگر ادغام میشود. در غیر این صورت، باید بازبینی مشخصی برای ادغام ارائه شود.
برای اطلاعات درباره مدیریت تداخلهای فایل به hg help resolve مراجعه کنید.
برای لغو یک ادغام ثبتنشده، از hg merge --abort استفاده کنید که نسخه تمیزی از والد ادغام اصلی را واکشی کرده (check out) و تمام تغییرات را از بین میبرد.
در صورت موفقیت 0 و در صورت وجود فایلهای حلنشده 1 را بازمیگرداند.
گزینهها:
- -f, --force
- اجبار به ادغام، شامل تغییرات معلق (منسوخشده)
- -r,--rev <REV>
- بازبینی مورد نظر برای ادغام
- -P, --preview
- بررسی بازبینیها برای ادغام (هیچ ادغامی انجام نمیشود)
- --abort
- لغو ادغام در حال انجام
- -t,--tool <TOOL>
- مشخص کردن ابزار ادغام
bookmarks
ایجاد یک نشانک (bookmark) جدید یا فهرست کردن نشانکهای موجود:
hg bookmarks [OPTIONS]... [NAME]...
نشانکها (Bookmarks) برچسبهایی روی مجموعههای تغییرات (changesets) هستند که به ردیابی خطوط توسعه کمک میکنند. نشانکها نسخهبندی نمیشوند (unversioned) و میتوان آنها را جابهجا کرد، نامشان را تغییر داد و حذف کرد. حذف یا جابهجا کردن یک نشانک هیچ اثری بر مجموعههای تغییرات مرتبط با آن ندارد.
ایجاد یک نشانک یا بهروزرسانی (update) به آن موجب میشود که به عنوان 'فعال' ('active') علامتگذاری شود. نشانک فعال با یک '*' مشخص میشود. هنگامی که یک کامیت (commit) ایجاد میشود، نشانک فعال به کامیت جدید پیشروی میکند. اجرای سادهٔ hg update نیز در صورت امکان، نشانک فعال را به جلو خواهد برد. بهروزرسانی به جایی غیر از موقعیت نشانک، موجب غیرفعال شدن آن میشود.
نشانکها را میتوان بین مخازن push و pull کرد (ببینید: hg help push و hg help pull). اگر یک نشانک به اشتراک گذاشتهشده واگرا شود، یک 'نشانک واگرا' (divergent bookmark) جدید به شکل 'name@path' ایجاد خواهد شد. استفاده از hg merge این واگرایی را برطرف خواهد کرد.
مشخص کردن نشانک به عنوان '.' در گزینههای -m/-d/-l، معادل مشخص کردن نام نشانک فعال است.
نشانکی با نام '@' این ویژگی خاص را دارد که در صورت وجود، hg clone بهطور پیشفرض آن را checkout میکند.
قالب (Template):
کلیدواژههای زیر علاوه بر کلیدواژهها و توابع رایج قالب مانند {bookmark} پشتیبانی میشوند. همچنین ببینید: hg help templates.
- active
- بولی (Boolean). مقدار درست (True) اگر نشانک فعال باشد.
مثالها:
- ایجاد یک
نشانک فعال
برای یک خط
توسعه جدید:
hg book new-feature
- ایجاد یک
نشانک
غیرفعال به
عنوان
نشانهگذار
موقعیت:
hg book -i reviewed
- ایجاد یک
نشانک
غیرفعال
روی یک
مجموعه
تغییرات
دیگر:
hg book -r .^ tested
- تغییر نام
نشانک turkey به dinner:
hg book -m turkey dinner
- انتقال
نشانک '@' از
یک شاخهٔ
دیگر:
hg book -f @
- فقط نمایش
نام نشانک
فعال:
hg book -ql .
گزینهها:
- -f, --force
- اجبار
- -r,--rev <REV>
- بازنگری (revision) برای عملیات نشانک
- -d, --delete
- حذف یک نشانک مشخص
- -m,--rename <OLD>
- تغییر نام یک نشانک مشخص
- -i, --inactive
- علامتگذاری نشانک به عنوان غیرفعال
- -l, --list
- فهرست کردن نشانکهای موجود
- -T,--template <TEMPLATE>
- نمایش با قالب
نامهای مستعار: bookmark
تنظیم یا نمایش نام شاخهٔ فعلی:
hg branch [-fC] [NAME]
- نکته
- نامهای شاخه دائمی و سراسری هستند. بهجای آن برای ایجاد یک نشانک (bookmark) سبک از hg bookmark استفاده کنید. برای اطلاعات بیشتر درباره شاخههای نامدار و نشانکها، hg help glossary را ببینید.
بدون آرگومان، نام شاخهٔ فعلی را نمایش میدهد. با یک آرگومان، نام شاخهٔ دایرکتوری کاری را تنظیم میکند (شاخه تا زمان ثبت (commit) بعدی در مخزن وجود نخواهد داشت). رویهٔ استاندارد توصیه میکند که توسعهٔ اصلی روی شاخهٔ 'default' انجام شود.
مگر اینکه -f/--force مشخص شده باشد، دستور branch اجازه نخواهد داد نام شاخهای را تعیین کنید که از قبل وجود دارد.
برای بازنشانی شاخهٔ دایرکتوری کاری به شاخهٔ والدِ دایرکتوری کاری و لغو تغییر شاخهٔ قبلی، از -C/--clean استفاده کنید.
از دستور hg update برای جابهجایی به یک شاخهٔ موجود استفاده کنید. از hg commit --close-branch برای بستهشده علامتگذاری کردن سرشاخهٔ (head) این شاخه استفاده کنید. هنگامی که تمام سرشاخههای یک شاخه بسته شوند، شاخه بستهشده در نظر گرفته میشود.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -f, --force
- تنظیم نام شاخه حتی اگر روی یک شاخهٔ موجود سایه بیفکند
- -C, --clean
- بازنشانی نام شاخه به نام شاخهٔ والد
- -r,--rev <VALUE[+]>
- تغییر شاخههای بازبینیهای (revs) دادهشده (آزمایشی)
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
branches
فهرست کردن شاخههای نامدار مخزن:
hg branches [-c]
فهرست کردن شاخههای نامدار مخزن با مشخص کردن شاخههای غیرفعال. اگر -c/--closed مشخص شده باشد، شاخههایی که بستهشده علامتگذاری شدهاند را نیز فهرست میکند (ببینید: hg commit --close-branch).
از دستور hg update برای جابهجایی به یک شاخهٔ موجود استفاده کنید.
قالب:
کلیدواژههای زیر علاوه بر کلیدواژهها و توابع متداول قالب نظیر {branch} پشتیبانی میشوند. همچنین hg help templates را ببینید.
مقدار 0 را برمیگرداند.
گزینهها:
- -a, --active
- نمایشِ تنها شاخههایی که سرشاخههای ادغامنشده دارند (منسوخشده)
- -c, --closed
- نمایش شاخههای عادی و بستهشده
- -r,--rev <VALUE[+]>
- نمایش نام (یا نامهای) شاخه برای بازبینی (rev) دادهشده
- -T,--template <TEMPLATE>
- نمایش با استفاده از قالب
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد.SS phase
تنظیم یا نمایش نام فاز جاری:
hg phase [-p|-d|-s] [-f] [-r] [REV...]
بدون آرگومان، نام فاز بازبینی(های) جاری را نمایش میدهد.
با استفاده از یکی از گزینههای -p/--public، -d/--draft یا -s/--secret، مقدار فاز بازبینیهای مشخصشده تغییر میکند.
مگر اینکه -f/--force مشخص شده باشد، hg phase مجموعهتغییرها را از یک فاز پایینتر به فازی بالاتر منتقل نخواهد کرد. ترتیب فازها به شرح زیر است:
public < draft < secret
در صورت موفقیت 0، و اگر برخی از فازها قابل تغییر نباشند 1 برمیگرداند.
(برای اطلاعات بیشتر درباره مفهوم فازها، hg help phases را ببینید.)
گزینهها:
- -p, --public
- تنظیم فاز مجموعهتغییر به public
- -d, --draft
- تنظیم فاز مجموعهتغییر به draft
- -s, --secret
- تنظیم فاز مجموعهتغییر به secret
- -f, --force
- اجازه دادن به حرکت مرز به عقب
- -r,--rev <REV[+]>
- بازبینی هدف
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
tag
افزودن یک یا چند برچسب برای بازبینی جاری یا دادهشده:
hg tag [-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...
نامگذاری یک بازبینی خاص با استفاده از <name>.
برچسبها برای نامگذاری بازبینیهای خاصی از مخزن به کار میروند و برای مقایسهٔ بازبینیهای مختلف، بازگشت به نسخههای مهم پیشین یا علامتگذاری نقاط شاخه بهعنوان انتشارها و غیره بسیار کاربردی هستند. تغییر یک برچسب موجود معمولاً مجاز نیست؛ برای نادیدهگرفتن این محدودیت از -f/--force استفاده کنید.
اگر هیچ بازبینیای مشخص نشود، والد دایرکتوری کاری استفاده خواهد شد.
به منظور تسهیل کنترل نسخه، توزیع، و ادغام برچسبها، آنها در فایلی با نام ".hgtags" ذخیره میشوند که مشابه دیگر فایلهای پروژه مدیریت شده و در صورت نیاز میتوان آن را بهصورت دستی ویرایش کرد. این امر همچنین بدان معناست که برچسبگذاری یک کامیت جدید ایجاد میکند. فایل ".hg/localtags" برای برچسبهای محلی (که میان مخازن به اشتراک گذاشته نمیشوند) استفاده میشود.
کامیتهای برچسب معمولاً در رأس یک شاخه انجام میشوند. اگر والد دایرکتوری کاری رأس شاخه نباشد، hg tag متوقف میشود؛ برای اجبار کامیت برچسب به قرارگیری بر پایهٔ یک مجموعهتغییر غیر رأس، از -f/--force استفاده کنید.
برای دیدن فهرستی از قالبهای معتبر برای -d/--date، hg help dates را ببینید.
از آنجا که نامهای برچسب در طول جستجوی بازبینی نسبت به نامهای شاخه اولویت دارند، استفاده از نام یک شاخهٔ موجود بهعنوان نام برچسب توصیه نمیشود.
در صورت موفقیت 0 برمیگرداند.
گزینهها:
- -f, --force
- اجبار در برچسبگذاری
- -l, --local
- محلی کردن برچسب
- -r,--rev <REV>
- بازبینی برای برچسبگذاری
- --remove
- حذف یک برچسب
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای کامیت
- -m,--message <TEXT>
- استفاده از متن بهعنوان پیام کامیت
- -d,--date <DATE>
- ثبت تاریخ مشخصشده بهعنوان تاریخ کامیت
- -u,--user <USER>
- ثبت کاربر
مشخصشده
بهعنوان
کامیتکننده
فهرست کردن تگهای مخزن:
hg tags
این دستور هم تگهای عادی و هم تگهای محلی را فهرست میکند. هنگامی که سوییچ -v/--verbose استفاده شود، ستون سومی با عنوان "local" برای تگهای محلی چاپ میشود. هنگامی که سوییچ -q/--quiet استفاده شود، تنها نام تگ چاپ میشود.
قالب:
علاوه بر کلیدواژهها و توابع متداول قالب مانند {tag}، کلیدواژههای زیر نیز پشتیبانی میشوند. همچنین hg help templates را ببینید.
- type
- رشته. مقدار local برای تگهای محلی.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -T,--template <TEMPLATE>
- نمایش با استفاده از قالب
مدیریت محتوای فایل (File content management)
annotate
نمایش اطلاعات changeset خط به خط برای هر فایل:
hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...
فهرست کردن تغییرات در فایلها، به همراه نمایش شناسه بازبینی (revision id) مربوط به هر خط.
این دستور برای پی بردن به اینکه چه زمانی و توسط چه کسی تغییری ایجاد شده است مفید است.
اگر از --file، --user، یا --date استفاده کنید، شماره بازبینی نمایش داده نمیشود مگر اینکه --number را نیز مشخص کرده باشید.
بدون گزینه -a/--text، دستور annotate از پردازش فایلهایی که به عنوان دودویی (باینری) تشخیص میدهد خودداری خواهد کرد. با گزینه -a، دستور annotate فایل را در هر صورت حاشیهنویسی میکند، اگرچه نتایج آن احتمالاً نه مفید خواهند بود و نه مطلوب.
از گزینههای -L/--line-range FILE,M:N برای محدود کردن خروجی به خطوط M تا N در FILE استفاده کنید. این گزینه با --no-follow ناسازگار است و نمیتواند با آرگومانهای الگوی فایل ترکیب شود. هنگام ترکیب با --rev، محدودههای خط به وضعیت فایل در بازبینی درخواستشده اشاره دارند.
قالب:
علاوه بر کلیدواژهها و توابع متداول قالب، کلیدواژههای زیر نیز پشتیبانی میشوند. همچنین hg help templates را ببینید.
و هر مدخل از {lines} علاوه بر {date}، {node}، {rev}، {user} و غیره، زیرکلیدواژههای زیر را فراهم میکند:
برای ساختار نحو گسترش فهرست، hg help templates.operators را ببینید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -r,--rev <REV>
- حاشیهنویسی بازبینی مشخصشده
- --follow
- دنبال کردن رونوشتها/تغییرنامها و فهرست کردن نام فایل (منسوخشده)
- --no-follow
- دنبال نکردن رونوشتها و تغییرنامها
- -a, --text
- در نظر گرفتن تمام فایلها به عنوان متن
- -u, --user
- فهرست کردن پدیدآورنده (با -v به صورت کامل)
- -f, --file
- فهرست کردن نام فایل
- -d, --date
- فهرست کردن تاریخ (با -q به صورت کوتاه)
- -n, --number
- فهرست کردن شماره بازبینی (پیشفرض)
- -c, --changeset
- فهرست کردن changeset
- -l, --line-number
- نمایش شماره خط در اولین رخداد
- --skip <REV[+]>
- مجموعه بازبینی (revset) برای عدم نمایش (آزمایشی)
- -L,--line-range <FILE,RANGE[+]>
- دنبال کردن محدوده خطوط فایل مشخصشده (آزمایشی)
- -w, --ignore-all-space
- نادیده گرفتن فاصلههای خالی هنگام مقایسه خطوط
- -b, --ignore-space-change
- نادیده گرفتن تغییرات در تعداد فاصلههای خالی
- -B, --ignore-blank-lines
- نادیده گرفتن تغییراتی که تمام خطوط آنها خالی است
- -Z, --ignore-space-at-eol
- نادیده گرفتن تغییرات در فاصلههای خالی انتهای خط (EOL)
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق بر الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق بر الگوهای دادهشده
- -T,--template <TEMPLATE>
- نمایش با استفاده از قالب گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
نامهای مستعار: blame
cat
خروجی دادن بازبینی فعلی یا مشخصشدهٔ فایلها:
hg cat [OPTION]... FILE...
چاپ فایلهای مشخصشده به همان شکلی که در بازبینی ارائهشده بودهاند. اگر هیچ بازبینیای ارائه نشود، والد دایرکتوری کاری استفاده میشود.
خروجی میتواند درون یک فایل قرار گیرد، که در این حالت نام فایل با استفاده از یک رشتهٔ الگو مشخص میشود. دستور hg help templates را ببینید. علاوه بر کلیدواژههای معمول الگو، قواعد قالببندی زیر نیز پشتیبانی میشوند:
- %%
-
نویسهٔ تحتاللفظی "%"
- %s
-
نام پایهٔ (basename) فایلی که چاپ میشود
- %d
-
مسیر دایرکتوری (dirname) فایلی که چاپ میشود، یا '.' در صورت قرار داشتن در ریشهٔ مخزن
- %p
-
نام مسیر نسبی به ریشه برای فایلی که چاپ میشود
- %H
-
هش changeset (۴۰ رقم هگزادسیمال)
- %R
-
شمارهٔ بازبینی changeset
- %h
-
شکل کوتاه هش changeset (۱۲ رقم هگزادسیمال)
- %r
-
شمارهٔ بازبینی changeset با صفرهای ابتدایی (zero-padded)
- %b
-
نام پایهٔ (basename) مخزن صادرکننده
- \
-
نویسهٔ تحتاللفظی ""
الگو:
علاوه بر کلیدواژهها و توابع معمول الگو، کلیدواژههای زیر نیز پشتیبانی میشوند. همچنین hg help templates را ببینید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -o,--output <FORMAT>
- چاپ خروجی درون فایلی با نام قالببندیشده
- -r,--rev <REV>
- چاپ بازبینی مشخصشده
- --decode
- اعمال هر فیلتر رمزگشایی (decode) منطبق
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای ارائهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای ارائهشده
- -T,--template <TEMPLATE>
- نمایش با الگو
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS copy
نشانهگذاری فایلها به عنوان رونوشتشده برای commit بعدی:
hg copy [OPTION]... (SOURCE... DEST | --forget DEST...)
dest را به عنوان دارای رونوشتهای فایلهای منبع نشانهگذاری میکند. اگر dest یک دایرکتوری باشد، رونوشتها در آن دایرکتوری قرار میگیرند. اگر dest یک فایل باشد، منبع باید فقط یک فایل منفرد باشد.
به طور پیشفرض، این دستور محتوای فایلها را به همان صورتی که در دایرکتوری کاری وجود دارند کپی میکند. اگر با -A/--after فراخوانی شود، عملیات ثبت میشود، اما هیچ کپیکردنی انجام نمیگیرد.
برای لغو نشانهگذاری یک فایل مقصد به عنوان رونوشتشده، از --forget استفاده کنید. با این گزینه، نشانهگذاری تمام آرگومانهای (موقعیتی) دادهشده به عنوان رونوشت برداشته میشود. فایل(های) مقصد در جای خود باقی خواهند ماند (همچنان ردگیری میشوند). توجه داشته باشید که hg copy --forget رفتاری مشابه با hg rename --forget دارد.
این دستور به طور پیشفرض با commit بعدی اعمال میشود.
در صورت موفقیت 0 و در صورت بروز خطا 1 را برمیگرداند.
گزینهها:
- --forget
- لغو نشانهگذاری یک فایل مقصد به عنوان رونوشتشده
- -A, --after
- ثبت رونوشتی که از قبل ایجاد شده است
- --at-rev <REV>
- نشانهگذاری (یا لغو نشانهگذاری) رونوشتها در بازبینی دادهشده (آزمایشی)
- -f, --force
- رونویسی اجباری روی یک فایل مدیریتشده موجود
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -n, --dry-run
- عدم انجام عملیات، صرفاً نمایش خروجی
گزینهای که با علامت [+] مشخص شده را میتوان چندین بار تعیین کرد
نامهای مستعار: cp
diff
مقایسه (diff) مخزن (یا فایلهای انتخابشده):
hg diff [OPTION]... ([-c REV] | [--from REV1] [--to REV2]) [FILE]...
نمایش تفاوتهای میان بازبینیها برای فایلهای مشخصشده.
تفاوتهای میان فایلها با استفاده از قالب unified diff نمایش داده میشوند.
- نکته
- دستور hg diff ممکن است برای ادغامها (merges) نتایج غیرمنتظرهای تولید کند، چرا که در صورت مشخص نشدن بازبینیها، به طور پیشفرض با changeset والد اول دایرکتوری کاری مقایسه میکند. برای مقایسه با نواحی تداخل، میتوانید از --config diff.merge=yes استفاده کنید.
به طور پیشفرض، فایلهای دایرکتوری کاری با والد اول آن مقایسه میشوند. برای مشاهده تفاوتها نسبت به یک بازبینی دیگر، از --from استفاده کنید. برای مشاهده تفاوت تا یک بازبینی دیگر، از --to استفاده کنید. برای نمونه، hg diff --from .^ تفاوتها از والدِ والد (grandparent) رونوشت کاری تا رونوشت کاری را نشان میدهد، hg diff --to . تفاوت از رونوشت کاری تا والد آن را نشان میدهد (یعنی معکوس حالت پیشفرض)، و hg diff --from 1.0 --to 1.2 تفاوت بین این دو بازبینی را نشان خواهد داد.
همچنین میتوانید -c/--change را به همراه یک بازبینی مشخص کنید تا تغییرات موجود در آن changeset را نسبت به والد اولش مشاهده نمایید (یعنی hg diff -c 42 معادل hg diff --from 42^ --to 42 است).
بدون گزینه -a/--text، دستور diff از تولید تفاوت برای فایلهایی که باینری تشخیص میدهد خودداری میکند. با گزینه -a، دستور diff در هر صورت تفاوت را تولید خواهد کرد که احتمالاً با نتایج نامطلوبی همراه است.
برای تولید تفاوتها در قالب توسعهیافته git diff، از گزینه -g/--git استفاده کنید. برای اطلاعات بیشتر، hg help diffs را بخوانید.
مثالها:
- مقایسه یک
فایل در
دایرکتوری
کاری فعلی
با والد آن:
hg diff foo.c
- مقایسه دو
نسخه
تاریخی از
یک
دایرکتوری،
به همراه
اطلاعات
تغییر نام:
hg diff --git --from 1.0 --to 1.2 lib/
- دریافت
آمار
تغییرات
نسبت به
آخرین
تغییر در یک
تاریخ مشخص:
hg diff --stat --from "date('may 2')" - مقایسه
تمام
فایلهای
تازه
اضافهشده
که حاوی یک
کلیدواژه
هستند:
hg diff "set:added() and grep(GNU)"
- مقایسه یک
بازبینی و
والدین آن:
hg diff -c 9353 # مقایسه با والد اول hg diff --from 9353^ --to 9353 # همان کار با استفاده از نحو revset hg diff --from 9353^2 --to 9353 # مقایسه با والد دوم
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -r,--rev <REV[+]>
- بازبینی (منسوخشده)
- --from <REV1>
- بازبینی مبدأ برای مقایسه
- --to <REV2>
- بازبینی مقصد برای مقایسه
- -c,--change <REV>
- تغییر ایجادشده توسط بازبینی
- --ignore-changes-from-ancestors
- تنها مقایسه تغییر ایجادشده توسط بازبینی انتخابشده (آزمایشی).TP -a, --text در نظر گرفتن تمام فایلها به صورت متنی
- -g, --git
- استفاده از قالب diff گسترشیافتهٔ git (پیشفرض: diff.git)
- --binary
- تولید diffهای باینری در حالت git (پیشفرض)
- --nodates
- حذف تاریخها از سرآیندهای diff
- --noprefix
- حذف پیشوندهای a/ و b/ از نام فایلها
- -p, --show-function
- نمایش تابعی که هر تغییر در آن قرار دارد (پیشفرض: diff.showfunc)
- --reverse
- تولید یک diff که تغییرات را معکوس (خنثی) میکند
- -w, --ignore-all-space
- نادیده گرفتن فاصلههای خالی هنگام مقایسهٔ خطوط
- -b, --ignore-space-change
- نادیده گرفتن تغییرات در تعداد فاصلههای خالی
- -B, --ignore-blank-lines
- نادیده گرفتن تغییراتی که تمامی خطوط آنها خالی هستند
- -Z, --ignore-space-at-eol
- نادیده گرفتن تغییرات در فاصلههای خالی انتهای خط (EOL)
- -U,--unified <NUM>
- تعداد خطوط زمینه (context) برای نمایش
- --stat
- خروجی خلاصهٔ تغییرات به سبک diffstat
- --root <DIR>
- تولید diffها بهصورت نسبی نسبت به زیردایرکتوری
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای ارائهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای ارائهشده
- -S, --subrepos
- پیمایش بازگشتی درون مخزنهای فرعی (subrepositories)
گزینهٔ علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
grep
جستجوی یک الگو در فایلهای مشخصشده:
hg grep [--diff] [OPTION]... PATTERN [FILE]...
جستجوی یک عبارت باقاعده در فایلهای مشخصشده در کل مخزن، درون دایرکتوری کاری یا تاریخچهٔ نسخهها.
بهطور پیشفرض، grep فایلهای مخزن را در دایرکتوری کاری جستجو کرده و فایلهایی را که در آنها تطابق پیدا کند چاپ میکند. برای مشخص کردن نسخههای پیشین به جای دایرکتوری کاری، از پرچم --rev استفاده کنید.
برای جستجو در تفاوتهای نسخههای پیشین که شامل تغییری در وضعیت تطابق هستند (“-” برای تطابقی که به عدم تطابق تبدیل میشود، یا “+” برای عدم تطابقی که به تطابق تبدیل میشود)، از پرچم --diff استفاده کنید.
مقدار PATTERN میتواند هر عبارت باقاعدهٔ Python (تقریباً سازگار با Perl) باشد.
اگر هیچ FILE مشخص نشود و پرچم --rev نیز ارائه نشده باشد، تمام فایلهای دایرکتوری کاری جستجو میشوند. هنگام استفاده از پرچم --rev و مشخص کردن FILEها، از آرگومان --follow برای دنبال کردن فایلهای مشخصشده در طول تغییر نامها و کپیها استفاده کنید.
الگو:
علاوهبر کلمات کلیدی و توابع رایج الگو، کلمات کلیدی زیر نیز پشتیبانی میشوند. همچنین ببینید: hg help templates.
و هر مدخل از {texts} زیرکلیدواژههای زیر را فراهم میکند.
برای نحو بسط فهرست به hg help templates.operators مراجعه کنید.
در صورت یافتن تطابق، مقدار 0 و در غیر این صورت مقدار 1 را برمیگرداند.
گزینهها:
- -0, --print0
- خاتمه دادن فیلدها با NUL
- --all
- یک نام مستعار برای --diff (منسوخشده)
- --diff
- جستجو در تفاوتهای نسخه برای زمانهایی که الگو اضافه یا حذف شده است
- -a, --text
- در نظر گرفتن تمام فایلها به صورت متنی
- -f, --follow
- دنبال کردن تاریخچهٔ changeset یا تاریخچهٔ فایل در طول رونوشتها و تغییر نامها
- -i, --ignore-case
- صرفنظر از کوچک و بزرگی حروف در تطبیق
- -l, --files-with-matches
- تنها چاپ نام فایلها و نسخههای دارای تطابق
- -n, --line-number
- چاپ شمارهٔ خطوط منطبق
- -r,--rev <REV[+]>
- جستجوی فایلهای تغییریافته در محدودهٔ نسخهها
- --all-files
- شامل کردن تمام فایلهای changeset حین اجرای grep (منسوخشده).TP -u, --user نمایش پدیدآورنده (بهصورت کامل با -v)
- -d, --date
- نمایش تاریخ (بهصورت کوتاه با -q)
- -T,--template <TEMPLATE>
- نمایش با الگو
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینهٔ علامتگذاریشده با [+] میتواند چندین بار مشخص شود
پیمایش تغییرات
bisect
جستجوی دودویی در مجموعهتغییرها:
hg bisect [-gbsr] [-U] [-c CMD] [REV]
این دستور به یافتن مجموعهتغییرهایی که باعث بروز مشکل شدهاند کمک میکند. برای استفاده، نخستین مجموعهتغییری را که میدانید دارای مشکل است بهعنوان بد (bad) علامتگذاری کنید، سپس جدیدترین مجموعهتغییری را که عاری از مشکل است بهعنوان خوب (good) مشخص نمایید. دستور bisect دایرکتوری کاری شما را برای آزمایش به یک بازبینی بهروزرسانی میکند (مگر اینکه گزینهٔ -U/--noupdate مشخص شده باشد). پس از انجام آزمایشها، دایرکتوری کاری را بهعنوان خوب یا بد علامتگذاری کنید؛ سپس bisect یا به یک مجموعهتغییر کاندید دیگر بهروزرسانی میشود یا اعلام میکند که بازبینی بد را یافته است.
بهعنوان یک میانبُر، میتوانید از آرگومان بازبینی (revision) نیز برای علامتگذاری یک بازبینی بهعنوان خوب یا بد بدون نیاز به checkout اولیهٔ آن استفاده کنید.
اگر دستوری را مشخص کنید، برای bisection خودکار استفاده خواهد شد. متغیر محیطی HG_NODE شامل شناسهٔ مجموعهتغییری خواهد بود که آزمایش میشود. وضعیت خروج دستور برای علامتگذاری بازبینیها بهعنوان خوب یا بد استفاده خواهد شد: وضعیت 0 به معنای خوب، 125 به معنای نادیده گرفتن بازبینی، 127 (فرمان یافت نشد) موجب لغو bisection میشود، و هر وضعیت خروج غیرصفر دیگر به معنای بد بودن بازبینی است.
چند مثال:
- شروع bisection با
بازبینی
بدِ مشخص 34 و
بازبینی
خوب 12:
hg bisect --bad 34 hg bisect --good 12
- پیش بردن bisection
جاری با
علامتگذاری
بازبینی
فعلی
بهعنوان
خوب یا بد:
hg bisect --good hg bisect --bad
- علامتگذاری
بازبینی
فعلی یا یک
بازبینی
مشخص برای
نادیده
گرفته شدن
(مثلاً اگر
آن بازبینی
به دلیل
مشکل دیگری
قابل
استفاده
نباشد):
hg bisect --skip hg bisect --skip 23
- نادیده
گرفتن تمام
بازبینیهایی
که
دایرکتوریهای
foo یا bar را
تغییر
نمیدهند:
hg bisect --skip "!( file('path:foo') & file('path:bar') )" - فراموش
کردن bisection
جاری:
hg bisect --reset
- استفاده از
'make && make tests' برای
یافتن
خودکار
نخستین
بازبینی
خراب:
hg bisect --reset hg bisect --bad 34 hg bisect --good 12 hg bisect --command "make && make tests"
- مشاهدهٔ
تمام
مجموعهتغییرهایی
که وضعیت
آنها در bisection
جاری از قبل
مشخص است:
hg log -r "bisect(pruned)"
- مشاهدهٔ
مجموعهتغییری
که در حال
حاضر در حال
bisect شدن است
(بهویژه در
صورت اجرا
با -U/--noupdate بسیار
مفید است):
hg log -r "bisect(current)"
- مشاهدهٔ
تمام
مجموعهتغییرهایی
که در bisection
جاری شرکت
داشتهاند:
hg log -r "bisect(range)"
- حتی
میتوانید
یک نمودار
زیبا
دریافت
کنید:
hg log --graph -r "bisect(range)"
برای اطلاعات بیشتر دربارهٔ گزارهٔ bisect() به hg help revisions.bisect مراجعه کنید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -r, --reset
- بازنشانی وضعیت bisect
- -g, --good
- علامتگذاری مجموعهتغییر بهعنوان خوب
- -b, --bad
- علامتگذاری مجموعهتغییر بهعنوان بد
- -s, --skip
- صرفنظر کردن از آزمایش مجموعهتغییر.TP -e, --extend گسترش محدودهٔ bisect
- -c,--command <CMD>
- استفاده از دستور برای بررسی وضعیت changeset
- -U, --noupdate
- بهروزرسانی به هدف انجام نشود
heads
نمایش سرشاخهها (branch heads):
hg heads [-ct] [-r STARTREV] [REV]...
بدون هیچ آرگومانی، تمام سرشاخههای باز موجود در مخزن را نمایش میدهد. سرشاخهها دستهتغییرهایی (changesets) هستند که هیچ نوادهای روی همان شاخه ندارند. آنها جایی هستند که توسعه معمولاً در آن اتفاق میافتد و اهداف معمول برای عملیات بهروزرسانی (update) و ادغام (merge) هستند.
اگر یک یا چند REV مشخص شوند، تنها سرشاخههای باز روی شاخههای مرتبط با دستهتغییرهای مشخصشده نشان داده میشوند. این بدان معناست که میتوانید از hg heads . برای دیدن سرشاخهها در شاخهٔ فعلیِ دریافتشده (checked-out) استفاده کنید.
اگر -c/--closed مشخص شده باشد، سرشاخههای علامتگذاریشده به عنوان بستهشده را نیز نمایش میدهد (ببینید hg commit --close-branch).
اگر STARTREV مشخص شده باشد، تنها سرشاخههایی نمایش داده خواهند شد که از نوادگان STARTREV باشند.
اگر -t/--topo مشخص شده باشد، سازوکار شاخههای نامگذاریشده نادیده گرفته شده و تنها سرشاخههای توپولوژیکی (دستهتغییرهای بدون فرزند) نمایش داده خواهند شد.
در صورت یافتن سرشاخههای منطبق، 0 و در غیر این صورت 1 را بازمیگرداند.
گزینهها:
- -r,--rev <STARTREV>
- تنها سرشاخههایی را نشان میدهد که از نوادگان STARTREV هستند
- -t, --topo
- تنها سرشاخههای توپولوژیک را نشان میدهد
- -a, --active
- تنها سرشاخههای فعال را نشان میدهد (منسوخشده)
- -c, --closed
- نمایش سرشاخههای عادی و بستهشده
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت قالب (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با قالب
identify
شناسایی دایرکتوری کاری یا بازنگری (revision) مشخصشده:
hg identify [-nibtB] [-r REV] [SOURCE]
خلاصهای از وضعیت مخزن در REV را با استفاده از یک یا دو شناسهٔ هش والد چاپ میکند؛ در صورتی که دایرکتوری کاری تغییرات ثبتنشده داشته باشد یک «+»، سپس نام شاخه (اگر پیشفرض نباشد)، فهرستی از برچسبها و فهرستی از چوبالفها (bookmarks) به دنبال آن میآید.
هنگامی که REV داده نشود، خلاصهای از وضعیت کنونی مخزن شامل دایرکتوری کاری را چاپ میکند. برای دریافت اطلاعات والدِ دایرکتوری کاری بدون بررسی تغییرات ثبتنشده، -r. را مشخص کنید.
مشخص کردن یک مسیر به ریشهٔ مخزن یا یک بستهٔ (bundle) مرکوریال باعث میشود عملیات جستجو روی آن مخزن/بسته انجام شود.
قالب:
علاوه بر کلیدواژهها و توابع عمومی قالب، کلیدواژههای زیر نیز پشتیبانی میشوند. همچنین ببینید hg help templates.
مثالها:
- تولید یک
شناسهٔ
ساخت (build) برای
دایرکتوری
کاری:
hg id --id > build-id.dat
- یافتن
بازنگری
متناظر با
یک برچسب:
hg id -n -r 1.3
- بررسی
تازهترین
بازنگری در
یک مخزن
دوردست:
hg id -r tip https://www.mercurial-scm.org/repo/hg
برای تولید اطلاعات بیشتر دربارهٔ بازنگریهای خاص، از جمله شناسههای هش کامل، به hg log مراجعه کنید.
در صورت موفقیت 0 را بازمیگرداند.
گزینهها:
- -r,--rev <REV>
- شناسایی بازنگری مشخصشده
- -n, --num
- نمایش شمارهٔ بازنگری محلی
- -i, --id
- نمایش شناسهٔ بازنگری سراسری
- -b, --branch
- نمایش شاخه
- -t, --tags
- نمایش برچسبها
- -B, --bookmarks
- نمایش چوبالفها (bookmarks)
- -e,--ssh <CMD>
- مشخص کردن دستور ssh مورد استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست.TP --insecure عدم اعتبارسنجی گواهی سرور (نادیدهگرفتن پیکربندی web.cacerts)
- -T,--template <TEMPLATE>
- نمایش با الگو
نامهای مستعار: id
log
نمایش تاریخچه بازنگریهای کل مخزن یا فایلها:
hg log [OPTION]... [FILE]
چاپ تاریخچه بازنگریهای فایلهای مشخصشده یا کل پروژه.
اگر هیچ بازهای از بازنگریها مشخص نشود، پیشفرض tip:0 خواهد بود مگر اینکه --follow تنظیم شده باشد.
تاریخچه فایل بدون دنبال کردن تاریخچه تغییر نام یا رونوشت فایلها نمایش داده میشود. از -f/--follow همراه با نام فایل برای دنبال کردن تاریخچه در میان تغییر نامها و رونوشتها استفاده کنید. گزینه --follow بدون نام فایل، تنها نیاکان بازنگریهای شروع را نشان میدهد. بازنگریهای شروع را میتوان با -r/--rev مشخص کرد که مقدار پیشفرض آن والد دایرکتوری کاری است.
بهطور پیشفرض این دستور شماره بازنگری و شناسه changeset، برچسبها، والدین غیربدیهی، کاربر، تاریخ و زمان، و خلاصهای برای هر کامیت را چاپ میکند. هنگامی که سوییچ -v/--verbose استفاده شود، فهرست فایلهای تغییریافته و پیام کامل کامیت نمایش داده میشوند.
با --graph بازنگریها بهصورت یک گراف جهتدار بدون دور (DAG) در قالب هنر اسکی با جدیدترین changeset در بالا نمایش داده میشوند. 'o' یک changeset است، '@' والد دایرکتوری کاری است، '%' یک changeset درگیر در تعارض ادغام حلنشده است، '_' شاخه را میبندد، 'x' منسوخشده است، '*' ناپایدار است، و '+' نمایانگر یک انشعاب است که در آن changeset خطوط پایینتر، والد ادغام 'o' در همان خط است. مسیرها در DAG با '|'، '/' و غیره نمایش داده میشوند. قرار گرفتن ':' بهجای '|' نشان میدهد که یک یا چند بازنگری در یک مسیر نادیده گرفته شدهاند.
از گزینههای -L/--line-range FILE,M:N برای دنبال کردن تاریخچه خطوط از M تا N در FILE استفاده کنید. با -p/--patch تنها تکهتغییرهای تفاوت (diff hunks) اثرگذار بر بازه خطوط مشخصشده نمایش داده خواهند شد. این گزینه نیازمند --follow است؛ و میتواند چندین بار مشخص شود. در حال حاضر، این گزینه با --graph سازگار نیست. این گزینه آزمایشی است.
- نکته
- دستور hg log --patch ممکن است برای مجموعهتغییرهای ادغام، خروجی تفاوت (diff) غیرمنتظرهای تولید کند، زیرا تنها changeset ادغام را با والد اول آن مقایسه خواهد کرد. همچنین، تنها فایلهایی که با هر دو والد متفاوت باشند در files: ظاهر خواهند شد.
- نکته
- به دلایل کارایی، hg log FILE ممکن است تغییرات تکراری ایجادشده در شاخهها را نادیده بگیرد و موارد حذفشده یا تغییرات حالت فایل را نشان ندهد. برای مشاهده تمام این دست تغییرات، از سوییچ --removed استفاده کنید.
- نکته
- تاریخچه حاصل از گزینههای -L/--line-range به گزینههای diff بستگی دارد؛ برای نمونه اگر فاصلههای خالی نادیده گرفته شوند، تغییرات مربوطهای که فقط شامل فاصلههای خالی در بازه خطوط مشخصشده هستند فهرست نخواهند شد.
چند مثال:
- مجموعهتغییرها
با توضیحات
کامل و
فهرست
فایلها:
hg log -v
- مجموعهتغییرهای
نیاکان
دایرکتوری
کاری:
hg log -f
- ۱۰ کامیت
اخیر در
شاخه کنونی:
hg log -l 10 -b .
- مجموعهتغییرهای
نشاندهنده
تمام
تغییرات یک
فایل، شامل
موارد
حذفشده:
hg log --removed file.c
- تمام
مجموعهتغییرهایی
که به یک
دایرکتوری
مربوط
میشوند،
همراه با
تفاوتها،
بدون
ادغامها:
hg log -Mp lib/
- تمام
شمارههای
بازنگری
منطبق با یک
کلیدواژه:
hg log -k bug --template "{rev}\n" - شناسه
درهمسازی
(هش) کامل
والد
دایرکتوری
کاری:
hg log -r . --template "{node}\n" - فهرست کردن
الگوهای
گزارش (log) در
دسترس:
hg log -T list
- بررسی
اینکه آیا
یک
مجموعهتغییر
معین در یک
انتشار
برچسبخورده
گنجانده
شده است یا
خیر:
hg log -r "a21ccf and ancestor(1.9)"
- یافتن تمام
مجموعهتغییرهای
یک کاربر در
یک بازه
تاریخی:
hg log -k alice -d "may 2008 to jul 2008"
- خلاصه تمام
مجموعهتغییرهای
پس از آخرین
برچسب:
hg log -r "last(tagged())::" --template "{desc|firstline}\n" مجموعهتغییرهای مربوط به خطهای ۱۳ تا ۲۳ فایل file.c: hg log -L file.c,13:23 - مجموعهتغییرهای
مربوط به
خطهای ۱۳
تا ۲۳ فایل file.c
و خطهای ۲
تا ۶ از main.c
همراه با
وصله:
hg log -L file.c,13:23 -L main.c,2:6 -p
برای فهرستی از قالبهای معتبر برای -d/--date، دستور hg help dates را ببینید.
برای اطلاعات بیشتر درباره تعیین و ترتیببندی بازبینیها، دستور hg help revisions را ببینید.
برای اطلاعات بیشتر درباره سبکهای از پیش بستهبندیشده و تعیین قالبهای سفارشی، دستور hg help templates را ببینید. قالب پیشفرضی که توسط دستور log استفاده میشود را میتوان از طریق تنظیم پیکربندی command-templates.log سفارشیسازی کرد.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -f, --follow
- دنبال کردن تاریخچه مجموعهتغییرها، یا تاریخچه فایل در میان کپیها و تغییر نامها
- --follow-first
- تنها دنبال کردن والد اولِ مجموعهتغییرهای ادغام (منسوخشده)
- -d,--date <DATE>
- نمایش بازبینیهای منطبق با مشخصه تاریخ
- -C, --copies
- نمایش فایلهای کپیشده
- -k,--keyword <TEXT[+]>
- انجام جستجوی غیرحساس به حروف بزرگ و کوچک برای یک متن مشخص
- -r,--rev <REV[+]>
- بازبینیها برای انتخاب یا دنبال کردن از آنها
- -L,--line-range <FILE,RANGE[+]>
- دنبال کردن محدوده خطوط فایل مشخصشده (آزمایشی)
- --removed
- شامل کردن بازبینیهایی که در آنها فایلها حذف شدهاند
- -m, --only-merges
- تنها نمایش ادغامها (منسوخشده) (به جای آن از -r "merge()" استفاده کنید)
- -u,--user <USER[+]>
- بازبینیهای ثبتشده توسط کاربر
- --only-branch <BRANCH[+]>
- تنها نمایش مجموعهتغییرهای درون شاخه نامگذاریشده مشخص (منسوخشده)
- -b,--branch <BRANCH[+]>
- نمایش مجموعهتغییرهای درون شاخه نامگذاریشده مشخص
- -B,--bookmark <BOOKMARK[+]>
- نمایش مجموعهتغییرهای درون نشانک مشخص
- -P,--prune <REV[+]>
- عدم نمایش بازبینی یا هیچیک از نیاکان آن
- -p, --patch
- نمایش وصله
- -g, --git
- استفاده از قالب تفاضلی گسترشیافته git
- -l,--limit <NUM>
- محدود کردن تعداد تغییرات نمایشدادهشده
- -M, --no-merges
- عدم نمایش ادغامها
- --stat
- خروجی خلاصهای از تغییرات در سبک diffstat
- -G, --graph
- نمایش گراف جهتدار بدون دور (DAG) بازبینیها
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت قالب (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با قالب
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای مشخصشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای مشخصشده
گزینههای مشخصشده با [+] میتوانند چندین بار تعیین شوند
نامهای مستعار: history
نمایش والدین دایرکتوری کاری یا بازبینی (منسوخشده):
hg parents [-r REV] [FILE]
چاپ بازبینیهای والد دایرکتوری کاری. اگر بازبینی از طریق -r/--rev مشخص شده باشد، والد آن بازبینی چاپ خواهد شد. اگر یک آرگومان فایل داده شود، بازبینیای که فایل آخرین بار در آن تغییر یافته است (پیش از بازبینی دایرکتوری کاری یا در صورت ارائه، آرگومان مشخصشده برای --rev) چاپ میشود.
این دستور معادل است با:
hg log -r "p1()+p2()" or hg log -r "p1(REV)+p2(REV)" or hg log -r "max(::p1() and file(FILE))+max(::p2() and file(FILE))" or hg log -r "max(::p1(REV) and file(FILE))+max(::p2(REV) and file(FILE))"
برای اطلاعات مرتبط hg summary و hg help revsets را ببینید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -r,--rev <REV>
- نمایش والدین بازبینی مشخصشده
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت الگو (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با الگو
tip
نمایش بازبینی tip (منسوخشده):
hg tip [-p] [-g]
بازبینی tip (که معمولاً صرفاً tip نامیده میشود) جدیدترین دستهتغییر (changeset) افزودهشده به مخزن (و بنابراین جدیدترین head تغییریافته) است.
اگر بهتازگی یک commit انجام داده باشید، آن commit همان tip خواهد بود. اگر بهتازگی تغییراتی را از یک مخزن دیگر pull کرده باشید، tip آن مخزن به tip فعلی تبدیل میشود. برچسب "tip" خاص است و نمیتوان نام آن را تغییر داد یا آن را به دستهتغییر دیگری اختصاص داد.
این دستور منسوخ شده است؛ لطفاً به جای آن از hg heads استفاده کنید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -p, --patch
- نمایش وصله
- -g, --git
- استفاده از قالب diff گسترشیافتهٔ git
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت الگو (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با الگو
add
افزودن فایلهای مشخصشده در کامیت بعدی:
hg add [OPTION]... [FILE]...
زمانبندی فایلها برای قرار گرفتن تحت کنترل نسخه و افزوده شدن به مخزن.
فایلها در کامیت بعدی به مخزن افزوده خواهند شد. برای لغو یک افزودن پیش از آن، hg forget را ببینید.
اگر هیچ نامی مشخص نشود، تمام فایلها به مخزن افزوده میشوند (بهجز فایلهای منطبق با .hgignore).
مثالها:
- فایلهای
جدید
(ناشناخته)
بهطور
خودکار
توسط hg add
افزوده
میشوند:
$ ls foo.c $ hg status ? foo.c $ hg add adding foo.c $ hg status A foo.c
- میتوان
فایلهای
خاصی را
برای
افزوده شدن
مشخص کرد:
$ ls bar.c foo.c $ hg status ? bar.c ? foo.c $ hg add bar.c $ hg status A bar.c ? foo.c
در صورت افزوده شدن موفقیتآمیز تمام فایلها، مقدار 0 را برمیگرداند.
گزینهها:
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -S, --subrepos
- پیمایش بازگشتی درون زیرمخزنها
- -n, --dry-run
- هیچ عملیاتی انجام نده، فقط خروجی را چاپ کن
گزینهٔ علامتگذاریشده با [+] میتواند چندین بار مشخص شود.SS addremove
افزودن تمام فایلهای جدید، حذف تمام فایلهای مفقود:
hg addremove [OPTION]... [FILE]...
تمام فایلهای جدید را افزوده و تمام فایلهای مفقود را از مخزن حذف میکند.
مگر در حالتی که نامها مشخص شده باشند، فایلهای جدید در صورتی که با هر یک از الگوهای موجود در .hgignore تطابق داشته باشند نادیده گرفته میشوند. همانند add، این تغییرات در کامیت بعدی اعمال میشوند.
از گزینهٔ -s/--similarity برای شناسایی فایلهای تغییر نامیافته استفاده کنید. این گزینه درصدی بین 0 (غیرفعال) و 100 (فایلها باید یکسان باشند) را به عنوان پارامتر خود دریافت میکند. با پارامتری بزرگتر از 0، این گزینه هر فایل حذفشده را با هر فایل اضافهشده مقایسه میکند و مواردی را که به اندازه کافی مشابه باشند به عنوان تغییر نام ثبت میکند. شناسایی فایلهای تغییر نامیافته از این طریق میتواند هزینهبر و سنگین باشد. پس از استفاده از این گزینه، میتوان از hg status -C برای بررسی اینکه کدام فایلها به عنوان جابهجاشده یا تغییر نامیافته شناسایی شدهاند استفاده کرد. در صورت مشخص نشدن، مقدار پیشفرض -s/--similarity برابر 100 است و تنها تغییر نام فایلهای کاملاً یکسان شناسایی میشود.
مثالها:
- تعدادی از
فایلها (bar.c و
foo.c) جدید
هستند، در
حالی که foobar.c
(بدون
استفاده از
hg remove) از مخزن
حذف شده
است:
$ ls bar.c foo.c $ hg status ! foobar.c ? bar.c ? foo.c $ hg addremove adding bar.c adding foo.c removing foobar.c $ hg status A bar.c A foo.c R foobar.c
- فایل foobar.c بدون
استفاده از
hg rename به foo.c
منتقل شده
است. سپس
اندکی
ویرایش شده
است:
$ ls foo.c $ hg status ! foobar.c ? foo.c $ hg addremove --similarity 90 removing foobar.c adding foo.c recording removal of foobar.c as rename to foo.c (94% similar) $ hg status -C A foo.c foobar.c R foobar.c
در صورت افزوده شدن موفقیتآمیز تمام فایلها، 0 برمیگرداند.
گزینهها:
- -s,--similarity <SIMILARITY>
- حدس فایلهای تغییر نامیافته بر اساس شباهت (0<=s<=100)
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای مشخصشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای مشخصشده
- -n, --dry-run
- انجام ندادن عملیات، صرفاً چاپ خروجی
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS files
فهرست کردن فایلهای ردیابیشده:
hg files [OPTION]... [FILE]...
چاپ فایلهای تحت کنترل Mercurial در دایرکتوری کاری یا در بازبینی (revision) مشخصشده برای فایلهای دادهشده (بهاستثنای فایلهای حذفشده). فایلها را میتوان بهصورت نام فایل یا مجموعهفایل (fileset) مشخص کرد.
اگر فایلی برای تطابق داده نشود، این دستور نام تمام فایلهای تحت کنترل Mercurial را چاپ میکند.
قالب (Template):
علاوه بر کلیدواژهها و توابع عمومی قالب، کلیدواژههای زیر نیز پشتیبانی میشوند. همچنین hg help templates را ببینید.
مثالها:
- فهرست کردن
تمام
فایلهای
زیر
دایرکتوری
جاری:
hg files .
- نمایش
اندازهها
و پرچمها
برای
بازبینی
جاری:
hg files -vr .
- فهرست کردن
تمام
فایلهای
با نام README:
hg files -I "**/README"
- فهرست کردن
تمام
فایلهای
باینری:
hg files "set:binary()"
- یافتن
فایلهای
حاوی یک
عبارت
باقاعده:
hg files "set:grep('bob')" - جستجوی
محتوای
فایلهای
ردیابیشده
با xargs و grep:
hg files -0 | xargs -0 grep foo
برای اطلاعات بیشتر در مورد تعیین الگوهای فایل، hg help patterns و hg help filesets را ببینید.
در صورت یافتن تطابق، مقدار 0 و در غیر این صورت مقدار 1 را برمیگرداند.
گزینهها:
- -r,--rev <REV>
- جستجوی مخزن به همان شکلی که در REV قرار دارد
- -0, --print0
- خاتمه دادن به نام فایلها با نویسهٔ NUL، برای استفاده همراه با xargs
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -T,--template <TEMPLATE>
- نمایش خروجی با قالب مشخصشده
- -S, --subrepos
- پیمایش بازگشتی به درون زیرمخزنها (subrepositories)
گزینههای دارای علامت [+] را میتوان چندین بار تعیین کرد.SS forget
فراموش کردن فایلهای مشخصشده در کامیت بعدی:
hg forget [OPTION]... FILE...
فایلهای مشخصشده را علامتگذاری میکند تا پس از کامیت بعدی دیگر ردگیری نشوند.
این کار فایلها را فقط از شاخهٔ جاری حذف میکند، نه از کل تاریخچهٔ پروژه، و آنها را از دایرکتوری کاری حذف نمیکند.
برای حذف فایل از دایرکتوری کاری، hg remove را ببینید.
برای لغو فراموشی پیش از کامیت بعدی، hg add را ببینید.
مثالها:
- فراموش
کردن
فایلهای
باینری
تازهافزودهشده:
hg forget "set:added() and binary()"
- فراموش
کردن
فایلهایی
که توسط .hgignore
مستثنی
میشوند:
hg forget "set:hgignore()"
در صورت موفقیت، ۰ را برمیگرداند.
گزینهها:
- -i, --interactive
- استفاده از حالت تعاملی
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -n, --dry-run
- عدم انجام عملیات، تنها چاپ خروجی
گزینههای علامتگذاریشده با [+] میتوانند چندین بار مشخص شوند
locate
یافتن فایلهای منطبق با الگوهای مشخص (منسوخشده):
hg locate [OPTION]... [PATTERN]...
چاپ فایلهای تحت کنترل Mercurial در دایرکتوری کاری که نام آنها با الگوهای دادهشده مطابقت دارد.
بهطور پیشفرض، این دستور تمام دایرکتوریهای موجود در دایرکتوری کاری را جستجو میکند. برای جستجوی تنها دایرکتوری جاری و زیردایرکتوریهای آن، از "--include ." استفاده کنید.
اگر هیچ الگویی برای مطابقت داده نشود، این دستور نام تمام فایلهای تحت کنترل Mercurial در دایرکتوری کاری را چاپ میکند.
اگر میخواهید خروجی این دستور را به دستور "xargs" بفرستید، از گزینهٔ -0 هم در این دستور و هم در "xargs" استفاده کنید. این کار از بروز مشکل تلقی شدن نامفایلهای منفرد حاوی فاصله به عنوان چندین نامفایل توسط "xargs" جلوگیری میکند.
برای دستوری با کاربردهای متنوعتر، hg help files را ببینید.
در صورت یافتن تطابق، ۰ و در غیر این صورت، ۱ را برمیگرداند.
گزینهها:
- -r,--rev <REV>
- جستجوی مخزن همانطور که در REV بوده است
- -0, --print0
- پایان دادن نام فایلها با NUL، جهت استفاده با xargs
- -f, --fullpath
- چاپ مسیرهای کامل از ریشهٔ سیستمفایل
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینههای علامتگذاریشده با [+] میتوانند چندین بار مشخص شوند.SS purge
فایلهایی را که توسط Mercurial ردیابی نمیشوند حذف میکند:
hg purge [OPTION]... [DIR]...
فایلهای ناشناخته برای Mercurial را حذف میکند. این دستور برای آزمایش تغییرات محلی و ثبتنشده در یک درخت منبع در غیر این صورت پاکیزه، مفید است.
این بدان معناست که purge بهطور پیشفرض موارد زیر را حذف خواهد کرد:
- فایلهای ناشناخته: فایلهایی که با hg status با علامت «?» مشخص شدهاند
- دایرکتوریهای خالی: در واقع Mercurial دایرکتوریها را نادیده میگیرد، مگر اینکه حاوی فایلهای تحت مدیریت کنترل نسخه باشند
اما موارد زیر را دستنخورده باقی میگذارد:
- فایلهای ردیابیشدهٔ تغییریافته و تغییرنیافته
- فایلهای نادیدهگرفتهشده (مگر اینکه -i یا --all مشخص شده باشد)
- فایلهای جدید اضافهشده به مخزن (با hg add)
میتوان از گزینههای --files و --dirs برای هدایت purge به حذف فقط فایلها، فقط دایرکتوریها، یا هر دو استفاده کرد. اگر هیچکدام از این گزینهها داده نشوند، هر دو حذف خواهند شد.
اگر دایرکتوریها در خط فرمان داده شوند، فقط فایلهای درون این دایرکتوریها در نظر گرفته میشوند.
هنگام استفاده از purge مراقب باشید، زیرا ممکن است بهطور بازگشتناپذیری فایلهایی را که فراموش کردهاید به مخزن اضافه کنید، حذف نمایید. اگر فقط میخواهید فهرست فایلهایی را که این برنامه حذف میکند چاپ کنید، از گزینهٔ --print استفاده نمایید.
گزینهها:
- -a, --abort-on-err
- لغو عملیات در صورت بروز خطا
- --all
- پاکسازی فایلهای نادیدهگرفتهشده نیز
- -i, --ignored
- پاکسازی فقط فایلهای نادیدهگرفتهشده
- --dirs
- پاکسازی دایرکتوریهای خالی
- --files
- پاکسازی فایلها
- -p, --print
- چاپ نام فایلها بهجای حذف آنها
- -0, --print0
- خاتمه دادن نام فایلها با NUL، جهت استفاده با xargs (مستلزم -p/--print)
- --confirm
- پرسش قبل از حذف دائمی فایلها
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق بر الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق بر الگوهای دادهشده
گزینهٔ علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
نامهای مستعار: clean
حذف فایلهای مشخصشده در کامیت بعدی:
hg remove [OPTION]... FILE...
زمانبندی فایلهای مشخصشده برای حذف از شاخه فعلی.
این دستور فایلها را برای حذف شدن در کامیت بعدی زمانبندی میکند. برای بازگردانی حذف پیش از آن زمان، hg revert را ببینید. برای لغو فایلهای اضافهشده، hg forget را ببینید.
میتوان از -A/--after تنها برای حذف فایلهایی استفاده کرد که پیشتر پاک شدهاند، از -f/--force میتوان برای اجبار به حذف بهره برد، و از -Af میتوان برای حذف فایلها از بازبینی بعدی بدون پاک کردن آنها از دایرکتوری کاری استفاده نمود.
جدول زیر رفتار remove را برای وضعیتهای مختلف فایل (ستونها) و ترکیب گزینهها (سطرها) شرح میدهد. وضعیتهای فایل عبارتند از: اضافهشده [A]، بدون تغییر [C]، تغییریافته [M] و مفقود [!] (همانگونه که توسط hg status گزارش میشود). کنشها عبارتند از: هشدار (Warn - W)، حذف از شاخه (Remove - R) و پاک کردن از دیسک (Delete - D):
| opt/state | A | C | M | ! |
| none | W | RD | W | R |
| -f | R | RD | RD | R |
| -A | W | W | W | R |
| -Af | R | R | R | R |
- نکته
- دستور hg remove هرگز فایلهای در وضعیت اضافهشده [A] را از دایرکتوری کاری پاک نمیکند، حتی اگر --force مشخص شده باشد.
در صورت موفقیت 0، و در صورت مواجهه با هرگونه هشدار 1 برمیگرداند.
گزینهها:
- -A, --after
- ثبت حذف برای فایلهای مفقود
- -f, --force
- فراموش کردن فایلهای اضافهشده، پاک کردن فایلهای تغییریافته
- -S, --subrepos
- پیمایش بازگشتی در مخازن فرعی
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -n, --dry-run
- عدم انجام عملیات، صرفاً چاپ خروجی
گزینه با علامت [+] را میتوان چندین بار مشخص کرد
نامهای مستعار: rm
تغییر نام فایلها؛ معادل کپی + حذف:
hg rename [OPTION]... SOURCE... DEST
نشانهگذاری dest بهعنوان رونوشتهایی از sources؛ و نشانهگذاری sources برای حذف. اگر dest یک دایرکتوری باشد، رونوشتها درون آن دایرکتوری قرار میگیرند. اگر dest یک فایل باشد، تنها میتواند یک منبع وجود داشته باشد.
بهطور پیشفرض، این دستور محتویات فایلها را همانگونه که در دایرکتوری کاری وجود دارند کپی میکند. اگر با -A/--after فراخوانی شود، عملیات ثبت میگردد، اما هیچ کپیکردنی انجام نمیشود.
برای لغو نشانهگذاری یک فایل مقصد بهعنوان تغییرنامیافته، از --forget استفاده کنید. با آن گزینه، نشانهگذاری تغییر نام از روی تمام آرگومانهای (موقعیتی) دادهشده برداشته میشود. فایل(های) مقصد در جای خود باقی خواهند ماند (همچنان ردیابی میشوند). فایل(های) منبع بازیابی نخواهند شد. توجه داشته باشید که hg rename --forget رفتاری مشابه hg copy --forget دارد.
این دستور بهطور پیشفرض با commit بعدی اعمال میشود.
در صورت موفقیت 0، و در صورت مواجهه با خطا 1 برمیگرداند.
گزینهها:
- --forget
- لغو نشانهگذاری فایل مقصد بهعنوان تغییرنامیافته
- -A, --after
- ثبت تغییر نامی که قبلاً رخ داده است
- --at-rev <REV>
- نشانهگذاری/لغو نشانهگذاری تغییر نامها در بازنگری (revision) دادهشده (آزمایشی)
- -f, --force
- انتقال اجباری بر روی یک فایل مدیریتشدهٔ موجود
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -n, --dry-run
- عدم انجام عملیات، فقط چاپ خروجی
گزینهٔ علامتگذاریشده با [+] میتواند چند بار مشخص شود
نامهای مستعار: move mv
resolve
ادغام مجدد یا تنظیم/مشاهدهٔ وضعیت ادغام فایلها:
hg resolve [OPTION]... [FILE]...
ادغامهای دارای تداخل حلنشده اغلب نتیجهٔ ادغام غیرتعاملی با استفاده از تنظیمات پیکربندی internal:merge یا یک ابزار ادغام خط فرمانی مانند diff3 هستند. دستور resolve برای مدیریت فایلهای درگیر در یک ادغام، پس از اجرای hg merge و پیش از اجرای hg commit استفاده میشود (یعنی دایرکتوری کاری باید دو والد داشته باشد). برای اطلاعات دربارهٔ پیکربندی ابزارهای ادغام به hg help merge-tools مراجعه کنید.
دستور resolve میتواند به روشهای زیر استفاده شود:
- hg resolve [--re-merge] [--tool TOOL] FILE...: تلاش برای ادغام مجدد فایلهای مشخصشده، با کنار گذاشتن تلاشهای قبلی ادغام. ادغام مجدد برای فایلهایی که قبلاً بهعنوان حلشده نشانهگذاری شدهاند انجام نمیشود. از --all/-a برای انتخاب همهٔ فایلهای حلنشده استفاده کنید. از --tool میتوان برای مشخص کردن ابزار ادغام مورد استفاده برای فایلهای دادهشده استفاده کرد. این گزینه متغیر محیطی HGMERGE و فایلهای پیکربندی شما را بازنویسی (override) میکند. محتویات قبلی فایل با پسوند .orig ذخیره میشوند.
- hg resolve -m [FILE]: نشانهگذاری یک فایل بهعنوان حلشده (مثلاً پس از اصلاح دستی فایلها). حالت پیشفرض نشانهگذاری همهٔ فایلهای حلنشده است.
- hg resolve -u [FILE]...: نشانهگذاری یک فایل بهعنوان حلنشده. حالت پیشفرض نشانهگذاری همهٔ فایلهای حلشده است.
- hg resolve -l: فهرست کردن فایلهایی که تداخل داشتهاند یا هنوز دارند. در فهرست چاپشده، U = حلنشده و R = حلشده است. میتوانید از set:unresolved() یا set:resolved() برای پالایش فهرست استفاده کنید. برای جزئیات به hg help filesets مراجعه کنید.
- نکته
- Mercurial به شما اجازه نخواهد داد فایلهای دارای تداخل ادغام حلنشده را commit کنید. باید پیش از آنکه پس از یک ادغام دارای تداخل commit کنید، از hg resolve -m ... استفاده نمایید.
قالب:
کلیدواژههای زیر علاوه بر کلیدواژهها و توابع عمومی قالب پشتیبانی میشوند. همچنین ببینید hg help templates.
- mergestatus
- رشته (String). نویسهٔ نشاندهندهٔ تداخلهای ادغام، U یا R.
- path
- رشته (String). مسیر فایل نسبت به ریشهٔ مخزن (Repository-absolute).
در صورت موفقیت 0، و در صورتی که تلاش برای حل هر فایلی ناموفق باشد 1 برمیگرداند.
گزینهها:
- -a, --all
- انتخاب همهٔ فایلهای حلنشده
- -l, --list
- فهرست کردن وضعیت فایلهای نیازمند ادغام
- -m, --mark
- نشانهگذاری فایلها بهعنوان حلشده
- -u, --unmark
- نشانهگذاری فایلها بهعنوان حلنشده
- -n, --no-status
- پنهان کردن پیشوند وضعیت
- --re-merge
- ادغام مجدد فایلها
- -t,--tool <TOOL>
- مشخص کردن ابزار ادغام
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -T,--template <TEMPLATE>
- نمایش بر اساس قالب گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
revert
بازگرداندن فایلها به وضعیت استخراجشده (checkout):
hg revert [OPTION]... [-r REV] [NAME]...
- نکته
- برای استخراج (checkout) بازبینیهای پیشین، باید از hg update REV استفاده کنید. برای لغو یک ادغام اعمالنشده (و از دست رفتن تغییراتتان)، از hg merge --abort استفاده کنید.
در صورت مشخص نشدن بازبینی، فایلها یا دایرکتوریهای مشخصشده را به محتوایی که در والد دایرکتوری کاری داشتند بازمیگرداند. این کار محتوای فایلها را به یک وضعیت تغییرنیافته بازمیگرداند و افزودنها، حذفها، رونوشتها و تغییر نامهای زمانبندیشده را لغو میکند. اگر دایرکتوری کاری دارای دو والد باشد، باید صراحتاً یک بازبینی را مشخص کنید.
با استفاده از گزینههای -r/--rev یا -d/--date، فایلها یا دایرکتوریهای دادهشده را به وضعیتشان در یک بازبینی مشخص بازگردانید. از آنجا که revert والدین دایرکتوری کاری را تغییر نمیدهد، این امر باعث میشود این فایلها تغییریافته به نظر برسند. این میتواند برای «خنثیسازی» (back out) بخشی یا تمام یک تغییر پیشین مفید باشد. برای یک روش مرتبط، hg backout را ببینید.
فایلهای تغییریافته پیش از بازگردانی با پسوند .orig ذخیره میشوند. برای غیرفعال کردن این نسخههای پشتیبان، از --no-backup استفاده کنید. امکان ذخیرهٔ فایلهای پشتیبان در یک دایرکتوری سفارشی نسبت به ریشهٔ مخزن با تنظیم گزینهٔ پیکربندی ui.origbackuppath وجود دارد.
برای فهرستی از قالبهای معتبر برای -d/--date، به hg help dates مراجعه کنید.
برای روشی جهت معکوس کردن اثر یک changeset پیشین، به hg help backout مراجعه کنید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -a, --all
- بازگردانی همهٔ تغییرات در صورت عدم ارائهٔ آرگومان
- -d,--date <DATE>
- تازهترین بازبینی منطبق با تاریخ
- -r,--rev <REV>
- بازگردانی به بازبینی مشخصشده
- -C, --no-backup
- ذخیره نکردن نسخههای پشتیبان فایلها
- -i, --interactive
- انتخاب تعاملی تغییرات
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -n, --dry-run
- انجام ندادن اقدامات، فقط چاپ خروجی
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد.SS root
چاپ ریشه (بالاترین سطح) دایرکتوری کاری فعلی:
hg root
چاپ دایرکتوری ریشهٔ مخزن فعلی.
قالب:
کلیدواژههای زیر علاوه بر کلیدواژهها و توابع عمومی قالب پشتیبانی میشوند. همچنین hg help templates را ببینید.
در صورت موفقیت ۰ را برمیگرداند.
گزینهها:
- --share-source
- چاپ ریشهٔ منبع اشتراک به جای آن
- -T,--template <TEMPLATE>
- نمایش با قالب مشخصشده
shelve
ذخیره و کنار گذاشتن تغییرات دایرکتوری کاری:
hg shelve [OPTION]... [FILE]...
عملیات بایگانی موقت (shelve) فایلهایی را که «hg status» به عنوان غیرتمیز (not clean) گزارش میکند دریافت کرده، تغییرات را در یک بسته (یک تغییر بایگانیشده) ذخیره میکند و فایلها را بازگردانی (revert) مینماید تا وضعیت آنها در دایرکتوری کاری پاک شود.
برای بازگرداندن این تغییرات به دایرکتوری کاری، از «hg unshelve» استفاده کنید؛ این دستور حتی در صورت انتقال به کامیتی دیگر نیز کار خواهد کرد.
هنگامی که هیچ فایلی مشخص نشده باشد، «hg shelve» تمام فایلهای غیرتمیز را ذخیره میکند. اگر فایلها یا دایرکتوریهای خاصی نام برده شوند، تنها تغییرات مربوط به همان فایلها بایگانی موقت میشوند.
در بایگانی موقت ساده (زمانی که فایلی مشخص نشده باشد، بدون حالت تعاملی و گزینههای include و exclude)، اطلاعات مربوط به قرار داشتن دایرکتوری کاری روی شاخهٔ تازه ایجادشده حفظ میشود؛ به عبارت دیگر، زمانی که دایرکتوری کاری روی شاخهای متفاوت از اولین والد خود قرار دارد. در این شرایط، unshelve اطلاعات شاخه را به دایرکتوری کاری بازمیگرداند.
هر تغییر بایگانیشده دارای نامی است که یافتن بعدی آن را آسانتر میکند. نام پیشفرض تغییر بایگانیشده بر پایهٔ نشانک (bookmark) فعال، یا در صورت نبود نشانک فعال، بر اساس شاخهٔ نامدار فعلی تعیین میشود. برای تعیین نامی دیگر، از --name استفاده کنید.
برای دیدن فهرستی از تغییرات بایگانیشدهٔ موجود، از گزینهٔ --list استفاده کنید. برای هر تغییر بایگانیشده، نام، قدمت و شرح آن چاپ خواهد شد؛ برای جزئیات بیشتر از --patch یا --stat استفاده کنید.
برای حذف تغییرات بایگانیشدهٔ مشخص، از --delete استفاده کنید. برای حذف تمام تغییرات بایگانیشده، از --cleanup استفاده کنید.
گزینهها:
- -A, --addremove
- علامتگذاری فایلهای جدید/گمشده به عنوان اضافهشده/حذفشده پیش از بایگانی موقت
- -u, --unknown
- ذخیرهٔ فایلهای ناشناخته در بایگانی موقت
- --cleanup
- حذف تمام تغییرات بایگانیشده
- --date <DATE>
- بایگانی موقت با تاریخ کامیت مشخصشده
- -d, --delete
- حذف تغییر(ات) بایگانیشدهٔ نامبرده
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای کامیت
- -k, --keep
- بایگانی موقت، اما نگهداشتن تغییرات در دایرکتوری کاری
- -l, --list
- فهرست کردن بایگانیهای موقت فعلی
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام بایگانی موقت
- -n,--name <NAME>
- استفاده از نام دادهشده برای کامیت بایگانیشده
- -p, --patch
- چاپ وصلهها برای تغییرات (نام تغییرات بایگانیشده را به عنوان آرگومانهای مکانی مشخص کنید)
- -i, --interactive
- حالت تعاملی
- --stat
- چاپ خلاصهای از تغییرات به سبک diffstat (نام تغییرات بایگانیشده را به عنوان آرگومانهای مکانی مشخص کنید)
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینهٔ علامتگذاریشده با [+] میتواند چندین بار مشخص شود.SS status
نمایش فایلهای تغییریافته در دایرکتوری کاری:
hg status [OPTION]... [FILE]...
نمایش وضعیت فایلها در مخزن. اگر نامهایی مشخص شوند، فقط فایلهای منطبق نمایش داده میشوند. فایلهایی که بدون تغییر (clean) یا نادیدهگرفتهشده (ignored) هستند یا مبدأ یک عملیات رونوشت/انتقال (copy/move) میباشند، فهرست نمیشوند مگر آنکه -c/--clean، -i/--ignored، -C/--copies یا -A/--all مشخص شده باشند. مگر در صورتی که گزینههای توصیفشده با «فقط نمایش ...» مشخص شده باشند، گزینههای -mardu استفاده میشوند.
گزینهٔ -q/--quiet فایلهای ردگیرینشده (ناشناخته و نادیدهگرفتهشده) را پنهان میکند، مگر اینکه صراحتاً با -u/--unknown یا -i/--ignored درخواست شده باشند.
- نکته
- hg status ممکن است در صورتی که دسترسیها تغییر کرده باشند یا یک ادغام (merge) رخ داده باشد، با diff ناهمخوان به نظر برسد. قالب استاندارد diff تغییرات دسترسی را گزارش نمیکند و diff تنها تغییرات را نسبت به یکی از والدین ادغام گزارش میدهد.
اگر یک بازبینی (revision) مشخص شود، به عنوان بازبینی پایه استفاده میشود. اگر دو بازبینی مشخص شوند، تفاوتهای میان آنها نمایش داده میشود. گزینهٔ --change نیز میتواند به عنوان میانبری برای فهرست کردن فایلهای تغییریافتهٔ یک بازبینی نسبت به نخستین والد آن استفاده شود.
کدهای مورد استفاده برای نمایش وضعیت فایلها عبارتند از:
M = modified (تغییریافته) A = added (اضافهشده) R = removed (حذفشده) C = clean (بدون تغییر) ! = missing (مفقود - حذفشده با دستوری غیر از hg، اما همچنان ردگیریشده) ? = not tracked (ردگیرینشده) I = ignored (نادیدهگرفتهشده) = مبدأ فایل قبلی (همراه با --copies)
گزینهٔ -t/--terse در صورتی که تمام فایلهای درون یک دایرکتوری وضعیت یکسانی داشته باشند، با نمایش تنها نام دایرکتوری خروجی را خلاصه میکند. این گزینه آرگومانی میپذیرد که وضعیتهای مورد نظر برای خلاصهسازی را مشخص میکند: 'm' برای 'modified' (تغییریافته)، 'a' برای 'added' (اضافهشده)، 'r' برای 'removed' (حذفشده)، 'd' برای 'deleted' (مفقود)، 'u' برای 'unknown' (ناشناخته)، 'i' برای 'ignored' (نادیدهگرفتهشده) و 'c' برای clean (بدون تغییر).
این گزینه تنها وضعیتهایی را که مشخص شدهاند خلاصه میکند. توجه داشته باشید که فایلهای بدون تغییر و نادیدهگرفتهشده با '--terse ic' نمایش داده نمیشوند مگر آنکه گزینههای -c/--clean و -i/--ignored نیز استفاده شده باشند.
گزینهٔ -v/--verbose هنگامی که مخزن در وضعیت ادغام ناتمام، shelve، rebase و غیره باشد، اطلاعات لازم را نمایش میدهد. میتوانید این رفتار را با فعال کردن گزینهٔ commands.status.verbose به صورت پیشفرض فعال کنید.
میتوانید با تنظیم commands.status.skipstates روی یک یا چند مورد از این موارد، از نمایش برخی از این وضعیتها صرفنظر کنید: 'bisect'، 'graft'، 'histedit'، 'merge'، 'rebase' یا 'unshelve'.
قالب:
کلیدواژههای زیر علاوه بر کلیدواژهها و توابع مشترک قالب پشتیبانی میشوند. همچنین ببینید hg help templates.
مثالها:
- نمایش
تغییرات
دایرکتوری
کاری نسبت
به یک changeset:
hg status --rev 9353
- نمایش
تغییرات
دایرکتوری
کاری نسبت
به
دایرکتوری
جاری (برای
اطلاعات
بیشتر hg help patterns
را ببینید):
hg status re:
- نمایش تمام
تغییرات از
جمله
رونوشتها
در یک changeset
موجود:
hg status --copies --change 9353
- دریافت
فهرستی از
فایلهای
اضافهشده
با
جداکنندهٔ
NUL، مناسب
برای xargs:
hg status -an0
- نمایش
اطلاعات
بیشتر
دربارهٔ
وضعیت
مخزن، با
خلاصهسازی
مسیرهای
اضافهشده،
حذفشده،
تغییریافته،
مفقود و
ردگیرینشده:
hg status -v -t mardu
در صورت موفقیت 0 بازمیگرداند.
گزینهها:
- -A, --all
- نمایش وضعیت تمام فایلها
- -m, --modified
- فقط نمایش فایلهای تغییریافته
- -a, --added
- فقط نمایش فایلهای اضافهشده
- -r, --removed
- فقط نمایش فایلهای حذفشده
- -d, --deleted
- فقط نمایش فایلهای مفقود
- -c, --clean
- فقط نمایش فایلهای بدون تغییر
- -u, --unknown
- فقط نمایش فایلهای ناشناخته (ردگیرینشده)
- -i, --ignored
- فقط نمایش فایلهای نادیدهگرفتهشده
- -n, --no-status
- پنهان کردن پیشوند وضعیت
- -t,--terse <VALUE>
- نمایش خروجی خلاصه (آزمایشی) (پیشفرض: هیچچیز).TP -C, --copies نمایش مبدأ فایلهای رونوشتشده (پیشفرض: ui.statuscopies)
- -0, --print0
- خاتمه دادن نام فایلها با NUL، برای استفاده با xargs
- --rev <REV[+]>
- نمایش تفاوت نسبت به بازنگری
- --change <REV>
- فهرست کردن فایلهای تغییریافته در یک بازنگری
- -I,--include <PATTERN[+]>
- گنجاندن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -S, --subrepos
- پیمایش بازگشتی در مخازن فرعی
- -T,--template <TEMPLATE>
- نمایش با استفاده از قالب
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
نامهای مستعار: st
summary
خلاصهسازی وضعیت دایرکتوری کاری:
hg summary [--remote]
این دستور خلاصهای کوتاه از وضعیت دایرکتوری کاری، شامل والدین، شاخه، وضعیت کامیت، فاز و بهروزرسانیهای موجود را تولید میکند.
با گزینهٔ --remote، این دستور مسیرهای پیشفرض را برای تغییرات ورودی و خروجی بررسی میکند. این عمل ممکن است زمانبر باشد.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- --remote
- بررسی برای push و pull
نامهای مستعار: sum
unshelve
بازگردانی یک تغییر بایگانیشده (shelved) به دایرکتوری کاری:
hg unshelve [OPTION]... [[-n] SHELVED]
این دستور یک نام اختیاری از تغییر بایگانیشده را برای بازگردانی میپذیرد. اگر نامی داده نشود، تازهترین تغییر بایگانیشده استفاده میشود.
اگر یک تغییر بایگانیشده با موفقیت اعمال شود، بستهای (bundle) که حاوی تغییرات بایگانیشده است به یک مکان پشتیبان (.hg/shelve-backup) منتقل میشود.
از آنجا که میتوانید یک تغییر بایگانیشده را روی هر کامیت دلخواهی بازگردانی کنید، ممکن است عملیات unshelve منجر به تداخل (conflict) بین تغییرات شما و کامیتهایی شود که روی آنها unshelve میکنید. در صورت وقوع این امر، باید تداخل را حل کرده، سپس از --continue برای تکمیل عملیات unshelve استفاده کنید. (بسته تا زمانی که عملیات unshelve را با موفقیت تکمیل نکنید منتقل نخواهد شد.)
(به عنوان جایگزین، میتوانید از --abort برای لغو عملیات unshelve که منجر به تداخل شده است استفاده کنید. این کار تغییرات بازگردانیشده را برمیگرداند و بسته را در جای خود باقی میگذارد.)
اگر تغییر بایگانیشدهٔ خام (بدون گزینههای تعاملی، include و exclude) روی شاخهای تازه ایجاد شده انجام گرفته باشد، اطلاعات شاخه را به دایرکتوری کاری بازمیگرداند.
پس از یک unshelve موفق، تغییرات بایگانیشده در یک دایرکتوری پشتیبان ذخیره میشوند. تنها N نسخهٔ پشتیبان اخیر نگهداری میشوند. مقدار پیشفرض N برابر ۱۰ است اما میتوان آن را با استفاده از گزینهٔ پیکربندی shelve.maxbackups بازنویسی کرد.
برچسب زمانی بر حسب ثانیه برای تعیین ترتیب نسخههای پشتیبان استفاده میشود. جهت ایمنی، اگر برچسب زمانی یکسان مانع از تعیین ترتیب دقیق آنها شود، بیش از maxbackups نسخهٔ پشتیبان نگهداری میشود.
تغییرات انتخابشده را میتوان با پرچم --interactive بازگردانی کرد. دایرکتوری کاری با تغییرات انتخابشده بهروزرسانی میشود و تنها تغییرات انتخابنشده به صورت بایگانیشده باقی میمانند. نکته: کل بایگانی ابتدا قبل از اجرای تعاملی روی دایرکتوری کاری اعمال میشود. بنابراین، صرف نظر از اینکه کدام تغییرات unshelve خواهند شد، تمام تداخلات بین دایرکتوری کاری و بایگانی پدیدار خواهند شد.
گزینهها:
- -a, --abort
- لغو یک عملیات unshelve ناتمام
- -c, --continue
- ادامه دادن یک عملیات unshelve ناتمام
- -i, --interactive
- استفاده از حالت تعاملی (آزمایشی)
- -k, --keep
- نگهداری بایگانی پس از بازگردانی (unshelve)
- -n,--name <NAME>
- بازگردانی تغییر بایگانیشده با نام دادهشده
- -t,--tool <VALUE>
- مشخص کردن ابزار ادغام (merge)
- --date <DATE>
- تنظیم
تاریخ برای
کامیتهای
موقت
(منسوخشده)
بهروزرسانی دایرکتوری کاری (یا تعویض بازبینیها):
hg update [-C|-c|-m] [-d DATE] [[-r] REV]
دایرکتوری کاری مخزن را به مجموعه تغییرات (changeset) مشخصشده بهروزرسانی میکند. اگر هیچ مجموعه تغییراتی مشخص نشود، به نوک (tip) شاخهٔ نامگذاریشدهٔ فعلی بهروزرسانی شده و نشانک (bookmark) فعال منتقل میشود (ببینید: hg help bookmarks).
دستور update بازبینی والد دایرکتوری کاری را روی مجموعه تغییرات مشخصشده تنظیم میکند (ببینید: hg help parents).
اگر مجموعه تغییرات مشخصشده از نوادگان یا اجداد والدِ دایرکتوری کاری نباشد و تغییرات ثبتنشدهای وجود داشته باشد، عملیات بهروزرسانی لغو میشود. با گزینهٔ -c/--check، دایرکتوری کاری برای وجود تغییرات ثبتنشده بررسی میشود؛ اگر موردی یافت نشود، دایرکتوری کاری به مجموعه تغییرات مشخصشده بهروزرسانی میگردد.
گزینههای -C/--clean، -c/--check و -m/--merge کنترل میکنند که در صورت وجود تغییرات ثبتنشده در دایرکتوری کاری چه اتفاقی رخ دهد. در هر بار حداکثر یکی از آنها را میتوان مشخص کرد.
- 1.
- اگر هیچ گزینهای مشخص نشده باشد، و مجموعه تغییرات درخواستی از اجداد یا نوادگان والدِ دایرکتوری کاری باشد، تغییرات ثبتنشده در مجموعه تغییرات درخواستی ادغام (merge) شده و نتیجه ادغام بهصورت ثبتنشده باقی میماند. اگر مجموعه تغییرات درخواستی از اجداد یا نوادگان نباشد (یعنی در شاخهٔ دیگری باشد)، عملیات بهروزرسانی لغو شده و تغییرات ثبتنشده حفظ میشوند.
- 2.
- با گزینهٔ -m/--merge، عملیات بهروزرسانی مجاز خواهد بود حتی اگر مجموعه تغییرات درخواستی از اجداد یا نوادگان والدِ دایرکتوری کاری نباشد.
- 3.
- با گزینهٔ -c/--check، عملیات بهروزرسانی لغو شده و تغییرات ثبتنشده حفظ میشوند.
- 4.
- با گزینهٔ -C/--clean، تغییرات ثبتنشده دور ریخته شده و دایرکتوری کاری به مجموعه تغییرات درخواستی بهروزرسانی میشود.
برای لغو یک ادغام ثبتنشده (و از دست دادن تغییرات خود)، از hg merge --abort استفاده کنید.
از null بهعنوان changeset برای خالی کردن دایرکتوری کاری استفاده کنید (مانند hg clone -U).
اگر میخواهید فقط یک فایل را به بازبینی قدیمیتری بازگردانید، از hg revert [-r REV] NAME استفاده کنید.
برای دیدن فهرستی از قالبهای معتبر برای -d/--date، به hg help dates مراجعه کنید.
در صورت موفقیت 0، و در صورت وجود فایلهای حلنشده 1 برمیگرداند.
گزینهها:
- -C, --clean
- دور ریختن تغییرات ثبتنشده (بدون نسخهٔ پشتیبان)
- -c, --check
- الزام به تمیز بودن دایرکتوری کاری
- -m, --merge
- ادغام تغییرات ثبتنشده
- -d,--date <DATE>
- تازهترین بازبینی مطابق با تاریخ
- -r,--rev <REV>
- بازبینی
- -t,--tool <TOOL>
- تعیین ابزار ادغام (merge)
نامهای مستعار: up checkout co
archive
ایجاد یک بایگانی فاقد نسخهبندی از یک بازبینی مخزن:
hg archive [OPTION]... DEST
بهطور پیشفرض، بازبینی استفادهشده والد دایرکتوری کاری است؛ برای تعیین یک بازبینی متفاوت از -r/--rev استفاده کنید.
نوع بایگانی بهطور خودکار بر اساس پسوند فایل تشخیص داده میشود (برای تعیین دستی، از -t/--type استفاده کنید).
مثالها:
- ایجاد یک
فایل zip شامل
انتشار 1.0:
hg archive -r 1.0 project-1.0.zip
- ایجاد یک tarball
بهاستثنای
فایلهای .hg:
hg archive project.tar.gz -X ".hg*"
انواع معتبر عبارتند از:
نام دقیق بایگانی یا دایرکتوری مقصد با استفاده از یک رشته قالب مشخص میشود؛ برای جزئیات به hg help export مراجعه کنید.
به ابتدای نام هر عضوی که به فایل بایگانی افزوده میشود، یک پیشوند دایرکتوری اضافه میگردد. برای مشخص کردن یک رشته قالب برای پیشوند، از -p/--prefix استفاده کنید. پیشفرض، نام پایه (basename) بایگانی با حذف پسوندها است.
در صورت موفقیت، 0 برمیگرداند.
گزینهها:
- --no-decode
- فایلها از رمزگشاها عبور داده نشوند
- -p,--prefix <PREFIX>
- پیشوند دایرکتوری برای فایلهای درون بایگانی
- -r,--rev <REV>
- بازبینی مورد نظر برای توزیع
- -t,--type <TYPE>
- نوع توزیع جهت ایجاد
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینه علامتگذاریشده با [+] میتواند چندین بار مشخص شود.SS bundle
ایجاد یک فایل بسته (bundle):
hg bundle [-f] [-t BUNDLESPEC] [-a] [-r REV]... [--base REV]... FILE [DEST]...
تولید یک فایل بسته (bundle) حاوی دادههایی که قرار است به مخزن دیگری منتقل شوند.
برای ایجاد بستهای شامل تمام مجموعهتغییرها (changesets)، از -a/--all (یا --base null) استفاده کنید. در غیر این صورت، hg فرض میکند که مقصد تمام گرههای مشخصشده با پارامترهای --base را دارد. در غیر این حالت، hg فرض خواهد کرد که مخزن حاوی تمام گرههای موجود در مقصد است، یا default-push/default اگر مقصدی مشخص نشده باشد، که در آن مقصد همان مخازنی است که از طریق آرگومان DEST مشخص میکنید.
میتوانید قالب بسته را با گزینهٔ -t/--type تغییر دهید. برای مستندات مربوط به این قالب، hg help bundlespec را ببینید. بهطور پیشفرض، مناسبترین قالب استفاده میشود و فشردهسازی نیز بهطور پیشفرض بر روی bzip2 تنظیم شده است.
سپس فایل بسته میتواند با استفاده از روشهای متداول منتقل شده و با دستور unbundle یا pull بر روی مخزن دیگری اعمال شود. این کار زمانی که دستورهای مستقیم push و pull در دسترس نیستند یا زمانی که خروجیگرفتن از کل مخزن مطلوب نیست، مفید است.
اعمال بستهها تمام محتویات مجموعهتغییر از جمله مجوزها، اطلاعات رونوشت/تغییر نام و تاریخچهٔ بازبینیها را حفظ میکند.
در صورت موفقیت 0، و اگر تغییری یافت نشود 1 را برمیگرداند.
گزینهها:
- --exact
- محاسبهٔ پایه از بازبینی مشخصشده
- -f, --force
- اجرا حتی در صورتی که مقصد غیرمرتبط باشد
- -r,--rev <REV[+]>
- مجموعهتغییری که قصد اضافه کردن آن به مقصد وجود دارد
- -b,--branch <BRANCH[+]>
- شاخهٔ مشخصی که میخواهید بستهبندی کنید
- --base <REV[+]>
- مجموعهتغییر پایهای که فرض میشود در مقصد موجود است
- -a, --all
- بستهبندی تمام مجموعهتغییرها در مخزن
- -t,--type <TYPE>
- نوع فشردهسازی بسته جهت استفاده (پیشفرض: bzip2)
- -e,--ssh <CMD>
- مشخص کردن دستور ssh جهت استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست (remote)
- --insecure
- عدم اعتبارسنجی گواهی سرور (نادیدهگرفتن پیکربندی web.cacerts)
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد.SS export
تخلیه سرآیند و diffها برای یک یا چند changeset:
hg export [OPTION]... [-o OUTFILESPEC] [-r] [REV]...
چاپ سرآیند changeset و diffها برای یک یا چند بازنگری (revision). اگر هیچ بازنگریای مشخص نشود، والد دایرکتوری کاری استفاده میشود.
اطلاعات نشاندادهشده در سرآیند changeset عبارتند از: نویسنده، تاریخ، نام شاخه (در صورت غیرپیشفرض بودن)، هش changeset، والد(ها) و توضیحات ثبت (commit).
- نکته
- hg export ممکن است برای changesetهای ادغام (merge) خروجی diff غیرمنتظرهای تولید کند، زیرا changeset ادغام را تنها با نخستین والد آن مقایسه خواهد کرد.
خروجی میتواند درون یک فایل نوشته شود، که در این حالت نام فایل با استفاده از یک رشته الگو (template) مشخص میشود. hg help templates را ببینید. علاوه بر کلیدواژههای رایج الگو، قواعد قالببندی زیر نیز پشتیبانی میشوند:
- %%
-
نویسه لفظی "%"
- %H
-
هش changeset (۴۰ رقم هگزادسیمال)
- %N
-
تعداد وصلههای در حال تولید
- %R
-
شماره بازنگری changeset
- %b
-
نام پایه (basename) مخزن برونبریکننده
- %h
-
شکل کوتاه هش changeset (۱۲ رقم هگزادسیمال)
- %m
-
نخستین سطر پیام ثبت (فقط نویسههای الفبایی-عددی)
- %n
-
شماره توالی پر شده با صفر، شروع از ۱
- %r
-
شماره بازنگری changeset پر شده با صفر
- \
-
نویسه لفظی ""
بدون گزینه -a/--text، دستور export از تولید diff برای فایلهایی که باینری تشخیص دهد خودداری میکند. با -a، دستور export در هر صورت یک diff تولید خواهد کرد، احتمالاً با نتایجی نامطلوب.
با -B/--bookmark، changesetهای قابل دسترس توسط نشانک (bookmark) دادهشده انتخاب میشوند.
از گزینه -g/--git برای تولید diffها در قالب diff گسترشیافته git استفاده کنید. برای اطلاعات بیشتر hg help diffs را ببینید.
با گزینه --switch-parent، مقایسه (diff) در برابر والد دوم انجام خواهد شد. این گزینه میتواند برای بازبینی یک ادغام مفید باشد.
الگو (Template):
کلیدواژههای زیر علاوه بر کلیدواژهها و توابع رایج الگو پشتیبانی میشوند. همچنین hg help templates را ببینید.
مثالها:
- استفاده از
export و import برای
انتقال (transplant)
یک رفعباگ
به شاخه
جاری:
hg export -r 9353 | hg import -
- برونبری
همه changesetهای
میان دو
بازنگری به
یک فایل
همراه با
اطلاعات
تغییرنام:
hg export --git -r 123:150 > changes.txt
- تقسیم
تغییرات
ارسالی (outgoing)
به یک سری
وصله با
نامهای
توصیفی:
hg export -r "outgoing()" -o "%n-%m.patch"
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -B,--bookmark <BOOKMARK>
- برونبری تغییراتی که تنها از طریق نشانک دادهشده در دسترس هستند
- -o,--output <FORMAT>
- چاپ خروجی درون فایل با نام قالببندیشده
- --switch-parent
- تولید diff در برابر والد دوم
- -r,--rev <REV[+]>
- بازنگریها برای برونبری
- -a, --text
- در نظر گرفتن همه فایلها به عنوان متنی
- -g, --git
- استفاده از قالب diff گسترشیافته git (پیشفرض: diff.git)
- --binary
- تولید diffهای باینری در حالت git (پیشفرض)
- --nodates
- حذف تاریخها از سرآیندهای diff
- -T,--template <TEMPLATE>
- نمایش با الگو
گزینه علامتگذاریشده با [+] میتواند چندین بار مشخص شود.SS import
وارد کردن مجموعهای مرتب از وصلهها:
hg import [OPTION]... PATCH...
فهرستی از وصلهها را وارد کرده و آنها را بهصورت تکتک کامیت میکند (مگر اینکه --no-commit مشخص شده باشد).
برای خواندن یک وصله از ورودی استاندارد (stdin)، از «-» بهعنوان نام وصله استفاده کنید. اگر یک URL مشخص شده باشد، وصله از آنجا بارگیری خواهد شد.
دستور import ابتدا تغییرات را روی دایرکتوری کاری اعمال میکند (مگر اینکه --bypass مشخص شده باشد)؛ اگر تغییرات معلق و اعمالنشدهای وجود داشته باشد، عملیات import متوقف خواهد شد.
از --bypass برای اعمال و ثبت (commit) مستقیم وصلهها در مخزن، بدون دستکاری دایرکتوری کاری استفاده کنید. بدون --exact، وصلهها بر روی بازبینی والد دایرکتوری کاری اعمال خواهند شد.
شما میتوانید یک وصله را مستقیماً از یک پیام ایمیل وارد کنید. حتی وصلههای پیوستشده نیز کار میکنند (برای استفاده از بخش بدنه، نوع آن باید text/plain یا text/x-patch باشد). هدرهای From و Subject در پیام ایمیل بهعنوان ثبتکننده و پیام کامیت پیشفرض استفاده میشوند. تمامی بخشهای متن ساده (text/plain) در بدنه، قبل از اولین diff، به پیام کامیت اضافه میشوند.
اگر وصله واردشده توسط hg export ایجاد شده باشد، کاربر و توضیحات موجود در وصله بر مقادیر هدرها و بدنه پیام اولویت دارند. مقادیری که در خط فرمان با -m/--message و -u/--user مشخص میشوند، این مقادیر را بازنویسی میکنند.
اگر --exact مشخص شده باشد، import قبل از اعمال هر وصله، دایرکتوری کاری را روی والد آن وصله تنظیم میکند و در صورتی که changeset حاصل شناسهای متفاوت از شناسه ثبتشده در وصله داشته باشد، عملیات متوقف میشود. این کار در برابر حالتهای گوناگونی که قالبهای قابلحمل وصله و سامانههای ایمیل ممکن است در انتقال دادهها یا متادادههای Mercurial با خطا مواجه شوند محافظت میکند. برای انتقال بدون اتلاف داده، به hg bundle مراجعه کنید.
از --partial استفاده کنید تا مطمئن شوید که حتی در صورت عدم اعمال برخی قطعات (hunks)، یک changeset از وصله ایجاد میشود. قطعاتی که اعمال آنها با شکست مواجه شود در یک فایل <target-file>.rej نوشته میشوند. سپس میتوان تعارضها را پیش از اجرای hg commit --amend جهت بهروزرسانی changeset ایجادشده، بهصورت دستی حل کرد. این پرچم برای این تعبیه شده تا کاربران بتوانند وصلههایی را که بهصورت جزئی اعمال میشوند بدون از دست دادن متادادههای مرتبط (نویسنده، تاریخ، توضیحات و...) وارد کنند.
- نکته
- هنگامی که هیچ قطعهای بهصورت تمیز اعمال نشود، hg import --partial یک changeset خالی ایجاد کرده و فقط متادادههای وصله را وارد میکند.
با استفاده از -s/--similarity، دستور hg تلاش خواهد کرد تغییر نامها و رونوشتها را در وصله درست همانند hg addremove شناسایی کند.
استفاده از برنامههای خارجی patch برای اعمال وصله با تنظیم گزینه پیکربندی ui.patch امکانپذیر است. برای ابزار داخلی پیشفرض، میزان تقریب (fuzz) را میتوان از طریق patch.fuzz پیکربندی کرد. برای اطلاعات بیشتر درباره فایلهای پیکربندی و نحوه استفاده از این گزینهها، به hg help config مراجعه کنید.
برای فهرستی از قالبهای معتبر برای -d/--date، به hg help dates مراجعه کنید.
مثالها:
- وارد کردن
یک وصله
سنتی از یک
وبسایت و
تشخیص
تغییر
نامها:
hg import -s 80 http://example.com/bugfix.patch
- وارد کردن
یک changeset از یک
سرور hgweb:
hg import https://www.mercurial-scm.org/repo/hg/rev/5ca8c111e9aa
- وارد کردن
تمام
وصلههای
موجود در یک
فایل mbox به
سبک Unix:
hg import incoming-patches.mbox
- وارد کردن
وصلهها از
stdin:
hg import -
- تلاش برای
بازیابی
دقیق یک changeset
صادرشده
(همیشه
امکانپذیر
نیست):
hg import --exact proposed-fix.patch
- استفاده از یک ابزار خارجی برای اعمال وصلهای که برای ابزار داخلی پیشفرض بیش از حد تقریبی (fuzzy) است:
hg import --config ui.patch="patch --merge" fuzzy.patch
- •
- تغییر مقدار تقریب (fuzzing) پیشفرض از 2 به مقدار آسانگیرانهترِ 7:
hg import --config ui.fuzz=7 fuzz.patch
در صورت موفقیت 0، و در صورت موفقیت جزئی 1 را بازمیگرداند (به --partial مراجعه کنید).
گزینهها:
- -p,--strip <NUM>
- گزینه حذف مسیر دایرکتوری (strip) برای patch. این گزینه معنایی یکسان با گزینه متناظر در دستور patch دارد (پیشفرض: 1)
- -b,--base <PATH>
- مسیر پایه (منسوخشده)
- --secret
- استفاده از فاز محرمانه (secret) برای کامیت کردن
- -e, --edit
- فراخوانی ویرایشگر متن برای ویرایش پیامهای کامیت
- -f, --force
- صرفنظر کردن از بررسی تغییرات معلق و کامیتنشده (منسوخشده)
- --no-commit
- کامیت نکردن، تنها بهروزرسانی دایرکتوری کاری
- --bypass
- اعمال وصله بدون تغییر دادن دایرکتوری کاری
- --partial
- کامیت کردن حتی در صورت شکست در اعمال برخی قطعات (hunks)
- --exact
- لغو عملیات در صورتی که وصله همراه با اتلاف داده اعمال شود
- --prefix <DIR>
- اعمال وصله بر روی یک زیردایرکتوری.TP --import-branch استفاده از تمام اطلاعات شاخه در وصله (به صورت ضمنی با --exact اعمال میشود)
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام کامیت
- -l,--logfile <FILE>
- خواندن پیام کامیت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ کامیت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان کامیتکننده
- -s,--similarity <SIMILARITY>
- حدس زدن فایلهای تغییرنامیافته بر اساس شباهت (0<=s<=100)
نامهای مستعار: patch
unbundle
اعمال یک یا چند فایل بسته (bundle):
hg unbundle [-u] FILE...
اعمال یک یا چند فایل بسته تولیدشده توسط hg bundle.
در صورت موفقیت 0، و اگر یک بهروزرسانی فایلهای حلنشده داشته باشد 1 را برمیگرداند.
گزینهها:
- -u, --update
- در صورت باز شدن بستههای مجموعه تغییرات (changesets)، به سرشاخه (head) جدید بهروزرسانی میکند
نگهداری مخزن (Repository maintenance)
admin::narrow-client
ابزارهای مدیریت کلاینت مرتبط با narrow. (آزمایشی):
hg admin::narrow-client
این دستور آزمایشی است و در معرض تغییر قرار دارد.
گزینهها:
- --store-fingerprint
- دریافت اثرانگشت (fingerprint) برای narrowspec ذخیرهسازی این مخزن
admin::narrow-server
ابزارهای مدیریت سرور مرتبط با narrow. (آزمایشی):
hg admin::narrow-server
این دستور آزمایشی است و در معرض تغییر قرار دارد.
گزینهها:
- --shape-fingerprints
- فهرست کردن اثرانگشت (fingerprint) برای هر شکل (shape)
- --shape-patterns <SHAPE-PATTERNS>
- فهرست کردن الگوهای مسیر برای شکل دادهشده
- --shape-narrow-patterns <SHAPE-NARROW-PATTERNS>
- فهرست کردن الگوهای قدیمی به سبک narrow برای شکل دادهشده
- --shape-files <VALUE>
- فهرست کردن فایلهای پوششدادهشده توسط شکل دادهشده
- --shape-files-hidden <VALUE>
- فهرست کردن فایلهای این شکل که در رونوشت کاری (working copy) قرار ندارند
- -T,--template <TEMPLATE>
- نمایش بر
اساس الگو
(template)
بررسی یکپارچگی مخزن:
hg admin::verify
رابط کاربری جایگزین برای hg verify با کنترل بسیار بیشتر بر فرآیند اعتبارسنجی و گزارشدهی خطای بهتر.
گزینهها:
- -c,--check <CHECK[+]>
- افزودن یک بررسی
- -o,--option <OPTION[+]>
- ارسال یک گزینه به بررسی
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
manifest
نمایش مانیفست پروژه در بازبینی (revision) جاری یا مشخصشده:
hg manifest [-r REV]
چاپ فهرستی از فایلهای تحت کنترل نسخه برای بازبینی مشخصشده. اگر بازبینی مشخص نشود، اولین والد دایرکتوری کاری استفاده میشود، یا در صورتی که هیچ بازبینی واکشی (check out) نشده باشد، از بازبینی تهی (null) استفاده خواهد شد.
با گزینه -v، مجوزهای فایل، پیوندهای نمادین (symlinks) و بیتهای اجرایی چاپ میشوند. با گزینه --debug، هَشهای بازبینی فایل چاپ میشوند.
اگر گزینه --all مشخص شود، فهرست تمام فایلها از تمام بازبینیها چاپ خواهد شد. این شامل فایلهای حذفشده و تغییرنامیافته نیز میشود.
در صورت موفقیت، مقدار ۰ را برمیگرداند.
گزینهها:
- -r,--rev <REV>
- بازبینی جهت نمایش
- --all
- فهرست کردن فایلها از تمام بازبینیها
- -T,--template <TEMPLATE>
- نمایش به همراه الگو (template)
recover
بازگردانی یک تراکنش قطعشده (ناتمام):
hg recover
بازیابی از یک commit یا pull ناتمام و قطعشده.
این دستور تلاش میکند وضعیت مخزن را پس از یک عملیات ناتمام اصلاح کند. تنها زمانی باید از آن استفاده کرد که Mercurial آن را پیشنهاد دهد.
در صورت موفقیت ۰، و در صورتی که چیزی برای بازیابی نباشد یا verify شکست بخورد، ۱ را برمیگرداند.
گزینهها:
- --verify
- اجرای hg verify پس
از بازیابی
موفقیتآمیز
بازگردانی آخرین تراکنش (خطرناک) (منسوخشده):
hg rollback
لطفاً برای تصحیح اشتباهات در آخرین commit بهجای rollback از hg commit --amend استفاده کنید.
این دستور باید با احتیاط استفاده شود. تنها یک سطح از rollback وجود دارد و هیچ راهی برای واگردانی یک rollback نیست. این دستور همچنین dirstate را به وضعیت زمان آخرین تراکنش بازمیگرداند و هرگونه تغییر در dirstate از آن زمان تاکنون از بین میرود. این دستور دایرکتوری کاری را تغییر نمیدهد.
تراکنشها برای کپسولهسازی اثرات تمام دستوراتی به کار میروند که changesetهای جدید ایجاد کرده یا changesetهای موجود را به یک مخزن منتقل میکنند.
برای مثال، دستورهای زیر تراکنشی هستند و اثرات آنها میتواند بازگردانده شود:
- commit
- import
- pull
- push (با این مخزن بهعنوان مقصد)
- unbundle
برای جلوگیری از دست رفتن دائمی دادهها، اگر تراکنش commit بررسی (check out) نشده باشد، rollback از بازگردانی آن خودداری میکند. برای نادیدهگرفتن این محافظت از --force استفاده کنید.
دستور rollback را میتوان با تنظیم پیکربندی ui.rollback روی false بهطور کامل غیرفعال کرد. اگر به این دلیل اینجا هستید که میخواهید از rollback استفاده کنید و غیرفعال است، میتوانید با تنظیم ui.rollback روی true دوباره آن را فعال کنید.
این دستور برای استفاده در مخازن عمومی در نظر گرفته نشده است. به محض اینکه تغییرات برای pull شدن توسط سایر کاربران قابل مشاهده باشد، بازگرداندن محلی تراکنش بیاثر خواهد بود (ممکن است فرد دیگری از قبل تغییرات را pull کرده باشد). علاوهبر این، امکان تداخل و رقابت (race) با خوانندگان مخزن وجود دارد؛ برای مثال اگر یک rollback اجرا شود، ممکن است عملیات pull در حال انجام از مخزن با شکست مواجه شود.
در صورت موفقیت 0، و در صورتی که دادهای برای rollback در دسترس نباشد 1 برمیگرداند.
گزینهها:
- -n, --dry-run
- اقدامات را انجام نده، فقط خروجی را چاپ کن
- -f, --force
- نادیدهگرفتن اقدامات ایمنی
verify
بررسی صحت و یکپارچگی مخزن:
hg verify
بررسی صحت و یکپارچگی مخزن جاری.
این دستور یک بررسی جامع از یکپارچگی مخزن انجام میدهد و درهمسازها (hashes) و چکسامهای هر مدخل در changelog، manifest و فایلهای ردیابیشده، و همچنین یکپارچگی ارجاعات متقابل (crosslinks) و شاخصهای آنها را اعتبارسنجی میکند.
لطفاً برای اطلاعات بیشتر دربارهٔ بازیابی از خرابی مخزن، https://mercurial-scm.org/wiki/RepositoryCorruption را ببینید.
برای یک رابط کاربری جایگزین با کنترل بسیار بیشتر روی فرایند اعتبارسنجی و گزارش خطای بهتر، hg help admin::verify را امتحان کنید.
در صورت موفقیت 0، و در صورت مواجهه با خطا 1 برمیگرداند.
گزینهها:
- --full
- انجام بررسیهای بیشتر (آزمایشی)
config
نمایش تنظیمات پیکربندی ادغامشده از تمام فایلهای hgrc:
hg config [-u] [NAME]...
بدون هیچ آرگومانی، نامها و مقادیر تمام موارد پیکربندی چاپ میشود.
با یک آرگومان به شکل section.name، تنها مقدار آن مورد پیکربندی چاپ میشود.
با چندین آرگومان، نامها و مقادیر تمام موارد پیکربندی که با نامهای بخش یا section.name مطابقت دارند، چاپ میشود.
با --edit، یک ویرایشگر روی فایل پیکربندی در سطح کاربر باز میشود. با --global، فایل پیکربندی سراسری سیستم ویرایش میشود. با --local، فایل پیکربندی در سطح مخزن ویرایش میشود.
با --source، منبع (نام فایل و شماره خط) برای هر مورد پیکربندی چاپ میشود.
برای اطلاعات بیشتر درباره فایلهای پیکربندی، hg help config را ببینید.
پرچم --non-shared برای ویرایش فایل پیکربندی .hg/hgrc-not-shared به کار میرود. این فایل در حالت share-safe میان اشتراکها به اشتراک گذاشته نمیشود.
قالب (Template):
کلیدواژههای زیر پشتیبانی میشوند. همچنین hg help templates را ببینید.
پرچم --shared میتواند برای ویرایش فایل پیکربندی مخزن مبدأ اشتراکی استفاده شود. این پرچم تنها زمانی کار میکند که با استفاده از ویژگی آزمایشی share safe اشتراکگذاری انجام داده باشید.
در صورت موفقیت 0، و در صورتی که NAME وجود نداشته باشد 1 را برمیگرداند.
گزینهها:
- -u, --untrusted
- نمایش گزینههای پیکربندی غیرقابلاعتماد
- --exp-all-known
- نمایش تمام گزینههای پیکربندی شناختهشده (آزمایشی)
- -e, --edit
- ویرایش پیکربندی کاربر
- -l, --local
- ویرایش پیکربندی مخزن
- --source
- نمایش منبع مقدار پیکربندی
- ویرایش پیکربندی مخزن مبدأ اشتراکی
- --non-shared
- ویرایش پیکربندی غیرمشترک
- -g, --global
- ویرایش پیکربندی سراسری
- -T,--template <TEMPLATE>
- نمایش با استفاده از قالب
نامهای مستعار: showconfig debugconfig
نمایش راهنما برای یک موضوع مشخص یا یک نمای کلی از راهنما:
hg help [-eck] [-s PLATFORM] [TOPIC]
بدون هیچ آرگومانی، فهرستی از دستورها را به همراه پیامهای راهنمای کوتاه چاپ میکند.
با مشخص کردن یک موضوع، افزونه یا نام دستور، راهنمای مربوط به آن موضوع چاپ میشود.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -e, --extension
- تنها نمایش راهنمای مربوط به افزونهها
- -c, --command
- تنها نمایش راهنمای مربوط به دستورها
- -k, --keyword
- نمایش موضوعات منطبق با کلیدواژه
- -s,--system <PLATFORM[+]>
- نمایش راهنما برای پلتفرم(های) مشخص
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
version
نمایش اطلاعات نگارش و حقنشر:
hg version
قالب:
کلیدواژههای زیر پشتیبانی میشوند. همچنین ببینید: hg help templates.
- extensions
- فهرست افزونهها.
- ver
- رشته. شماره نگارش.
و هر مدخل از {extensions} افزون بر {ver} زیرکلیدواژههای زیر را فراهم میکند.
گزینهها:
- -T,--template <TEMPLATE>
- نمایش با استفاده از قالب
admin::chainsaw-update
دریافت و بهروزرسانی به یک بازبینی مشخص، تحت هر شرایطی، (آزمایشی):
hg admin::chainsaw-update [OPTION] --rev REV --source SOURCE --dest DEST
زمینهٔ کاربرد: برخی سیستمهای ادغام مداوم (CI)، ابزارهای بستهبندی یا استقرار.
نتیجهٔ نهایی مطلوب: مخزن محلی در REPO_PATH مشخصشده، دارای آخرین تغییرات تا بازبینی دادهشده و با یک دایرکتوری کاری تمیز و بهروزرسانیشده به بازبینی مورد نظر.
دستور chainsaw-update از یک مبدأ دریافت (pull) میکند، سپس دایرکتوری کاری را به بازبینی مشخصشده بهروزرسانی مینماید و بر هر مانعی که بر سر راه باشد فائق میآید.
بهطور پیشفرض، این دستور موارد زیر را انجام میدهد:
- اگر مخزن محلی هنوز وجود نداشته باشد، آن را کلون میکند و هر دایرکتوری را در مسیر دادهشده که یک مخزن Mercurial نباشد حذف مینماید. کلون اولیه بهطور پیشفرض کامل است تا بتوان clonebundles را اعمال کرد. برای جلوگیری از این کار از پرچم --initial-clone-minimal استفاده کنید.
- در صورت نیاز قفلها را میشکند، که در صورت دسترسی همزمان برای نوشتن ممکن است منجر به خرابی دادهها شود.
- در صورت نیاز عملیات بازیابی (recovery) را انجام میدهد.
- هرگونه تغییرات محلی را بازگردانی (revert) میکند.
- فایلهای ناشناخته و نادیدهگرفتهشده را پاکسازی (purge) میکند.
- در صورتی که سایر روشها با شکست مواجه شوند، تا مرز کلون مجدد پیش میرود (هنوز پیادهسازی نشده است).
از این دستور برای هیچ کاری جز انجام یک سری بهروزرسانیهای خودکار (بدون نظارت)، با دسترسی انحصاری کامل به مخزن در هر بار و بدون هیچ کار محلی دیگر جز اجرای اسکریپتهای ساخت (build)، استفاده نکنید. در صورتی که مخزن محلی یک اشتراک باشد (رجوع کنید به hg help share)، دسترسی نوشتن انحصاری به مبدأ اشتراک نیز الزامی است.
توصیه میشود این دستورها با متغیر محیطی HGPLAIN اجرا شوند (رجوع کنید به hg scripting).
انگیزه: در سیستمهای ادغام و تحویل مداوم (CI/CD)، قفلهای ساختگی یا باقیمانده از منابع رایج اتلاف وقت (هم زمان کاری و هم زمان تقویمی) هستند. اسکریپتهای CI/CD تمایل دارند با اقدامات متقابل، که اغلب در شرایط اضطراری ایجاد میشوند، گسترش یافته و حجیم شوند. همچنین، با اینکه نگهداشتن مخازن از یک وظیفه (job) به وظیفهٔ بعدی ایدهآل است (بهویژه برای مخازن بزرگ)، انجام یک کلون مجدد استثنایی بسیار بهتر از دست دادن مهلت انتشار است.
گزینهها:
- --purge-unknown
- حذف فایلهای نسخهبندینشده پیش از بهروزرسانی. غیرفعال کردن این گزینه در برخی موارد میتواند با بهروزرسانی تداخل ایجاد کند. همچنین رجوع کنید به hg purge. (پیشفرض: True)
- --purge-ignored
- حذف فایلهای نادیدهگرفتهشده پیش از بهروزرسانی. برای نمونه جهت استفادهٔ مجدد از فایلهای شیء کامپایلر (compiler object files) قبلی، این گزینه را غیرفعال کنید. همچنین رجوع کنید به hg purge. (پیشفرض: True)
- --rev <VALUE>
- بازبینی مورد نظر برای بهروزرسانی به آن
- --source <VALUE>
- مخزن مبدأ برای کلون کردن از آن
- --dest <VALUE>
- مخزن مقصد برای بهروزرسانی به REV (احتمالاً همراه با کلون کردن)
- --initial-clone-minimal
- فقط
بازبینی
تعیینشده
را در هنگام
کلون اولیه
دریافت (pull)
میکند. این
امر اثر
جانبی
نادیدهگرفتن
clone-bundles را دارد
که اغلب در
سمت کلاینت
کُندتر
بوده و نسبت
به اعمال
بستههای
کلون
موجود، بار
بیشتری به
سرور تحمیل
میکند.
نرمافزار Mercurial از تولید فایلهای مستقل «باندل» (bundle) که حاوی دادههای مخزن هستند پشتیبانی میکند. این «باندلها» معمولاً بهطور محلی ذخیره شده و بعداً مورد استفاده قرار میگیرند یا میان مخازن مختلف، احتمالاً در ماشینهای متفاوت، تبادل میشوند. دستورهای نمونهای که از باندلها استفاده میکنند hg bundle و hg unbundle هستند.
تولید فایلهای باندل توسط یک رشتهٔ «مشخصات باندل» («bundlespec») کنترل میشود. این رشته به فرایند تولید باندل مشخص میکند که چگونه باندل را ایجاد کند.
یک رشتهٔ «bundlespec» از عناصر زیر تشکیل شده است:
- type
- رشتهای که مشخصکنندهٔ قالب باندلِ مورد استفاده است.
- compression
- موتور فشردهسازی مورد استفاده برای فشردهسازی دادههای خام باندل را مشخص میکند.
- parameters
- پارامترهای کلید-مقدار دلخواه برای کنترل بیشتر فرایند تولید باندل.
یک رشتهٔ «bundlespec» دارای قالبهای زیر است:
- <type>
- رشتهٔ دقیق و بدون تغییرِ قالب باندل استفاده میشود.
- <compression>-<type>
- موتور فشردهسازی و قالب توسط یک خط پیوند (-) از یکدیگر جدا میشوند.
پارامترهای اختیاری پس از <type> قرار میگیرند. پارامترها جفتهای key=value هستند که با سازوکار URI گریزدهی شدهاند (URI escaped). هر جفت با یک نقطهویرگول (;) جدا میشود. نخستین پارامتر پس از یک ; بلافاصله به دنبال مقدار <type> آغاز میشود.
انواع موجود (Available Types)
رشتههای <type> زیر برای باندل در دسترس هستند:
- v1
- یک باندل
سنتی «changegroup»
نسخهٔ ۱
تولید
میکند.
این قالب تقریباً با تمام کلاینتهای Mercurial سازگار است زیرا قدیمیترین نسخه محسوب میشود. با این حال، محدودیتهایی دارد و به همین دلیل دیگر برای مخازن جدید گزینهٔ پیشفرض نیست.
باندلهای v1 را میتوان در مخازن مدرنی که از قالب ذخیرهسازی «generaldelta» استفاده میکنند به کار برد. با این حال، ممکن است تولید باندل زمان بیشتری برده و باندل حاصل به طور چشمگیری بزرگتر از یک باندل v2 باشد.
باندلهای v1 تنها میتوانند از قالبهای فشردهسازی gzip، bzip2 و none استفاده کنند.
- v2
- یک باندل
نسخهٔ ۲
تولید
میکند.
باندلهای نسخهٔ ۲ قالبی توسعهپذیر هستند که میتوانند دادههای بیشتری از مخزن (مانند اطلاعات bookmarkها و فازها) را ذخیره کنند و همچنین دادهها را بهینهتر ذخیره نمایند که در نتیجه باندلهای کوچکتری تولید میشود.
باندلهای نسخهٔ ۲ همچنین میتوانند از موتورهای فشردهسازی مدرن نظیر zstd استفاده کنند که عملیات فشردهسازی را سریعتر و حجم خروجی را اغلب کوچکتر میسازد.
موتورهای فشردهسازی موجود (Available Compression Engines)
موتورهای <compression> زیر برای باندل قابل استفاده هستند:
- bzip2
-
الگوریتمی که نسبت به gzip باندلهای کوچکتری تولید میکند.
تمام کلاینتهای Mercurial باید از این قالب پشتیبانی کنند.
این موتور احتمالاً باندلهای کوچکتری نسبت به gzip تولید میکند اما هم هنگام فشردهسازی و هم در زمان بازگشایی به طور محسوسی کندتر خواهد بود.
در صورت در دسترس بودن، موتور zstd میتواند فشردهسازی مشابه یا بهتری را با سرعتهای بسیار بالاتر ارائه دهد.
- gzip
-
فشردهسازی zlib با استفاده از الگوریتم DEFLATE.
تمام کلاینتهای Mercurial باید از این قالب پشتیبانی کنند. الگوریتم فشردهسازی تعادل معقولی میان نسبت فشردهسازی و اندازه برقرار میکند.
- none
-
هیچ فشردهسازی انجام نمیشود.
از این موتور فشردهسازی برای غیرفعال کردن صریح فشردهسازی استفاده کنید.
میتوان به ابتدای نام موتورهای فشردهسازی عبارت stream را افزود تا یک باندل جریانی (streaming bundle) ایجاد شود. اینها باندلهایی هستند که تولید و مصرف آنها بسیار کارآمد است، اما سازگاری آنها با کلاینتهای قدیمیتر تضمینشده نیست..SS "گزینههای موجود (Available Options)"
گزینههای زیر وجود دارند:
- changegroup
- گنجاندن دادههای changegroup در bundle (پیشفرض: True).
- cg.version
- انتخاب نسخه changegroup جهت استفاده. گزینههای موجود عبارتند از: 01، 02، 03 یا 04. بهطور پیشفرض بر اساس قالب فعلی مخزن، نسخه بهصورت خودکار انتخاب خواهد شد.
- cg.delta-compression
- از cg.version "04" به بعد، changegroupها میتوانند شامل دلتاهای از پیش فشردهشدهای باشند که سمت دریافتکننده ممکن است آنها را همانگونه که هستند بازاستفاده کند. اگر این گزینه نادیده گرفته شود، هیچ دلتایی از این نوع بخشی از changegroup نخواهد بود. این گزینه فهرستی جداشده با کاما از قالبهای فشردهسازیِ پذیرفتهشده را دریافت میکند. قالبهای پشتیبانیشده عبارتند از:
- •
- none: دلتای صراحتاً فشردهنشده (مفید برای جلوگیری از اینکه دریافتکننده حتی
- تلاش کند چنین دلتاهایی را فشردهسازی کند)
- zlib: دلتای فشردهشده با zlib
- zstd: دلتای فشردهشده با zstd
- obsolescence
- گنجاندن نشانگرهای منسوخشدگی (obsolescence-markers) مرتبط با changesetهای بستهبندیشده.
- phases
- گنجاندن اطلاعات فازها (phases) مرتبط با changesetهای بستهبندیشده.
- revbranchcache
- گنجاندن حافظهٔ پنهان "rev-branch" در داخل bundle.
- گنجاندن حافظهٔ پنهان "tags-fnodes" در داخل bundle.
مثالها (EXAMPLES)
- v2
-
تولید یک bundle از نوع v2 با استفاده از گزینههای پیشفرض، از جمله فشردهسازی.
- none-v1
-
تولید یک bundle از نوع v1 بدون هیچگونه فشردهسازی.
- zstd-v2
-
تولید یک bundle از نوع v2 با فشردهسازی zstandard با استفاده از تنظیمات پیشفرض.
- zstd-v1
-
این مورد با خطا مواجه میشود زیرا zstd برای انواع v1 پشتیبانی نمیشود.
- none-streamv2
-
تولید یک bundle جریانی (streaming) از نوع v2 بدون فشردهسازی.
- zstd-v2;obsolescence=true;phases=true
-
تولید یک bundle از نوع v2 با فشردهسازی zstandard که شامل نشانگرهای منسوخشدگی و فازها است.
Mercurial خروجی چندین دستور را رنگیسازی میکند.
برای نمونه، دستور diff موارد اضافهشده را با رنگ سبز و موارد حذفشده را با رنگ قرمز نشان میدهد، در حالی که دستور status فایلهای تغییریافته را به رنگ سرخابی (magenta) نمایش میدهد. بسیاری از دستورهای دیگر نیز رنگهای مشابهی دارند. سفارشیسازی این رنگها امکانپذیر است.
برای فعالسازی رنگ (پیشفرض) در صورت امکان، استفاده کنید از:
[ui] color = yes
برای غیرفعال کردن رنگ استفاده کنید از:
[ui] color = no
برای جزئیات، hg help config.ui.color را ببینید.
صفحهبندیکننده (pager) پیشفرض در Windows از رنگ پشتیبانی نمیکند، بنابراین فعالکردن صفحهبندیکننده عملاً رنگ را غیرفعال خواهد کرد. برای غیرفعال کردن صفحهبندیکننده، hg help config.ui.paginate را ببینید. متناوباً، پوستههای MSYS و Cygwin دستور less را به عنوان صفحهبندیکننده ارائه میدهند که میتواند برای پشتیبانی از حالت رنگی ANSI پیکربندی شود. Windows 10 بهطور بومی از حالت رنگی ANSI پشتیبانی میکند.
حالت (Mode)
Mercurial میتواند از سامانههای گوناگونی برای نمایش رنگ استفاده کند. حالتهای پشتیبانیشده عبارتند از ansi، win32 و terminfo. برای جزئیات درباره نحوه کنترل حالت، hg help config.color را ببینید.
جلوهها (Effects)
علاوه بر رنگ، جلوههای دیگری مانند متن پررنگ (bold) و زیرخطدار (underlined) نیز در دسترس هستند. بهطور پیشفرض، پایگاه داده terminfo برای یافتن کدهای ترمینالِ مربوط به تغییر رنگ و جلوه استفاده میشود. اگر terminfo در دسترس نباشد، جلوهها با تابع کنترلی ECMA-48 SGR (معروف به کدهای گریز ANSI) رندر میشوند.
جلوههای موجود در حالت terminfo عبارتند از 'blink'، 'bold'، 'dim'، 'inverse'، 'invisible'، 'italic'، 'standout' و 'underline'؛ در حالت ECMA-48، گزینهها عبارتند از 'bold'، 'inverse'، 'italic' و 'underline'. نحوه رندر شدن هر جلوه به شبیهساز ترمینال بستگی دارد. ممکن است برخی از آنها برای یک نوع ترمینال خاص در دسترس نباشند و بدون هشدار نادیده گرفته شوند.
اگر مدخل terminfo برای ترمینال شما فاقد کدهای یک جلوه باشد یا کدهای نادرستی داشته باشد، میتوانید آن کدها را در پیکربندی خود اضافه کرده یا بازنویسی کنید:
[color] terminfo.dim = \E[2m
که در آن 'E' با یک نویسه گریز (escape) جایگزین میشود.
برچسبها (Labels)
متن بسته به برچسبهایی که دارد جلوههای رنگی دریافت میکند. بسیاری از دستورهای پیشفرض Mercurial متن برچسبدار تولید میکنند. شما همچنین میتوانید با استفاده از تابع label، برچسبهای اختصاصی خود را در قالبها تعریف کنید؛ hg help templates را ببینید. برای دریافت جلوهها، برچسبها باید دارای یک نقطه باشند، مانند log.secret یا branch.active. یک بخش منفرد از متن ممکن است بیش از یک برچسب داشته باشد. در این صورت، جلوههای دادهشده به آخرین برچسب بر سایر جلوهها ارجحیت خواهند داشت (آنها را لغو میکنند). این شامل جلوه ویژه "none" نیز میشود که سایر جلوهها را خنثی میکند.
برچسبها معمولاً نامرئی هستند. برای دیدن این برچسبها و موقعیت آنها در متن، از گزینه سراسری --color=debug استفاده کنید. یک متن پایه ممکن است به چندین برچسب وابسته باشد، مانند:
[log.changeset changeset.secret|changeset: 22611:6f0a53c8f587]
موارد زیر جلوههای پیشفرض برای برخی برچسبهای پیشفرض هستند. جلوههای پیشفرض را میتوان از طریق فایل پیکربندی بازنویسی کرد:
[color] status.modified = blue bold underline red_background status.added = green bold status.removed = red bold blue_background status.deleted = cyan bold underline status.unknown = magenta bold underline status.ignored = black bold # مقدار 'none' تمام جلوهها را خاموش میکند status.clean = none status.copied = none qseries.applied = blue bold underline qseries.unapplied = black bold qseries.missing = red bold diff.diffline = bold diff.extended = cyan bold diff.file_a = red bold diff.file_b = green bold diff.hunk = magenta diff.deleted = red diff.inserted = green diff.changed = white diff.tab = diff.trailingwhitespace = bold red_background # خالی است تا سبک برچسب دربرگیرنده را به ارث ببرد changeset.public = changeset.draft = changeset.secret = resolve.unresolved = red bold resolve.resolved = green bold bookmarks.active = green branches.active = none branches.closed = black bold branches.current = green branches.inactive = none tags.normal = green tags.local = black bold rebase.rebased = blue rebase.remaining = red bold shelve.age = cyan shelve.newest = green bold shelve.name = blue bold histedit.remaining = red bold از آنجا که تنها هشت رنگ استاندارد وجود دارد، Mercurial به شما اجازه میدهد در صورت استفاده از حالت terminfo، برای سایر جایگاههای رنگی (color slots) که ممکن است برای نوع ترمینال شما در دسترس باشند، نامهای رنگی تعریف کنید. برای نمونه: color.brightblue = 12 color.pink = 207 color.orange = 202
جهت تنظیم 'brightblue' روی جایگاه رنگی 12 (کاربردی برای ترمینالهای 16 رنگی که رنگهای روشنتری در هشت جایگاه بالایی تعریف کردهاند)، و 'pink' و 'orange' برای رنگهای موجود در مکعب رنگ پیشفرض ترمینال 256 رنگ xterm. این رنگهای تعریفشده سپس میتوانند همانند هر یک از هشت رنگ از پیشتعریفشده استفاده شوند، از جمله افزودن پسوند '_background' برای تنظیم پسزمینه به آن رنگ.
قالبهای تاریخ (DATE FORMATS)
برخی از دستورها به کاربر اجازه میدهند یک تاریخ را مشخص کند، مانند:
- backout, commit, import, tag: تعیین تاریخ کامیت.
- log, revert, update: انتخاب بازبینی(ها) بر اساس تاریخ.
قالبهای تاریخ متعددی معتبر هستند. در اینجا چند نمونه آورده شده است:
- Wed Dec 6 13:18:29 2006 (منطقه زمانی محلی فرض میشود)
- Dec 6 13:18 -0600 (سال فرض میشود، اختلاف زمانی مشخص شده است)
- Dec 6 13:18 UTC (عبارتهای UTC و GMT نامهای مستعار برای +0000 هستند)
- Dec 6 (نیمهشب)
- 13:18 (امروز فرض میشود)
- 3:39 (ساعت 3:39AM فرض میشود)
- 3:39pm (15:39)
- 2006-12-06 13:18:29 (قالب ISO 8601)
- 2006-12-6 13:18
- 2006-12-6
- 12-6
- 12/6
- 12/6/6 (Dec 6 2006)
- today (نیمهشب)
- yesterday (نیمهشب)
- now - همین لحظه
در نهایت، قالب درونی Mercurial نیز وجود دارد:
- •
- 1165411109 0 (Wed Dec 6 13:18:29 2006 UTC)
این قالب نمایش درونی برای تاریخها است. عدد نخست، تعداد ثانیههای سپریشده از مبدأ زمانی (1970-01-01 00:00 UTC) است. عدد دوم، اختلاف منطقه زمانی محلی به ثانیه در غرب UTC است (اگر منطقه زمانی در شرق UTC باشد، منفی خواهد بود).
دستور log بازههای تاریخ را نیز میپذیرد:
- <DATE - در یا پیش از تاریخ/زمان مشخصشده
- >DATE - در یا پس از تاریخ/زمان مشخصشده
- DATE to DATE - یک بازه زمانی، بهصورت فراگیر (شامل ابتدا و انتها)
- -DAYS - ظرف
تعداد
روزهای
مشخصشده
از امروز
ابزار Mercurial با گذشت زمان تکامل مییابد و ممکن است برخی ویژگیها، گزینهها یا دستورها با جایگزینهای بهتر و امنتر جایگزین شوند. این مبحث به شما کمک میکند تا شیوه استفاده و/یا پیکربندی فعلی خود را به ویژگیهای جدیدتر انتقال دهید.
دستورها (Commands)
دستورهای زیر هنوز در دسترس هستند، اما استفاده از آنها دیگر توصیه نمیشود:
locate
این دستور با hg files جایگزین شده است.
parents
این دستور میتواند با hg summary یا hg log به همراه revsetهای مناسب جایگزین شود. برای اطلاعات بیشتر hg help revsets را ببینید.
tip
جایگزین توصیهشده hg heads است.
گزینهها (Options)
- web.allowpull
-
به allow-pull تغییر نام یافته است.
- web.allow_push
-
به allow-push تغییر نام یافته است.
قالبهای DIFF (DIFF FORMATS)
قالب پیشفرض Mercurial برای نمایش تغییرات بین دو نسخه از یک فایل، با قالب یکپارچه (unified format) مربوط به GNU diff سازگار است که میتواند توسط GNU patch و بسیاری دیگر از ابزارهای استاندارد استفاده شود.
اگرچه این قالب استاندارد اغلب کافی است، اطلاعات زیر را ذخیره و کدگذاری نمیکند:
- وضعیت قابلاجرا بودن (executable) و سایر بیتهای دسترسی (permission bits)
- اطلاعات رونوشت (کپی) یا تغییر نام
- تغییرات در فایلهای باینری
- ایجاد یا حذف فایلهای خالی
همچنین Mercurial از قالب گسترشیافته diff از سامانه کنترل نسخه git پشتیبانی میکند که این محدودیتها را برطرف میسازد. قالب git diff بهصورت پیشفرض تولید نمیشود زیرا هنوز برخی ابزارهای متداول این قالب را شناسایی نمیکنند.
این بدان معناست که هنگام تولید diff از یک مخزن Mercurial (بهعنوان مثال با hg export)، باید مراقب مواردی مانند کپی یا تغییر نام فایلها و دیگر موارد ذکرشده در بالا باشید؛ چرا که هنگام اعمال یک diff استاندارد روی مخزنی دیگر، این اطلاعات اضافی از بین خواهند رفت. عملیات داخلی Mercurial (مانند push و pull) تحت تأثیر این موضوع قرار نمیگیرند، زیرا آنها از یک قالب باینری داخلی برای انتقال تغییرات استفاده میکنند.
برای اینکه Mercurial قالب گسترشیافته git diff را تولید کند، از گزینه --git که برای بسیاری از دستورها در دسترس است استفاده کنید، یا در بخش [diff] فایل پیکربندی خود مقدار 'git = True' را قرار دهید. هنگام وارد کردن (import) فایلهای diff با این قالب یا استفاده از آنها در افزونه mq، نیازی به تنظیم این گزینه ندارید.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
- HG
- مسیر فایل اجرایی 'hg'، که بهطور خودکار هنگام اجرای قلابها (hooks)، افزونهها یا ابزارهای خارجی منتقل میشود. در صورت تنظیم نشدن یا خالی بودن، اگر برنامه بهصورت کامپایلشده (frozen) باشد نام فایل اجرایی hg خواهد بود، یا اینکه یک فایل اجرایی با نام 'hg' (با پسوندهای تعریفشده در %PATHEXT% [بهصورت پیشفرض COM/EXE/BAT/CMD] در ویندوز) جستجو میشود.
- HGEDITOR
- نام
ویرایشگری
که هنگام
ثبت
تغییرات (commit)
اجرا
میشود. EDITOR را
ببینید.
(منسوخشده، hg help config.ui.editor را ببینید)
- HGENCODING
- این متغیر تنظیمات محلی (locale) پیشفرضی را که توسط Mercurial شناسایی شده است لغو میکند. این تنظیم برای تبدیل دادهها از جمله نامهای کاربری، توضیحات changeset، نام برچسبها (tags) و شاخهها استفاده میشود. این تنظیم را میتوان با گزینه خط فرمان --encoding نادیده گرفت.
- HGENCODINGMODE
- رفتار Mercurial را در مواجهه با نویسههای ناشناخته هنگام تغییر کدگذاری (transcoding) ورودی کاربر تعیین میکند. مقدار پیشفرض "strict" است که باعث میشود در صورت ناتوانی در نگاشت یک نویسه، Mercurial متوقف شود. سایر مقادیر شامل "replace" (جایگزین کردن نویسههای ناشناخته) و "ignore" (نادیده گرفتن و حذف آنها) است. این تنظیم با گزینه خط فرمان --encodingmode قابل بازنویسی است.
- HGENCODINGAMBIGUOUS
- رفتار Mercurial را برای مدیریت نویسههایی با عرض نامشخص یا «مبهم» (مانند نویسههای لاتین دارای اعراب در قلمهای شرق آسیا) تعیین میکند. بهطور پیشفرض، Mercurial نویسههای مبهم را باریک (narrow) در نظر میگیرد؛ اگر این نویسهها باعث بروز مشکل در قالببندی میشوند، این متغیر را روی "wide" تنظیم کنید.
- HGMERGE
- یک فایل
اجرایی
برای حل
تعارضهای
ادغام (merge conflicts).
این برنامه
با سه
آرگومان
اجرا خواهد
شد: فایل
محلی (local file)،
فایل راه
دور (remote file) و
فایل والد
مشترک (ancestor file).
(منسوخشده، hg help config.ui.merge را ببینید)
- HGRCPATH
- فهرستی از
فایلها یا
دایرکتوریها
برای
جستجوی
فایلهای
پیکربندی.
جداکننده
موارد در Unix
برابر با ":"
و در Windows برابر
با ";" است.
اگر HGRCPATH تنظیم
نشده باشد،
مسیر
جستجوی
پیشفرض
سیستمعامل
استفاده
میشود. اگر
خالی باشد،
تنها فایل .hg/hgrc
از مخزن
فعلی
خوانده
میشود.
به ازای هر مورد در HGRCPATH:
- اگر یک دایرکتوری باشد، تمام فایلهایی که با پسوند .rc خاتمه مییابند اضافه میشوند
- در غیر این صورت، خود فایل اضافه خواهد شد
- HGRCSKIPREPO
- هنگامی که این متغیر تنظیم شود، فایلهای .hg/hgrc مربوط به مخازن خوانده نخواهند شد.
- HGPLAIN
- هنگامی که
تنظیم شود،
هرگونه
تنظیمات
پیکربندی
را که ممکن
است خروجی
پیشفرض Mercurial
را تغییر
دهد
غیرفعال
میکند. این
موارد شامل
کدگذاری،
پیشفرضها،
حالت پرگو
(verbose)، حالت
اشکالزدایی
(debug)، حالت
بیصدا (quiet)،
گزارش
خطاها (tracebacks) و
بومیسازی
میشود. این
متغیر
بهویژه
هنگام
اسکریپتنویسی
با Mercurial بدون
تأثیرپذیری
از تنظیمات
کاربر
بسیار
کاربردی
است.
علاوه بر قابلیتهای غیرفعالشده توسط HGPLAIN=، مقادیر زیر را نیز میتوان برای تنظیم رفتار دقیقتر مشخص کرد:
- +strictflags
-
تجزیه و اعتبارسنجی پرچمهای خط فرمان را محدود و سختگیرانه میکند.
گزینههای معادل که مستقیماً از طریق پرچمهای خط فرمان یا متغیرهای محیطی تعیین شدهاند، لغو نخواهند شد.
برای جزئیات بیشتر hg help scripting را ببینید.
- HGPLAINEXCEPT
- فهرستی جداشده با کاما از ویژگیهایی که باید در زمان فعال بودن HGPLAIN همچنان حفظ شوند. در حال حاضر مقادیر زیر پشتیبانی میشوند:
- alias
-
نامهای مستعار (aliases) حذف نشوند.
- color
-
خروجی رنگی غیرفعال نشود.
- i18n
-
بینالمللیسازی و ترجمه خروجی حفظ شود..TP revsetalias
نامهای مستعار revset حذف نشوند.
- templatealias
-
نامهای مستعار template حذف نشوند.
- progress
-
خروجی پیشرفت پنهان نشود.
تنظیم HGPLAINEXCEPT روی هر مقداری (حتی یک رشتهٔ خالی)، حالت ساده را فعال خواهد کرد.
- HGUSER
- این رشتهای است که بهعنوان پدیدآورندهٔ یک commit استفاده میشود. اگر تنظیم نشده باشد، مقادیر موجود به این ترتیب بررسی خواهند شد:
- HGUSER (منسوخ شده)
- فایلهای پیکربندی برگرفته از HGRCPATH
- اعلان تعاملی
- LOGNAME (به همراه @hostname الحاقشده)
(منسوخ شده، ببینید: hg help config.ui.username)
- ممکن است بهعنوان پدیدآورندهٔ یک commit استفاده شود؛ HGUSER را ببینید.
- LOGNAME
- ممکن است بهعنوان پدیدآورندهٔ یک commit استفاده شود؛ HGUSER را ببینید.
- VISUAL
- این نام ویرایشگری است که هنگام ثبت commit استفاده میشود. EDITOR را ببینید.
- EDITOR
- گاهی Mercurial نیاز دارد تا یک فایل متنی را برای ویرایش توسط کاربر در یک ویرایشگر باز کند، برای نمونه هنگام نوشتن پیامهای commit. ویرایشگر مورد استفاده با بررسی متغیرهای محیطی HGEDITOR، VISUAL و EDITOR به همین ترتیب مشخص میشود. نخستین متغیر غیرخالی انتخاب میشود. اگر همهٔ آنها خالی باشند، ویرایشگر پیشفرض 'vi' خواهد بود.
- PYTHONPATH
- این متغیر توسط Python برای یافتن ماژولهای واردشده استفاده میشود و در صورتی که Mercurial در سطح کل سیستم نصب نشده باشد، ممکن است نیاز به مقداردهی مناسب داشته باشد.
- HGZSTDPOLICY
- کنترل میکند که کدام پیادهسازی zstd برای کد Python استفاده شود. این مقداری فهرستی از گزینهها به ترتیب اولویت است.
- vendored: استفاده از نسخهٔ ثابت python-zstandard که همراه با Mercurial عرضه میشود
- system: استفاده از بستهٔ پایتون "zstandard" که احتمالاً روی سیستم نصب است
- none: عدم استفاده از zstd (در صورت شکست گزینههای بالا، حذف این گزینه موجب بروز خطا خواهد شد)
مقدار پیشفرض "vendored,system,none" است.
بسته به اینکه کتابخانهٔ واسط (wrapper) مربوط به zstd و ادغام آن در Mercurial در آینده چگونه توسعه یابد، ممکن است این متغیر در آینده منسوخ شود. این پیکربندی هیچ تأثیری بر کد Rust ندارد.
نشانگرهای منسوخشدگی امکان علامتگذاری مجموعهتغییراتی را که حذف شده یا با نسخهٔ جدیدی از مجموعهتغییرات جایگزین شدهاند، فراهم میآورند.
برخلاف روش پیشین برای مدیریت چنین تغییراتی—یعنی حذف کامل (strip) مجموعهتغییرات قدیمی از مخزن—نشانگرهای منسوخشدگی میتوانند بین مخازن منتشر شوند. این موضوع امکان تبادل امن و سادهٔ تاریخچهٔ تغییرپذیر و اصلاح پس از ثبت آن را فراهم میکند. فازهای مجموعهتغییرات رعایت میشوند؛ به گونهای که تنها مجموعهتغییرات draft و secret قابل تغییر هستند (برای جزئیات بیشتر hg help phases را ببینید).
منسوخشدگی با استفاده از «نشانگرهای منسوخشدگی» ردیابی میشود؛ بخشی از فراداده که مشخص میکند کدام مجموعهتغییرات منسوخ شدهاند، جانشینهای احتمالی برای یک مجموعهتغییرات دادهشده کدامند، مجموعهتغییرات در چه زمانی منسوخ علامتگذاری شده است و چه کاربری عملیات بازنویسی را انجام داده است. این نشانگرها جدا از دادههای استاندارد مجموعهتغییرات ذخیره میشوند و میتوان آنها را بدون هیچیک از مجموعهتغییرات پیشین (سلف) تبادل کرد که از تبادل غیرضروری دادههای منسوخشدگی جلوگیری میکند.
مجموعهٔ کامل نشانگرهای منسوخشدگی، تاریخچهای از اصلاحات مجموعهتغییرات را شرح میدهد که مستقل از (متعامد با) تاریخچهٔ تغییرات فایلها در مخزن است. این تاریخچهٔ مجموعهتغییرات امکان تشخیص و رفع خودکار حالتهای خاصی (edge cases) را فراهم میآورد که از بازنویسی همزمان بخش یکسانی از تاریخچه توسط چندین کاربر ناشی میشوند.
وضعیت کنونی قابلیت (Current feature status)
این قابلیت هنوز در حال توسعه است.
ناپایداری (Instability)
بازنویسی مجموعهتغییرات ممکن است باعث ایجاد ناپایداری شود.
دو نوع اصلی از ناپایداری وجود دارد: یتیمشدگی (orphaning) و واگرایی (diverging).
یتیمها (orphans) مجموعهتغییراتی هستند که پس از بازنویسی نیاکانشان، جا ماندهاند. واگرایی دو حالت دارد:
- واگرایی محتوا (Content-divergence) زمانی رخ میدهد که بازنویسیهای مستقلِ مجموعهتغییرات یکسان، به نتایج متفاوتی بیانجامند.
- واگرایی فاز (Phase-divergence) زمانی رخ میدهد که نسخهٔ قدیمی (منسوخشدهٔ) یک مجموعهتغییرات، عمومی (public) شود.
میتوان با استفاده از پیکربندی زیر از ایجاد محلیِ مجموعهتغییرات یتیم جلوگیری کرد:
[experimental] evolution.createmarkers = true evolution.exchange = true
همچنین میتوانید آن گزینه را صراحتاً فعال کنید:
[experimental] evolution.createmarkers = true evolution.exchange = true evolution.allowunstable = true
استفاده از قابلیتهای تکمیلی (USING ADDITIONAL FEATURES)
سامانهٔ Mercurial این توانایی را دارد که از طریق استفاده از افزونهها (extensions)، قابلیتهای جدیدی بیفزاید. افزونهها ممکن است دستورهای جدیدی اضافه کنند، گزینههایی به دستورهای موجود بیفزایند، رفتار پیشفرض دستورها را تغییر دهند، یا قلابها (hooks) را پیادهسازی کنند.
برای فعالسازی افزونهٔ «foo»—که یا به همراه Mercurial عرضه شده یا در مسیر جستجوی Python قرار دارد—مدخلی مانند زیر در فایل پیکربندی خود بسازید:
[extensions] foo =
همچنین میتوانید مسیر کامل یک افزونه را مشخص کنید:
[extensions] myfeature = ~/.hgext/myfeature.py
برای اطلاعات بیشتر دربارهٔ فایلهای پیکربندی، hg help config را ببینید.
افزونهها به دلایل مختلفی بهطور پیشفرض بارگذاری نمیشوند: ممکن است بار راهاندازی اولیه را افزایش دهند؛ ممکن است فقط برای استفادههای پیشرفته در نظر گرفته شده باشند؛ ممکن است قابلیتهای بالقوه خطرناکی ارائه دهند (مانند امکان تخریب یا دستکاری تاریخچه)؛ ممکن است برای استفادهٔ عمومی کاملاً آماده نباشند؛ یا ممکن است برخی از رفتارهای معمول و استاندارد Mercurial را تغییر دهند. بنابراین فعالسازی افزونهها بر حسب نیاز بر عهدهٔ کاربر است.
برای غیرفعالسازی صریح افزونهای که در فایل پیکربندی با دامنهٔ گستردهتر فعال شده است، علامت ! را به ابتدای مسیر آن اضافه کنید:
[extensions] # disabling extension bar residing in /path/to/extension/bar.py bar = !/path/to/extension/bar.py # ditto, but no path was supplied for extension baz baz = !
افزونههای غیرفعال:
- acl
- قلابهایی برای کنترل دسترسی به مخزن
- blackbox
- ثبت رویدادهای مخزن در یک جعبه سیاه (blackbox) جهت اشکالزدایی
- bugzilla
- قلابهایی برای یکپارچهسازی با سامانهٔ ردیابی باگ Bugzilla
- censor
- پاککردن محتوای فایل در یک بازنگری (revision) مشخص
- churn
- دستوری برای نمایش آمار و ارقام دربارهٔ تاریخچهٔ مخزن
- clonebundles
- اعلان بستههای ازپیشتولیدشده برای تسریع و پایهریزی کلونها
- closehead
- بستن سرشاخههای (heads) دلخواه بدون نیاز به استخراج (checkout) اولیهٔ آنها
- convert
- وارد کردن بازنگریها از مخازن سایر سامانههای کنترل نسخه (VCS) به Mercurial
- eol
- مدیریت خودکار نویسههای انتهای خط (newline) در فایلهای مخزن
- extdiff
- دستوری برای فراهم ساختن امکان مقایسهٔ بازنگریها توسط برنامههای خارجی
- factotum
- احراز هویت http با factotum
- fastexport
- برونبری مخازن به صورت جریان git fast-import
- githelp
- تلاش برای نگاشت دستورهای git به دستورهای Mercurial
- gpg
- دستورهایی برای امضا و اعتبارسنجی مجموعهتغییرات
- hgk
- مرور مخزن به صورت گرافیکی.TP highlight برجستهسازی نحو برای hgweb (نیازمند Pygments)
- histedit
- ویرایش تعاملی تاریخچه
- keyword
- بسط کلیدواژهها در فایلهای ردیابیشده
- largefiles
- ردیابی فایلهای باینری بزرگ
- mq
- مدیریت پشتهای از وصلهها
- notify
- قلابها برای ارسال اعلانهای ایمیلی push
- patchbomb
- دستور ارسال مجموعهتغییرات بهصورت (مجموعهای از) ایمیلهای وصله
- rebase
- دستور انتقال مجموعهای از بازبینیها به نیاکانی دیگر
- relink
- ایجاد مجدد پیوندهای سخت میان کلونهای مخزن
- schemes
- گسترش طرحوارهها (schemes) با میانبرهایی به تودههای مخزن (repository swarms)
- اشتراکگذاری یک تاریخچهٔ مشترک میان چند دایرکتوری کاری
- transplant
- دستور پیوند زدن مجموعهتغییرات از شاخهای دیگر
- win32mbcs
- امکان استفاده از مسیرهای MBCS با کدگذاریهای مشکلساز
- zeroconf
- کشف و اعلان مخازن در شبکهٔ محلی
مشخص کردن مجموعههای فایل (SPECIFYING FILE SETS)
Mercurial از یک زبان تابعی برای انتخاب مجموعهای از فایلها پشتیبانی میکند.
مانند دیگر الگوهای فایل، این نوع الگو با یک پیشوند، 'set:'، مشخص میشود. این زبان از چندین گزاره (predicate) پشتیبانی میکند که توسط عملگرهای میانوند (infix) به یکدیگر متصل میشوند. از پرانتز میتوان برای گروهبندی استفاده کرد.
شناسهها مانند نام فایلها یا الگوها در صورتی که حاوی نویسههایی خارج از [.*{}[]?/\_a-zA-Z0-9\x80-\xff] باشند یا با یکی از گزارههای از پیش تعریفشده مطابقت داشته باشند، باید درون نقلقول تکی یا دوتایی قرار گیرند. این قاعده معمولاً برای الگوهای فایل غیر از globها و آرگومانهای گزارهها اعمال میشود. پیشوندهای الگو مانند path: را میتوان بدون نقلقول مشخص کرد.
نویسههای خاص را میتوان با گریز دادن (escaping) در شناسههای نقلقولشده استفاده کرد؛ برای نمونه، \n بهعنوان خط جدید تفسیر میشود. برای جلوگیری از تفسیر شدن آنها، میتوان رشتهها را با پیشوند r مشخص کرد، مانند r'...'.
همچنین ببینید: hg help patterns..SS "عملگرها (Operators)"
تنها یک عملگر پیشوندی وجود دارد:
- not x
-
فایلهایی که در x نیستند. شکل کوتاه آن ! x است.
عملگرهای میانوندی پشتیبانیشده عبارتند از:
گزارهها (Predicates)
گزارههای زیر پشتیبانی میشوند:
- added()
-
فایلی که طبق hg status اضافه شده است.
- binary()
-
فایلی که به نظر دودویی میرسد (حاوی بایتهای NUL است).
- clean()
-
فایلی که طبق hg status بدون تغییر (clean) است.
- copied()
-
فایلی که به عنوان کپیشده ثبت شده است.
- deleted()
-
نام مستعار برای missing().
- encoding(name)
-
فایل میتواند با موفقیت با کدگذاری نویسه دادهشده رمزگشایی شود. ممکن است برای کدگذاریهایی غیر از ASCII و UTF-8 کاربرد چندانی نداشته باشد.
- eol(style)
-
فایل شامل پایان خطهای سبک دادهشده (dos، unix، mac) است. فایلهای دودویی مستثنی هستند؛ فایلهایی با پایان خط مختلط با چندین سبک مطابقت دارند.
- exec()
-
فایلی که به عنوان قابل اجرا نشانهگذاری شده است.
- grep(regex)
-
فایلی که حاوی عبارت باقاعده دادهشده است.
- hgignore()
-
فایلی که با الگوی فعال .hgignore مطابقت دارد.
- ignored()
-
فایلی که طبق hg status نادیده گرفته شده است.
- missing()
-
فایلی که طبق hg status مفقود شده است.
- modified()
-
فایلی که طبق hg status تغییر یافته است.
- portable()
-
فایلی که نامی سازگار (portable) دارد. (این شامل نامهای فایلی با تداخل در بزرگی و کوچکی حروف نمیشود.)
- removed()
-
فایلی که طبق hg status حذف شده است.
- resolved()
-
فایلی که طبق hg resolve -l به عنوان حلشده نشانهگذاری شده است.
- revs(revs, pattern)
-
مجموعه را در رونوشتهای مشخصشده ارزیابی میکند. اگر revset با چندین رونوشت مطابقت داشته باشد، فایلهای مطابق با الگو در هر یک از آن رونوشتها برگردانده میشوند.
- size(expression)
-
اندازه فایل با عبارت دادهشده مطابقت دارد. مثالها:
- size('1k') - فایلهای از 1024 تا 2047 بایت
- size('< 20k') - فایلهای کمتر از 20480 بایت
- size('>= .5MB') - فایلهای حداقل 524288 بایت
- size('4k - 1MB') - فایلهای از 4096 بایت تا 1048576 بایت
- status(base, rev, pattern)
-
ارزیابی گزاره با استفاده از تغییر وضعیت بین base و rev. مثالها:
- •
- status(3, 7, added()) - فایلهای اضافه شده از "3" تا "7" را مطابقت میدهد
- subrepo([pattern])
-
زیرمخزنهایی که مسیر آنها با الگوی دادهشده مطابقت دارد.
- symlink()
-
فایلی که به عنوان پیوند نمادین نشانهگذاری شده است.
- tracked()
-
فایلی که تحت کنترل Mercurial است.
- unknown()
-
فایلی که طبق hg status ناشناخته است.
- unresolved()
-
فایلی که طبق hg resolve -l به عنوان حلنشده نشانهگذاری شده است.
چند پرسوجوی نمونه:
- نمایش
وضعیت
فایلهایی
در
دایرکتوری
کاری که به
نظر باینری
میرسند:
hg status -A "set:binary()"
- فراموش
کردن
فایلهایی
که در .hgignore
هستند اما
پیشتر
ردگیری
شدهاند:
hg forget "set:hgignore() and not ignored()"
- یافتن
فایلهای
متنی حاوی
یک رشته:
hg files "set:grep(magic) and not binary()"
- یافتن
فایلهای C
با کدگذاری
غیر
استاندارد:
hg files "set:**.c and not encoding('UTF-8')" - بازگردانی
رونوشتهای
فایلهای
باینری
بزرگ:
hg revert "set:copied() and binary() and size('>1M')" - بازگردانی
فایلهایی
که به
دایرکتوری
کاری اضافه
شدهاند:
hg revert "set:revs('wdir()', added())" - حذف
فایلهای
فهرستشده
در foo.lst که حاوی
حرف a یا b
هستند:
hg remove "set: listfile:foo.lst and (**a* or **b*)"
پرچمهای خط فرمان (COMMAND-LINE FLAGS)
بیشتر دستورهای Mercurial پرچمهای گوناگونی را میپذیرند.
نام پرچمها (Flag names)
پرچمهای مربوط به هر دستور در hg help برای آن دستور فهرست شدهاند. علاوه بر این، برخی از پرچمها مانند --repository سراسری هستند و میتوانند با هر دستوری به کار روند - این پرچمها در hg help -v دیده میشوند، و میتوان آنها را پیش یا پس از دستور مشخص کرد.
هر پرچم دستکم یک نام بلند دارد، مانند --repository. برخی پرچمها ممکن است یک نام کوتاه یکحرفی نیز داشته باشند، مانند معادل آن -R. استفاده از نام کوتاه یا بلند یکسان بوده و اثر یکسانی دارد. نام بلند را میتوان به هر پیشوند یکتایی خلاصهنویسی کرد. برای مثال، hg commit --amend را میتوان به hg commit --am خلاصه کرد.
پرچمهایی که نام کوتاه دارند را میتوان در یکدیگر ادغام نیز کرد - برای نمونه، برای مشخص کردن هر دو پرچم --edit (کوتاه -e) و --interactive (کوتاه -i)، میتوان چنین نوشت:
hg commit -ei
اگر هر یک از پرچمهای ادغامشده مقداری بپذیرد (یعنی بولی نباشد)، باید آخرین پرچم باشد و مقدار در ادامهٔ آن بیاید:
hg commit -im 'Message' پرچمهای خط فرمان Mercurial میتوانند رشته، عدد، بولی یا فهرستی از رشتهها باشند.
تعیین مقادیر پرچم
با فرض وجود پرچم 'flagname' با نام کوتاه 'f'، نحوهای دستوری زیر مجاز هستند:
--flagname=foo --flagname foo -f foo -ffoo
این نحو برای تمامی پرچمهای غیربولی (رشتهها، اعداد یا فهرستها) اعمال میشود.
تعیین پرچمهای بولی
پرچمهای بولی پارامتر مقدار نمیپذیرند. برای مشخص کردن یک پرچم بولی، از نام پرچم برای تنظیم آن روی true، یا از همان نام همراه با پیشوند 'no-' برای تنظیم آن روی false استفاده کنید:
hg commit --interactive hg commit --no-interactive
تعیین پرچمهای فهرستی
پرچمهای فهرستی چندین مقدار میپذیرند. برای تعیین آنها، پرچم را چندین بار وارد کنید:
hg files --include mercurial --include tests
تنظیم مقادیر پیشفرض پرچم
بهمنظور تنظیم یک مقدار پیشفرض برای یک پرچم در فایل hgrc، توصیه میشود از نامهای مستعار (alias) استفاده کنید:
[alias] commit = commit --interactive
برای اطلاعات بیشتر دربارهٔ فایلهای hgrc، بخش hg help config را ببینید.
بازنویسی پرچمها در خط فرمان
اگر یک پرچم غیرفهرستی یکسان چندین بار در خط فرمان مشخص شود، آخرین مقدار مشخصشده استفاده میشود:
hg commit -m "Ignored value" -m "Used value"
این مورد شامل استفاده از نامهای مستعار نیز میشود - برای مثال، اگر داشته باشیم:
[alias] committemp = commit -m "Ignored value"
آنگاه دستور زیر آن -m را بازنویسی خواهد کرد:
hg committemp -m "Used value" هر پرچم دارای یک مقدار پیشفرض است، و همچنین میتوانید همانطور که در بالا توضیح داده شد، مقادیر پیشفرض خود را در hgrc تنظیم کنید. بهجز پرچمهای فهرستی (list flags)، مقادیر پیشفرض را میتوان در خط فرمان بهسادگی با مشخص کردن پرچم در همان محل بازنویسی کرد.
پرچمهای پنهان
برخی از پرچمها بهطور پیشفرض در راهنمای دستور نمایش داده نمیشوند - بهویژه پرچمهایی که آزمایشی، منسوخشده یا پیشرفته در نظر گرفته شدهاند. برای نمایش همهٔ پرچمها، پرچم --verbose را به دستور help اضافه کنید:
hg help --verbose commit
واژهنامه (GLOSSARY)
- نیا (Ancestor)
- هر مجموعهتغییری (changeset) که بتوان از طریق یک زنجیرهٔ ناگسسته از مجموعهتغییرهای والد از یک مجموعهتغییر مشخص به آن رسید. بهطور دقیقتر، نیاهای یک مجموعهتغییر را میتوان با دو ویژگی تعریف کرد: والدِ یک مجموعهتغییر یک نیا است، و والدِ یک نیا نیز یک نیا محسوب میشود. همچنین ببینید: 'نواده (Descendant)'.
- نشانک (Bookmark)
- نشانکها
اشارهگرهایی
به
کامیتهای
مشخصی
هستند که
هنگام ثبت
کامیت
جابهجا
میشوند.
آنها از
این جهت
شبیه به
برچسبها (tags)
هستند که
میتوان از
نام نشانک
در تمام
مکانهایی
که Mercurial
انتظار یک
شناسهٔ
مجموعهتغییر
دارد
استفاده
کرد؛ برای
مثال با hg update.
برخلاف
برچسبها،
هنگام
کامیت
کردن،
نشانکها
همراه با آن
به جلو حرکت
میکنند.
نشانکها را میتوان تغییر نام داد، کپی کرد و حذف نمود. نشانکها محلی هستند، مگر اینکه صراحتاً بین مخازن push یا pull شوند. ارسال (push) و دریافت (pull) نشانکها به شما این امکان را میدهد که بدون ایجاد یک شاخهٔ نامدار، با دیگران روی یک شاخه همکاری کنید.
- شاخه (Branch)
- (اسم)
مجموعهتغییر
فرزندی که
از والدی
ایجاد شده
است که سر (head)
نیست. این
موارد با
عنوان
شاخههای
مکانشناختی
(توپولوژیک)
شناخته
میشوند؛
ببینید:
'شاخه
مکانشناختی
(Branch, topological)'. اگر یک
شاخهٔ
توپولوژیک
نامگذاری
شود، به یک
شاخهٔ
نامدار
تبدیل
میشود. اگر
یک شاخهٔ
توپولوژیک
نامگذاری
نشود، به یک
شاخهٔ
ناشناس
تبدیل
خواهد شد.
ببینید:
'شاخه
ناشناس (Branch, anonymous)'
و 'شاخه
نامدار (Branch, named)'.
شاخهها ممکن است هنگام دریافت (pull) یا ارسال (push) تغییرات به یک مخزن دوردست ایجاد شوند، چرا که این عملیات ممکن است سرهای (heads) جدیدی ایجاد کند. توجه داشته باشید که اصطلاح شاخه (branch) همچنین میتواند بهطور غیررسمی برای توصیف فرآیند توسعهای به کار رود که در آن بخش معینی از توسعه مستقل از سایر بخشها انجام میشود. این کار گاهی بهصراحت با یک شاخهٔ نامدار انجام میشود، اما میتواند بهصورت محلی با استفاده از نشانکها یا کلونها (clones) و شاخههای ناشناس نیز انجام گیرد.
مثال: "شاخهٔ آزمایشی."
(فعل) عملِ ایجاد یک مجموعهتغییر فرزند که منجر به داشتن بیش از یک فرزند برای والد آن میشود.
مثال: "من قصد دارم در X شاخه ایجاد کنم."
- شاخه ناشناس (Branch, anonymous)
- هر بار که یک مجموعهتغییر فرزند جدید از والدی ساخته شود که سر (head) نیست و نام شاخه تغییر نکند، یک شاخهٔ ناشناس جدید ایجاد میشود.
- شاخه بستهشده (Branch, closed)
- یک شاخهٔ نامدار که تمام سرهای شاخهٔ آن بسته شدهاند.
- شاخه پیشفرض (Branch, default)
- شاخهای که به یک مجموعهتغییر اختصاص مییابد، در صورتی که قبلاً هیچ نامی برای آن تعیین نشده باشد.
- سر شاخه (Branch head)
- ببینید: 'سر، شاخه (Head, branch)'.
- شاخه غیرفعال (Branch, inactive)
- اگر یک
شاخهٔ
نامدار
هیچ سرِ
مکانشناختی
(topological head) نداشته
باشد،
غیرفعال در
نظر گرفته
میشود.
بهعنوان
مثال، یک
شاخهٔ
ویژگی (feature branch)
هنگامی که
در شاخهٔ default
ادغام
میشود،
غیرفعال
میگردد.
دستور hg branches
شاخههای
غیرفعال را
بهطور
پیشفرض
نمایش
میدهد،
هرچند
میتوان
آنها را با
hg branches --active پنهان
کرد.
نکته: این مفهوم منسوخ شده است زیرا بیش از حد ضمنی است. اکنون شاخهها را باید زمانی که دیگر نیازی به آنها نیست، صراحتاً با استفاده از hg commit --close-branch بست.
- شاخه نامدار (Branch, named)
- مجموعهای
از
مجموعهتغییرها
که نام
شاخهٔ
یکسانی
دارند.
بهطور
پیشفرض،
فرزندان یک
مجموعهتغییر
در یک شاخهٔ
نامدار،
به همان
شاخهٔ
نامدار
تعلق دارند.
یک فرزند را
میتوان
بهصراحت
به شاخهٔ
متفاوتی
اختصاص داد.
برای
اطلاعات
بیشتر در
زمینهٔ
مدیریت
شاخهها،
به hg help branch، hg help branches
و hg commit --close-branch
مراجعه
کنید.
شاخههای نامدار را میتوان نوعی فضای نام (namespace) در نظر گرفت که مجموعهٔ مجموعهتغییرهای تشکیلدهندهٔ مخزن را به مجموعهای از زیرمجموعههای مجزا تقسیم میکنند. یک شاخهٔ نامدار لزوماً یک شاخهٔ مکانشناختی نیست. اگر شاخهٔ نامدار جدیدی از سرِ یک شاخهٔ نامدار دیگر یا شاخهٔ پیشفرض ساخته شود، اما هیچ مجموعهتغییر دیگری به آن شاخهٔ قبلی اضافه نگردد، آن شاخهٔ قبلی صرفاً اسماً یک شاخه خواهد بود.
- نوک شاخه (Branch tip)
- ببینید: 'نوک، شاخه (Tip, branch)'.
- شاخه مکانشناختی (Branch, topological)
- هر بار که یک مجموعهتغییر فرزند جدید از والدی ساخته شود که سر (head) نیست، یک شاخهٔ مکانشناختی (توپولوژیک) جدید ایجاد میشود. اگر یک شاخهٔ توپولوژیک نامگذاری شود، به یک شاخهٔ نامدار تبدیل میگردد. اگر یک شاخهٔ توپولوژیک نامگذاری نشود، به یک شاخهٔ ناشناس از شاخهٔ جاری (احتمالاً پیشفرض) تبدیل میشود.
- گزارش تغییرات (Changelog)
- پیشینهای از مجموعهتغییرها به ترتیبی که به مخزن اضافه شدهاند. این پیشینه شامل جزئیاتی مانند شناسهٔ مجموعهتغییر (changeset id)، نویسنده، پیام کامیت، تاریخ و فهرست فایلهای تغییریافته است.
- مجموعهتغییر (Changeset)
- یک تصویر لحظهای (snapshot) از وضعیت مخزن که برای ثبت یک تغییر به کار میرود.
- مجموعهتغییر فرزند (Changeset, child)
- عکس مجموعهتغییر والد: اگر P والد C باشد، آنگاه C فرزند P است. هیچ محدودیتی برای تعداد فرزندانی که یک مجموعهتغییر میتواند داشته باشد وجود ندارد.
- شناسه مجموعهتغییر (Changeset id)
- یک هش SHA-1 که یک مجموعهتغییر را بهطور یکتا مشخص میکند. این شناسه میتواند بهصورت یک رشتهٔ "طولانی" ۴۰ رقمی در مبنای شانزده (هگزادسیمال)، یا یک رشتهٔ "کوتاه" ۱۲ رقمی هگزادسیمال نمایش داده شود.
- مجموعهتغییر ادغام (Changeset, merge)
- مجموعهتغییری با دو والد. این وضعیت زمانی رخ میدهد که یک ادغام کامیت شود.
- مجموعهتغییر والد (Changeset, parent)
- بازبینیای (revision) که مجموعهتغییر فرزند بر پایهٔ آن است. بهطور دقیقتر، مجموعهتغییر والدِ یک مجموعهتغییر C، مجموعهتغییری است که گرهٔ آن در DAG بلافاصله پیش از C قرار میگیرد. مجموعهتغییرها حداکثر دو والد دارند.
- واکشی (Checkout)
- (اسم)
دایرکتوری
کاری در حال
بهروزرسانی
به یک
بازبینی
مشخص. در
صورت امکان
بهتر است از
این کاربرد
خودداری
شود، زیرا
در این
زمینه
اصطلاح
مجموعهتغییر
(changeset) بسیار
مناسبتر
از checkout است.
مثال: "من از checkout نسخهٔ X استفاده میکنم."
(فعل) بهروزرسانی دایرکتوری کاری به یک مجموعهتغییر مشخص. ببینید: hg help update.
مثال: "من قصد دارم مجموعهتغییر X را check out کنم."
- مجموعهتغییر فرزند (Child changeset)
- ببینید: 'مجموعهتغییر فرزند (Changeset, child)'.
- مجموعهتغییر بستن (Close changeset)
- ببینید: 'سر، شاخه بستهشده (Head, closed branch)'.
- شاخه بستهشده (Closed branch)
- ببینید:
'شاخه
بستهشده (Branch,
closed)'..TP Clone (اسم)
رونوشتی
کامل یا
جزئی از یک
مخزن. کلون
جزئی باید
به شکل یک
بازنگری (revision)
و نیاکان آن
باشد.
مثال: «آیا کلون شما بهروز است؟»
(فعل) فرایند ایجاد یک کلون، با استفاده از hg clone.
مثال: «من قصد دارم مخزن را کلون کنم.»
- Closed branch head
- ببینید: 'Head, closed branch'.
- Commit
- (اسم)
مترادفی
برای changeset.
مثال: «آیا این باگ در کامیت اخیر شما برطرف شده است؟»
(فعل) عمل ثبت تغییرات در یک مخزن. هنگامی که فایلها در یک دایرکتوری کاری کامیت میشوند، Mercurial تفاوتهای میان فایلهای کامیتشده و changeset والد آنها را مییابد و یک changeset جدید در مخزن ایجاد میکند.
مثال: «شما باید اکنون آن تغییرات را کامیت کنید.»
- Cset
- مخففی رایج برای اصطلاح changeset.
- DAG
- مخزن changesetهای یک سامانهٔ کنترل نسخهٔ توزیعشده (DVCS) را میتوان به عنوان یک گراف جهتدار بدون دور (DAG) توصیف کرد که متشکل از گرهها و یالها است، بهطوریکه گرهها متناظر با changesetها هستند و یالها بیانگر رابطهٔ والد -> فرزند (parent -> child) میباشند. این گراف را میتوان با ابزارهای گرافیکی نظیر hg log --graph به تصویر کشید. در Mercurial، ساختار DAG به این الزام محدود شده است که فرزندان حداکثر دو والد داشته باشند.
- Deprecated
- قابلیتی که از مستندات برداشته شده، اما برنامهای برای حذف نهایی آن تعیین نشده است (منسوخشده).
- Default branch
- ببینید: 'Branch, default'.
- Descendant
- هر changeset که بتوان از طریق زنجیرهای از changesetهای فرزند از یک changeset مشخص به آن رسید. بهطور دقیقتر، نوادگان یک changeset را میتوان با دو ویژگی تعریف کرد: فرزند یک changeset یک نواده است، و فرزند یک نواده نیز یک نواده است. همچنین ببینید: 'Ancestor'.
- Diff
- (اسم) تفاوت
میان محتوا
و
مشخصههای
فایلها در
دو changeset، یا یک
changeset و
دایرکتوری
کاری فعلی.
این تفاوت
معمولاً در
قالب
استانداردی
به نام “diff”
یا “patch”
نمایش داده
میشود.
قالب “git diff”
زمانی به
کار میرود
که تغییرات
شامل
رونوشتها،
تغییر
نامها، یا
تغییر در
مشخصههای
فایل باشد؛
مواردی که
هیچکدام
توسط “diff” و
“patch” کلاسیک
قابل
نمایش/مدیریت
نیستند.
مثال: «آیا اصلاحیهٔ مرا در diff دیدید؟»
(فعل) مقایسه (diffing) دو changeset، عملِ ایجاد یک diff یا patch است.
مثال: «اگر با changeset شمارهٔ X مقایسه (diff) کنید، متوجه منظورم خواهید شد.»
- Directory, working
- دایرکتوری کاری بیانگر وضعیت فایلهای ردگیریشده توسط Mercurial است که در کامیت بعدی ثبت خواهند شد. دایرکتوری کاری در ابتدا متناظر با تصویر لحظهای (snapshot) در یک changeset موجود است که به عنوان والدِ دایرکتوری کاری شناخته میشود. ببینید: 'Parent, working directory'. این وضعیت ممکن است با تغییرات دستی اعمالشده در فایلها یا از طریق یک ادغام (merge) تغییر کند. متادادههای مخزن در دایرکتوری .hg درون دایرکتوری کاری قرار دارند.
- Draft
- مجموعهتغییرات (changesetها) در فاز draft با مخازن عمومی (publishing) به اشتراک گذاشته نشدهاند و از این رو میتوان آنها را با خیالی آسوده توسط افزونههای اصلاحکنندهٔ تاریخچه (history-modifying) تغییر داد. ببینید: hg help phases.
- Experimental
- قابلیتی که ممکن است در آینده تغییر کند یا حذف شود (آزمایشی).
- Graph
- ببینید: DAG و hg log --graph.
- Head
- اصطلاح 'head'
بسته به
زمینهٔ
کاربرد
ممکن است
برای اشاره
به سرشاخهٔ
یک شاخه (branch head)
یا سرشاخهٔ
مخزن (repository head) به
کار رود.
برای
تعاریف
مشخص،
ببینید: 'Head, branch' و
'Head, repository'.
سرشاخهها جایی هستند که توسعه معمولاً در آنجا انجام میگیرد و اهداف متداول برای عملیات بهروزرسانی (update) و ادغام (merge) به شمار میروند.
- Head, branch
- یک changeset بدون هیچ نوادهای در همان شاخهٔ نامدار.
- Head, closed branch
- یک changeset که یک
سرشاخه را
به عنوان
موردی که
دیگر
اهمیتی
ندارد
نشانهگذاری
میکند.
سرشاخهٔ
بسته دیگر
توسط hg heads
فهرست
نمیشود. یک
شاخه زمانی
بسته تلقی
میشود که
تمام
سرشاخههای
آن بسته شده
باشند و در
نتیجه در
خروجی hg branches
نمایش داده
نمیشود.
سرشاخههای بسته را میتوان با کامیت کردن یک changeset جدید به عنوان فرزندِ changeset نشانهگذاریکنندهٔ سرشاخهٔ بسته، دوباره بازگشایی کرد.
- Head, repository
- یک سرشاخهٔ توپولوژیک که بسته نشده است.
- Head, topological
- یک changeset که هیچ فرزندی در مخزن ندارد.
- History, immutable
- پس از کامیت شدن، changesetها غیرقابل تغییر هستند. افزونههایی که به نظر میرسد تاریخچه را تغییر میدهند در عمل changesetهای جدیدی ایجاد میکنند که جایگزین موارد موجود میشوند و سپس changesetهای قدیمی را نابود میکنند. انجام این کار در مخازن عمومی (public) میتواند منجر به معرفی و ورود مجدد changesetهای قدیمی به مخزن شود.
- History, rewriting
- مجموعهتغییرات (changesetها) در یک مخزن تغییرناپذیر هستند. با این حال، میتوان از افزونههای Mercurial برای دستکاری مخزن استفاده کرد، معمولاً به گونهای که محتوای changeset حفظ شود.
- Immutable history
- ببینید: 'History, immutable'.
- Merge changeset
- ببینید: 'Changeset, merge'.
- Manifest
- هر changeset دارای یک مانیفست (manifest) است؛ فهرستی از فایلهایی که توسط آن changeset ردگیری میشوند.
- Merge
- برای یکپارچهسازی شاخههای کاری واگرا به کار میرود. هنگامی که به یک changeset بهروزرسانی (update) میکنید و سپس changeset دیگری را ادغام مینمایید، تاریخچهٔ changeset دوم را به دایرکتوری کاری خود وارد میکنید. پس از حل اختلافات (و علامتگذاری آنها)، این ادغام میتواند به عنوان یک changeset ادغام (merge changeset) کامیت شود و بدین ترتیب دو شاخه را در ساختار DAG به هم پیوند دهد.
- Named branch
- ببینید: 'Branch, named'.
- Null changeset
- مجموعهتغییرات (changeset) تهی. این حالتْ والدِ مخازن تازه راهاندازیشده و مخازنی است که هیچ بازنگریای در آنها دریافت (check out) نشده است. از این رو والد changesetهای ریشه و نیاکان مؤثر هنگام ادغام changesetهای نامرتبط به شمار میرود. میتواند با نام مستعار 'null' یا با شناسهٔ changeset یعنی '000000000000' مشخص شود.
- Parent
- ببینید: 'Changeset, parent'..TP مجموعهتغییر والد (Parent changeset) «مجموعهتغییر، والد» ('Changeset, parent') را ببینید.
- والد، دایرکتوری کاری (Parent, working directory)
- والد دایرکتوری کاری، بازتابدهندهٔ یک بازبینی مجازی است که فرزندِ مجموعهتغییر (یا دو مجموعهتغییر در صورت وجود یک ادغام ثبتنشده) نمایشدادهشده توسط hg parents است. این مقدار با hg update تغییر میکند. دستورهای دیگر برای مشاهدهٔ والد دایرکتوری کاری عبارتند از hg summary و hg id. همچنین میتواند با نام مستعار «.» مشخص شود.
- وصله (Patch)
- (اسم) حاصل
یک عملیات diff.
مثال: "I've sent you my patch." (وصلهام را برایتان فرستادم.)
(فعل) فرایند استفاده از یک فایل وصله برای تبدیل یک مجموعهتغییر به مجموعهتغییری دیگر.
مثال: "You will need to patch that revision." (باید آن بازبینی را وصله کنید.)
- فاز (Phase)
- وضعیتی بهازای هر مجموعهتغییر که نحوهٔ همرسانی شدن پیشین مجموعهتغییر یا چگونگی اشتراکگذاری مورد انتظار آن را دنبال میکند. hg help phases را ببینید.
- عمومی (Public)
- مجموعهتغییرات در فاز عمومی (public) با مخازن انتشار همرسانی شدهاند و بنابراین تغییرناپذیر در نظر گرفته میشوند. hg help phases را ببینید.
- دریافت (Pull)
- عملیاتی که در آن مجموعهتغییرات موجود در یک مخزن دوردست که در مخزن محلی وجود ندارند، به مخزن محلی آورده میشوند. توجه داشته باشید که این عملیات بدون آرگومانهای ویژه فقط مخزن را بهروز میکند و فایلهای موجود در دایرکتوری کاری را بهروزرسانی نمیکند. hg help pull را ببینید.
- ارسال (Push)
- عملیاتی که در آن مجموعهتغییرات موجود در یک مخزن محلی که در مخزن دوردست وجود ندارند، به مخزن دوردست ارسال میشوند. توجه داشته باشید که این عملیات فقط مجموعهتغییراتی را به مخزن دوردست اضافه میکند که بهصورت محلی ثبت (commit) شده باشند. تغییرات ثبتنشده ارسال نمیشوند. hg help push را ببینید.
- مخزن (Repository)
- متادادهای که تمام وضعیتهای ثبتشده از مجموعهای از فایلها را توصیف میکند. هر وضعیت ثبتشده توسط یک مجموعهتغییر نشان داده میشود. یک مخزن معمولاً (اما نه همیشه) در زیردایرکتوری .hg از یک دایرکتوری کاری یافت میشود. هر وضعیت ثبتشده را میتوان با «بهروزرسانی» یک دایرکتوری کاری به یک مجموعهتغییر خاص، دوباره ایجاد کرد.
- رأس مخزن (Repository head)
- «رأس، مخزن» ('Head, repository') را ببینید.
- بازبینی (Revision)
- وضعیتی از مخزن در یک نقطه از زمان. با استفاده از hg update میتوان به بازبینیهای پیشین بهروزرسانی کرد. همچنین «شماره بازبینی» ('Revision number') و «مجموعهتغییر» ('Changeset') را ببینید.
- شماره بازبینی (Revision number)
- این عدد صحیح بهطور یکتا یک مجموعهتغییر را در یک مخزن خاص مشخص میکند. این عدد نشاندهندهٔ ترتیبی است که مجموعهتغییرات به مخزن اضافه شدهاند و از شماره بازبینی 0 شروع میشود. توجه داشته باشید که شماره بازبینی ممکن است در هر نسخهٔ کلونشده از یک مخزن متفاوت باشد. برای شناسایی یکتای مجموعهتغییرات میان کلونهای مختلف، «شناسه مجموعهتغییر» ('Changeset id') را ببینید.
- Revlog
- سازوکار ذخیرهسازی تاریخچه که توسط Mercurial استفاده میشود. این سازوکار شکلی از کدگذاری دلتا (delta encoding) است، با بازبینیهای کامل دورهای از دادهها که با دلتای هر بازبینی متوالی دنبال میشود. این سازوکار شامل دادهها و یک نمایه است که به دادهها اشاره میکند.
- بازنویسی تاریخچه (Rewriting history)
- «تاریخچه، بازنویسی» ('History, rewriting') را ببینید.
- ریشه (Root)
- مجموعهتغییری که تنها مجموعهتغییر تهی (null changeset) را بهعنوان والد خود دارد. بیشتر مخازن تنها یک مجموعهتغییر ریشه دارند.
- محرمانه (Secret)
- مجموعهتغییرات در فاز محرمانه (secret) ممکن است از طریق push، pull یا clone همرسانی نشوند. hg help phases را ببینید.
- برچسب (Tag)
- نامی جایگزین که به یک مجموعهتغییر اختصاص داده میشود. برچسبها را میتوان در تمام جاهایی که Mercurial انتظار یک شناسهٔ مجموعهتغییر را دارد، مثلاً همراه با hg update به کار برد. ایجاد یک برچسب در تاریخچه ذخیره میشود و بنابراین با استفاده از push و pull بهطور خودکار با دیگران به اشتراک گذاشته خواهد شد.
- نوک (Tip)
- مجموعهتغییری با بالاترین شماره بازبینی. این مجموعهتغییر، جدیدترین مورد اضافهشده به یک مخزن است.
- نوک، شاخه (Tip, branch)
- رأس یک شاخهٔ مشخص با بالاترین شماره بازبینی. هنگامی که نام یک شاخه بهعنوان شناسهٔ بازبینی استفاده میشود، به نوک شاخه اشاره دارد. همچنین «شاخه، رأس» ('Branch, head') را ببینید. توجه داشته باشید از آنجا که شمارههای بازبینی ممکن است در کلونهای مختلف مخزن متفاوت باشند، نوک شاخه نیز ممکن است در مخازن شبیهسازیشدهٔ مختلف متفاوت باشد.
- بهروزرسانی (Update)
- (اسم)
مترادف
دیگری برای
مجموعهتغییر.
مثال: "I've pushed an update." (من یک بهروزرسانی را push کردم.)
(فعل) این اصطلاح معمولاً برای توصیف بهروزرسانی وضعیت دایرکتوری کاری به وضعیت یک مجموعهتغییر خاص استفاده میشود. hg help update را ببینید.
مثال: "You should update." (باید بهروزرسانی کنید.)
- دایرکتوری کاری (Working directory)
- «دایرکتوری، کاری» ('Directory, working') را ببینید.
- والد دایرکتوری کاری (Working directory parent)
- «والد، دایرکتوری کاری» ('Parent, working directory') را ببینید.
خلاصه (Synopsis)
سیستم Mercurial از فایلی به نام .hgignore در دایرکتوری ریشهٔ مخزن استفاده میکند تا رفتار خود را هنگام جستجوی فایلهایی که در حال حاضر ردگیری نمیشوند، کنترل کند.
توضیحات (Description)
دایرکتوری کاری یک مخزن Mercurial اغلب شامل فایلهایی است که نباید توسط Mercurial ردگیری شوند. این موارد شامل فایلهای پشتیبان ایجادشده توسط ویرایشگرها و خروجیهای ساخت ایجادشده توسط کامپایلرها هستند. میتوان با فهرست کردن این فایلها در یک فایل .hgignore در ریشهٔ دایرکتوری کاری، آنها را نادیده گرفت. فایل .hgignore باید بهصورت دستی ایجاد شود. این فایل معمولاً تحت کنترل نسخه قرار میگیرد تا این تنظیمات با push و pull به مخازن دیگر نیز منتقل شوند.
یک فایل ردگیرینشده در صورتی نادیده گرفته میشود که مسیر آن نسبت به دایرکتوری ریشهٔ مخزن، یا هر پیشوندی از آن مسیر، با هر الگویی در .hgignore مطابقت داشته باشد.
برای مثال، فرض کنید یک فایل ردگیرینشده به نام file.c در مسیر a/b/file.c درون مخزن خود داریم. Mercurial فایل file.c را نادیده میگیرد اگر هر الگویی در .hgignore با a/b/file.c، a/b یا a مطابقت داشته باشد.
علاوه بر این، یک فایل پیکربندی Mercurial میتواند به مجموعهای از فایلهای نادیدهگیری مختص کاربر یا سراسری ارجاع دهد. برای جزئیات نحوهٔ پیکربندی این فایلها، کلید پیکربندی ignore را در بخش [ui] در hg help config مشاهده کنید.
برای کنترل نحوهٔ مدیریت فایلهایی که Mercurial اداره میکند، بسیاری از دستورها از گزینههای -I و -X پشتیبانی میکنند؛ برای جزئیات به hg help <command> و hg help patterns مراجعه کنید.
فایلهایی که از قبل ردگیری میشوند، حتی در صورت حضور در .hgignore، تحت تأثیر آن قرار نمیگیرند. یک فایل ردگیرینشده مانند X را میتوان صریحاً با دستور hg add X اضافه کرد، حتی اگر X توسط یک الگو در .hgignore مستثنی شده باشد.
نحو (Syntax)
یک فایل نادیدهگیری، یک فایل متنی ساده متشکل از فهرستی از الگوها است که در هر سطر یک الگو قرار میگیرد. خطوط خالی نادیده گرفته میشوند. نویسهٔ # به عنوان نویسهٔ توضیح و نویسهٔ \ به عنوان نویسهٔ گریز (escape) در نظر گرفته میشود.
سیستم Mercurial از چندین نحو برای الگوها پشتیبانی میکند. نحو پیشفرض مورداستفاده، عبارتهای منظم به سبک Python/Perl است.
برای تغییر نحو مورداستفاده، از سطری با قالب زیر استفاده کنید:
syntax: NAME
که در آن NAME یکی از موارد زیر است:
نحو انتخابشده هنگام پردازش تمام الگوهای بعدی معتبر باقی میماند، تا زمانی که نحو دیگری تعیین شود.
الگوهای glob و regexp هیچکدام ریشهدار نیستند. یک الگوی دارای نحو glob به شکل *.c با فایلی که به .c ختم میشود در هر دایرکتوری مطابقت خواهد داشت، و یک الگوی regexp به شکل \.c$ نیز همین کار را انجام میدهد. برای ریشهدار کردن یک الگوی regexp، آن را با ^ شروع کنید. برای دستیابی به همین نتیجه با نحو glob، باید از rootglob استفاده کنید.
زیردایرکتوریها میتوانند با افزودن subinclude:path/to/subdir/.hgignore به .hgignore ریشه، تنظیمات .hgignore مختص به خود را داشته باشند. برای جزئیات بیشتر دربارهٔ subinclude: و include:، به hg help patterns مراجعه کنید.
- نکته (Note)
- الگوهایی
که در جایی
غیر از .hgignore
مشخص
شدهاند،
همیشه
ریشهدار
هستند.
لطفاً برای
جزئیات به hg
help patterns مراجعه
کنید.
در اینجا نمونهای از یک فایل چشمپوشی (ignore) آمده است.
# use glob syntax. syntax: glob *.elc *.pyc *~ # switch to regexp syntax. syntax: regexp ^\.pc/
اشکالزدایی (Debugging)
برای بررسی اینکه آیا و چرا یک فایل نادیده گرفته شده است، یا برای مشاهدهٔ الگوی ترکیبی چشمپوشی، از دستور debugignore استفاده کنید. برای جزئیات به hg help debugignore مراجعه کنید.
پیکربندی HGWEB (CONFIGURING HGWEB)
وبسرور داخلی Mercurial، با نام hgweb، میتواند برای ارائهٔ یک مخزن واحد یا درختی از مخازن به کار رود. در حالت دوم، مسیرهای مخازن و گزینههای سراسری را میتوان با استفاده از یک فایل پیکربندی اختصاصی و مشترک بین hg serve، hgweb.wsgi، hgweb.cgi و hgweb.fcgi تعریف کرد.
این فایل از همان نحو سایر فایلهای پیکربندی Mercurial استفاده میکند، اما تنها بخشهای زیر را به رسمیت میشناسد:
- web
- paths
- collections
گزینههای web بهطور کامل در hg help config شرح داده شدهاند.
بخش paths مسیرهای URL را به مسیرهای مخازن در فایلسیستم نگاشت میکند. hgweb فایلسیستم را مستقیماً در دسترس عموم قرار نمیدهد - تنها مخازن Mercurial قابل انتشار هستند و آن هم صرفاً مطابق با پیکربندی.
سمت چپ، مسیر درون URL است. توجه داشته باشید که hgweb زیرمسیرهایی مانند rev یا file را برای خود رزرو کرده است؛ سعی کنید برای مخازن تودرتو از نامهای دیگری استفاده کنید تا از بروز رفتارهای ناخواسته و گیجکننده جلوگیری شود.
سمت راست، مسیر در فایلسیستم است. اگر مسیر مشخصشده به * یا ** ختم شود، فایلسیستم بهصورت بازگشتی برای یافتن مخازن در زیر آن نقطه جستجو خواهد شد. با نماد *، جستجو به داخل مخازنی که پیدا میکند وارد نخواهد شد (بهجز .hg/patches). با نماد **، درون دایرکتوریهای کاری مخازن نیز جستجو صورت میگیرد و زیرمخازن (subrepositories) احتمالی نیز یافته خواهند شد.
در این مثال:
[paths] /projects/a = /srv/tmprepos/a /projects/b = c:/repos/b / = /srv/repos/* /user/bob = /home/bob/repos/**
- دو مدخل نخست باعث میشوند دو مخزن واقع در دایرکتوریهای مختلف، در رابط کاربری وب زیر یک دایرکتوری یکسان نمایش داده شوند
- مدخل سوم هر مخزن Mercurial موجود در /srv/repos/ را منتشر خواهد کرد؛ برای نمونه، مخزن /srv/repos/quux/ بهصورت http://server/quux/ ظاهر خواهد شد
- مدخل چهارم هر دو نشانی http://server/user/bob/quux/ و http://server/user/bob/quux/testsubrepo/ را منتشر خواهد کرد
بخش collections منسوخ شده و paths جایگزین آن شده است..SS نشانیهای URL و آرگومانهای متداول
نشانیهای URL تحت هر مخزن قالبی به صورت /{command}[/{arguments}] دارند که در آن {command} بیانگر نام دستور یا گرداننده (handler) و {arguments} بیانگر هر تعداد پارامتر اضافی URL برای آن دستور است.
کارساز وب یک شیوهٔ (style) پیشفرض متناظر با خود دارد. شیوهها به مجموعهای از الگوهای نامگذاریشده نگاشت میشوند. هر الگو برای رندر کردن بخش خاصی از دادهها، مانند یک مجموعهتغییر (changeset) یا diff به کار میرود.
شیوهٔ درخواست جاری را میتوان به دو روش بازنویسی (override) کرد. نخست، اگر {command} شامل خط پیوند (-) باشد، متن پیش از خط پیوند شیوه را تعیین میکند. برای نمونه، /atom-log گردانندهٔ دستور log را با شیوهٔ atom رندر خواهد کرد. روش دوم برای تعیین شیوه، استفاده از آرگومان رشتهٔ پرسوجوی style است؛ مانند /log?style=atom. استفاده از پارامتر URL دارای خط پیوند ارجح است.
همه الگوها برای همه شیوهها در دسترس نیستند. تلاش برای استفاده از شیوهای که همهٔ الگوهای آن تعریف نشدهاند ممکن است به بروز خطا در رندر کردن صفحه منجر شود.
بسیاری از دستورها یک پارامتر URL به نام {revision} میگیرند. این پارامتر مجموعهتغییری را مشخص میکند که عملیات روی آن انجام میشود. این مقدار معمولاً به صورت اختصار کوتاه و ۱۲ رقمی هگزادسیمال برای شناسهٔ یکتای بازبینی ۴۰ نویسهای کامل مشخص میشود. با این حال، هر مقداری که در hg help revisions شرح داده شده است معمولاً کار میکند.
دستورها و نشانیهای URL
دستورهای وب زیر و نشانیهای URL آنها در دسترس هستند:
/annotate/{revision}/{path}
اطلاعات مجموعهتغییر را برای هر خط از یک فایل نمایش میدهد.
آرگومانهای رشتهٔ پرسوجوی ignorews، ignorewsamount، ignorewseol و ignoreblanklines معنایی مشابه با معادلهایشان در پیکربندی [annotate] دارند. این آرگومانها از منطق ارزیابی بولی hgrc برای تفسیر مقدار استفاده میکنند؛ برای نمونه 0 و false نادرست و 1 و true درست هستند. اگر تعریف نشوند، از تنظیمات پیشفرض کارساز استفاده میشود.
الگوی fileannotate رندر میشود.
/archive/{revision}.{format}[/{path}]
دریافت یک بایگانی از محتوای مخزن.
محتوا و نوع بایگانی توسط پارامتر مسیر URL تعیین میشود. format پسوند فایل مربوط به نوع بایگانی تولیدی است؛ مانند zip یا tar.bz2. ممکن است همهٔ انواع بایگانی توسط پیکربندی کارساز شما مجاز نباشند.
پارامتر اختیاری URL با نام path محتوایی را که باید در بایگانی گنجانده شود کنترل میکند. در صورت حذف، هر فایلی در بازبینی مشخصشده در بایگانی حضور خواهد داشت. در صورت درج، تنها فایل مشخصشده یا محتویات دایرکتوری مشخصشده در بایگانی قرار خواهند گرفت.
هیچ الگویی برای این گرداننده استفاده نمیشود. محتوای خام و دودویی تولید میشود.
/bookmarks
اطلاعات مربوط به نشانکها (bookmarks) را نمایش میدهد.
هیچ آرگومانی پذیرفته نمیشود.
الگوی bookmarks رندر میشود.
/branches
اطلاعات مربوط به شاخهها را نمایش میدهد.
همهٔ شاخههای شناختهشده در خروجی گنجانده میشوند، حتی شاخههای بسته.
هیچ آرگومانی پذیرفته نمیشود.
الگوی branches رندر میشود.
/changelog[/{revision}]
اطلاعات مربوط به چندین مجموعهتغییر را نمایش میدهد.
اگر آرگومان اختیاری URL با نام revision وجود نداشته باشد، اطلاعات همهٔ مجموعهتغییرها با شروع از tip رندر خواهد شد. اگر آرگومان revision حضور داشته باشد، مجموعهتغییرها با شروع از بازبینی مشخصشده نمایش داده میشوند.
اگر revision غایب باشد، آرگومان رشتهٔ پرسوجوی rev میتواند تعریف شود. این کار جستجویی را برای مجموعهتغییرها انجام خواهد داد.
آرگومان rev میتواند یک بازبینی تکی، یک مجموعه بازبینی، یا یک کلیدواژهٔ لفظی برای جستجو در دادههای مجموعهتغییر باشد (معادل hg log -k).
آرگومان رشتهٔ پرسوجوی revcount بیشینهٔ تعداد مجموعهتغییرها را برای رندر مشخص میکند.
برای مواردی به جز جستجو، الگوی changelog رندر خواهد شد..SS /changeset[/{revision}]
نمایش اطلاعات درباره یک مجموعهتغییر (changeset).
آرگومان مسیر URL، شناسه مجموعهتغییری است که باید نمایش داده شود. برای مشاهده مقادیر مجاز، hg help revisions را ببینید. در صورت عدم تعریف، مجموعهتغییر tip نمایش داده خواهد شد.
قالب changeset رندر میشود. محتویات قالبهای changesettag، changesetbookmark، filenodelink، filenolink و قالبهای متعدد مربوط به diff ممکن است همگی برای تولید خروجی به کار روند.
/comparison/{revision}/{path}
نمایش مقایسه بین نسخههای قدیم و جدید یک فایل بر اساس تغییرات اعمالشده در یک بازبینی (revision) خاص.
این بخش شبیه به گرداننده diff است؛ با این تفاوت که این ساختار به جای یک diff یکپارچه (unified diff)، یک diff ستونی یا کنار هم (side-by-side) ارائه میدهد.
آرگومان رشته پرسوجوی context میتواند برای کنترل خطوط بافت (context) در diff استفاده شود.
قالب filecomparison رندر میشود.
/diff/{revision}/{path}
نمایش نحوه تغییر یک فایل در یک کامیت مشخص.
قالب filediff رندر میشود.
این گرداننده تحت هر دو مسیر /diff و /filediff ثبت شده است. در کدهای مدرن از /diff استفاده میشود.
/file/{revision}[/{path}]
نمایش اطلاعات درباره یک دایرکتوری یا فایل در مخزن.
اطلاعات مربوط به path که به عنوان پارامتر URL مشخص شده است رندر خواهد شد.
اگر path یک دایرکتوری باشد، اطلاعات مربوط به ورودیهای آن دایرکتوری رندر میشود. این حالت معادل گرداننده manifest است.
اگر path یک فایل باشد، اطلاعات آن فایل از طریق قالب filerevision نمایش داده خواهد شد.
اگر path تعریف نشود، اطلاعات دایرکتوری ریشه رندر خواهد شد.
/diff/{revision}/{path}
نمایش نحوه تغییر یک فایل در یک کامیت مشخص.
قالب filediff رندر میشود.
این گرداننده تحت هر دو مسیر /diff و /filediff ثبت شده است. در کدهای مدرن از /diff استفاده میشود.
/filelog/{revision}/{path}
نمایش اطلاعات درباره تاریخچه یک فایل در مخزن.
آرگومان رشته پرسوجوی revcount میتواند برای تعیین حداکثر تعداد ورودیها جهت نمایش تعریف شود.
قالب filelog رندر خواهد شد.
/graph[/{revision}]
نمایش اطلاعات درباره توپولوژی گرافیکی مخزن.
اطلاعات ارائهشده توسط این گرداننده میتواند برای ساخت نمایشهای بصری از توپولوژی مخزن استفاده شود.
پارامتر URL مربوط به revision مجموعهتغییر آغازین را کنترل میکند. در صورت عدم وجود، مقدار پیشفرض tip است.
آرگومان رشته پرسوجوی revcount میتواند تعداد مجموعهتغییرهایی که اطلاعات آنها نمایش داده میشود را مشخص کند.
آرگومان رشته پرسوجوی graphtop میتواند مجموعهتغییر آغازین را جهت تولید متغیر jsdata (که برای رندر نمودار در JavaScript استفاده میشود) تعیین کند. به طور پیشفرض، مقداری برابر با revision دارد.
این گرداننده قالب graph را رندر خواهد کرد..SS /help[/{topic}]
رندر کردن مستندات راهنما.
این دستور وب تقریباً معادل hg help است. اگر یک topic تعریف شده باشد، آن مبحث راهنما رندر خواهد شد. در غیر این صورت، فهرستی از مباحث راهنمای موجود رندر میشود.
هنگام درخواست راهنما برای یک موضوع، قالب help رندر خواهد شد. برای فهرست موضوعات راهنما، قالب helptopics رندر میشود.
/log[/{revision}[/{path}]]
نمایش تاریخچهٔ مخزن یا فایل.
برای نشانیهای وب به شکل /log/{revision}، فهرستی از مجموعهتغییرها (changesets) با شروع از شناسهٔ changeset مشخصشده نمایش داده میشود. اگر {revision} تعریف نشده باشد، مقدار پیشفرض tip است. این ساختار معادل گردانندهٔ changelog میباشد.
برای نشانیهای وب به شکل /log/{revision}/{file}، تاریخچهٔ یک فایل بخصوص نمایش داده خواهد شد. این ساختار معادل گردانندهٔ filelog است.
/manifest[/{revision}[/{path}]]
نمایش اطلاعات دربارهٔ یک دایرکتوری.
اگر آرگومانهای مسیر نشانی وب حذف شوند، اطلاعات مربوط به دایرکتوری ریشه برای مجموعهتغییر tip نشان داده خواهد شد.
از آنجا که این گرداننده تنها میتواند اطلاعات مربوط به دایرکتوریها را نشان دهد، توصیه میشود به جای آن از گردانندهٔ file استفاده کنید، زیرا میتواند هم دایرکتوریها و هم فایلها را مدیریت کند.
قالب manifest برای این گرداننده رندر خواهد شد.
/changeset[/{revision}]
نمایش اطلاعات دربارهٔ یک changeset منفرد.
آرگومان مسیر نشانی وب، شناسهٔ changeset برای نمایش است. برای مقادیر ممکن، hg help revisions را ببینید. در صورت تعریف نشدن، changeset مربوط به tip نشان داده خواهد شد.
قالب changeset رندر میشود. محتویات changesettag، changesetbookmark، filenodelink، filenolink و قالبهای متعدد مربوط به diffها همگی ممکن است برای تولید خروجی مورد استفاده قرار گیرند.
/shortlog
نمایش اطلاعات اولیه دربارهٔ مجموعهای از changesetها.
این بخش پارامترهایی مشابه گردانندهٔ changelog میپذیرد. تنها تفاوت این است که به جای قالب changelog، قالب shortlog رندر خواهد شد.
/summary
نمایش خلاصهای از وضعیت مخزن.
اطلاعات مربوط به جدیدترین changesetها، نشانکها (bookmarks)، تگها و شاخهها توسط این گرداننده دریافت میشود.
قالب summary رندر میشود.
/tags
نمایش اطلاعات دربارهٔ تگها.
هیچ آرگومانی پذیرفته نمیشود.
قالب tags رندر میشود.
مباحث پیادهسازی فنی (TECHNICAL IMPLEMENTATION TOPICS)
برای دسترسی به یک زیرمبحث، از "hg help internals.{subtopic-name}" استفاده کنید
- bid-merge
- الگوریتم Bid Merge
- bundle2
- Bundle2
- bundles
- بستهها (Bundles)
- cbor
- CBOR
- censor
- سانسور (Censor)
- changegroups
- گروههای تغییر (Changegroups)
- config
- ثبتکنندهٔ پیکربندی (Config Registrar)
- dirstate-v2
- قالب فایل dirstate-v2
- extensions
- رابط برنامهنویسی افزونهها (Extension API)
- file-index
- نمایهٔ فایل (File Index)
- mergestate
- وضعیت ادغام (Mergestate)
- requirements
- نیازمندیهای مخزن (Repository Requirements)
- revlogs
- لاگهای بازنگری (Revision Logs)
- wireprotocol
- پروتکل شبکه (Wire Protocol)
- wireprotocolrpc
- پروتکل شبکه RPC (یا Wire Protocol RPC)
- wireprotocolv2
- نسخهٔ ۲ پروتکل شبکه (Wire Protocol Version 2)
برای ادغام فایلها، Mercurial از ابزارهای ادغام استفاده میکند.
یک ابزار ادغام، دو نسخه متفاوت از یک فایل را در یک فایل ادغامشده ترکیب میکند. به ابزارهای ادغام، دو فایل و بزرگترین جد مشترک آن دو نسخه داده میشود تا بتوانند تغییرات ایجادشده در هر دو شاخه را تعیین کنند.
ابزارهای ادغام هم برای hg resolve، hg merge، hg update، hg backout و هم در چندین افزونه استفاده میشوند.
معمولاً ابزار ادغام تلاش میکند با ترکیب تمام تغییرات بدون همپوشانی که بهطور جداگانه در دو سیر تکاملی متفاوت از یک فایل پایه اولیه رخ دادهاند، فایلها را بهصورت خودکار تطبیق دهد. علاوه بر این، برخی از برنامههای ادغام تعاملی، حل دستی ادغامهای دارای تعارض را به صورت گرافیکی یا با درج نشانگرهای تعارض آسانتر میکنند. Mercurial شامل هیچ برنامه ادغام تعاملی نیست، بلکه برای این کار به ابزارهای خارجی متکی است.
ابزارهای ادغام در دسترس (Available merge tools)
ابزارهای ادغام خارجی و ویژگیهای آنها در بخش پیکربندی merge-tools تنظیم میشوند - hgrc(5) را ببینید - اما اغلب میتوان آنها را صرفاً با نام فایل اجراییشان مشخص کرد.
یک ابزار ادغام بهطور کلی زمانی قابل استفاده است که فایل اجرایی آن در سیستم پیدا شود و بتواند ادغام را انجام دهد. فایل اجرایی زمانی پیدا میشود که یک مسیر اجرایی مطلق یا نسبی یا نام یک برنامه در مسیر جستجوی فایلهای اجرایی باشد. ابزار در صورتی قادر به انجام ادغام در نظر گرفته میشود که اگر فایل یک symlink باشد بتواند symlinkها را مدیریت کند، اگر فایل باینری باشد بتواند فایلهای باینری را مدیریت کند، و در صورتی که ابزار به رابط گرافیکی نیاز دارد، GUI در دسترس باشد.
برخی ابزارهای ادغام داخلی وجود دارند که میتوان از آنها استفاده کرد. ابزارهای ادغام داخلی عبارتند از:
- :dump
-
سه نسخه از فایلها را برای ادغام ایجاد میکند که شامل محتویات local، other و base هستند. سپس میتوان از این فایلها برای انجام دستی ادغام استفاده کرد. اگر نام فایل مورد نظر برای ادغام a.txt باشد، این فایلها متناسب با آن a.txt.local، a.txt.other و a.txt.base نامگذاری خواهند شد و در همان دایرکتوری a.txt قرار میگیرند.
این ابزار شامل premerge است. بنابراین، اگر premerge با موفقیت اجرا شود، فایلها استخراج (dump) نمیشوند. برای نوشتن اجباری فایلها از :forcedump استفاده کنید.
(قابلیتهای واقعی: binary، symlink)
- :fail
-
به جای تلاش برای ادغام فایلهایی که در هر دو شاخه تغییر یافتهاند، آنها را بهعنوان حلنشده علامتگذاری میکند. برای حل این تعارضها باید از دستور resolve استفاده شود.
(قابلیتهای واقعی: binary، symlink)
- :forcedump
-
مانند :dump سه نسخه از فایلها را ایجاد میکند، اما از premerge صرفنظر میکند.
(قابلیتهای واقعی: binary، symlink)
- :local
-
از نسخه محلی p1() فایلها به عنوان نسخه ادغامشده استفاده میکند.
(قابلیتهای واقعی: binary، symlink)
- :merge
-
از الگوریتم داخلی ساده و غیرتعاملی برای ادغام فایلها استفاده میکند. در صورت وجود هرگونه تعارض با شکست مواجه میشود و نشانگرهایی را در فایل تا حدی ادغامشده باقی میگذارد. نشانگرها دو بخش خواهند داشت، یکی برای هر طرف ادغام.
- :merge-local
-
مانند :merge است، اما تمام تعارضها را به صورت غیرتعاملی به نفع تغییرات محلی p1() حل میکند.
- :merge-other
-
مانند :merge است، اما تمام تعارضها را به صورت غیرتعاملی به نفع تغییرات طرف دیگر p2() حل میکند.
- :merge3
-
از الگوریتم داخلی ساده و غیرتعاملی برای ادغام فایلها استفاده میکند. در صورت وجود هرگونه تعارض با شکست مواجه میشود و نشانگرهایی را در فایل تا حدی ادغامشده باقی میگذارد. نشانگر دارای سه بخش خواهد بود، یکی برای هر طرف ادغام و یکی برای محتوای پایه (base).
- :mergediff
-
از الگوریتم داخلی ساده و غیرتعاملی برای ادغام فایلها استفاده میکند. در صورت وجود هرگونه تعارض با شکست مواجه میشود و نشانگرهایی را در فایل تا حدی ادغامشده باقی میگذارد. نشانگر دو بخش خواهد داشت، یکی با محتوای یک طرف ادغام، و دیگری با یک diff از محتوای پایه نسبت به محتوای طرف دیگر. (آزمایشی)
- :other
-
از نسخه طرف دیگر p2() فایلها به عنوان نسخه ادغامشده استفاده میکند.
(قابلیتهای واقعی: binary، symlink)
- :prompt
-
از کاربر میپرسد که کدام یک از نسخههای محلی p1() یا طرف دیگر p2() به عنوان نسخه ادغامشده نگهداری شود.
(قابلیتهای واقعی: binary، symlink)
- :tagmerge
-
از الگوریتم داخلی ادغام برچسب (tag merge) استفاده میکند (آزمایشی).
- :union
-
از الگوریتم داخلی ساده و غیرتعاملی برای ادغام فایلها استفاده میکند. با افزودن local روی other، از هر دو طرف برای نواحی دارای تعارض استفاده میکند. هیچ نشانگری درج نمیشود.
- :union-other-first
-
مانند :union است، اما other را روی local اضافه میکند.
ابزارهای داخلی همیشه در دسترس هستند و به GUI نیازی ندارند، اما به طور پیشفرض پیوندهای نمادین یا فایلهای باینری را مدیریت نمیکنند. برای جزئیات در مورد «قابلیتهای واقعی» که در بالا توضیح داده شد، به بخش بعدی مراجعه کنید..SS "انتخاب ابزار ادغام (Choosing a merge tool)"
Mercurial هنگام تصمیمگیری درباره اینکه از کدام ابزار ادغام استفاده کند، از این قواعد پیروی میکند:
- 1.
- اگر ابزاری با گزینه --tool برای merge یا resolve مشخص شده باشد، از همان استفاده میشود. اگر نام یک ابزار در پیکربندی merge-tools باشد، پیکربندی آن بهکار گرفته میشود. در غیر این صورت، ابزار مشخصشده باید توسط شل قابل اجرا باشد.
- 2.
- اگر متغیر محیطی HGMERGE تعریف شده باشد، از مقدار آن استفاده میشود و این مقدار باید توسط شل قابل اجرا باشد.
- 3.
- اگر نام فایل مورد نظر برای ادغام با هر یک از الگوها در بخش پیکربندی merge-patterns مطابقت داشته باشد، نخستین ابزار ادغامِ قابل استفاده متناظر با الگوی منطبق، بهکار گرفته میشود.
- 4.
- اگر ui.merge تنظیم شده باشد، در مرحله بعد بررسی خواهد شد. اگر مقدار آن نام یک ابزار پیکربندیشده نباشد، از همان مقدار تعیینشده استفاده میشود و باید توسط شل قابل اجرا باشد. در غیر این صورت، اگر ابزار نامبرده قابل استفاده باشد، همان بهکار گرفته میشود.
- 5.
- اگر هر ابزار ادغامِ قابل استفادهای در بخش پیکربندی merge-tools موجود باشد، ابزاری که بالاترین اولویت را دارد استفاده میشود.
- 6.
- اگر برنامهای با نام hgmerge در سیستم یافت شود، استفاده خواهد شد - اما بهطور پیشفرض برای symlinkها و فایلهای باینری استفاده نمیشود.
- 7.
- اگر فایلی که باید ادغام شود باینری نباشد و یک symlink نیز نباشد، آنگاه :merge داخلی استفاده میشود.
- 8.
- در غیر این صورت، :prompt بهکار میرود.
به دلایل تاریخی، Mercurial هنگام بررسی قواعد بالا، با ابزارهای ادغام طبق جدول زیر رفتار میکند.
| مرحله | تعیینشده از طریق | باینری | symlink |
| 0.0 1. 3 168u | --tool | o/o | o/o |
| 0.0 2. 3 168u | HGMERGE | o/o | o/o |
| 0.0 3. 3 168u | merge-patterns | o/o(*) | x/?(*) |
| 0.0 4. 3 168u | ui.merge | x/?(*) | x/?(*) |
هر ستون قابلیت، نشاندهنده رفتار Mercurial در قبال ابزارهای ادغام داخلی/خارجی هنگام بررسی هر قاعده است.
- "o": "فرض بر این است که ابزار دارای قابلیت است"
- "x": "فرض بر این است که ابزار فاقد قابلیت است"
- "?": "بررسی قابلیت واقعی ابزار"
اگر پیکربندی merge.strict-capability-check برابر true باشد، Mercurial قابلیتهای ابزارهای ادغام را در موارد (*) بالا بهطور دقیق بررسی میکند (= هر ستون قابلیت به "?/?" تبدیل میشود). این مقدار برای سازگاری با گذشته بهطور پیشفرض false است.
- نکته
- پس از انتخاب یک برنامه ادغام، Mercurial بهطور پیشفرض ابتدا تلاش خواهد کرد فایلها را با استفاده از یک الگوریتم ادغام ساده ادغام کند. تنها در صورتی که این کار به دلیل تغییرات دارای تداخل با شکست مواجه شود، Mercurial برنامه ادغام را در عمل اجرا خواهد کرد. اینکه آیا ابتدا از الگوریتم ادغام ساده استفاده شود یا خیر، از طریق تنظیم premerge ابزار ادغام قابل کنترل است. premerge بهطور پیشفرض فعال است مگر اینکه فایل باینری یا یک symlink باشد.
برای جزئیات بیشتر درباره پیکربندی ابزارهای ادغام، بخشهای merge-tools و ui در hgrc(5) را ببینید..SH "پشتیبانی از صفحهبند (PAGER SUPPORT)"
برخی از دستورهای Mercurial میتوانند خروجی زیادی تولید کنند، و Mercurial تلاش خواهد کرد تا از یک صفحهبند (pager) استفاده کند تا کار با آن دستورها آسانتر شود.
برای تعیین صفحهبندی که باید استفاده شود، متغیر برنامه را تنظیم کنید:
[pager] pager = less -FRX
اگر هیچ صفحهبندی در پیکربندی کاربر یا مخزن تنظیم نشده باشد، Mercurial از متغیر محیطی $PAGER استفاده میکند. اگر $PAGER تنظیم نشده باشد، pager.pager از پیکربندی پیشفرض یا سیستمی استفاده میشود. اگر هیچیک از اینها تنظیم نشده باشند، یک صفحهبند پیشفرض استفاده خواهد شد که معمولاً در Unix برابر less و در Windows برابر more است.
در Windows، دستور more از رنگ پشتیبانی نمیکند، بنابراین استفاده از آن عملاً رنگ را غیرفعال میکند. پوستههای MSYS و Cygwin دستور less را بهعنوان صفحهبند ارائه میدهند که میتوان آن را برای پشتیبانی از کدهای رنگی ANSI پیکربندی کرد. برای پیکربندی حالت رنگ هنگام فراخوانی صفحهبند، hg help config.color.pagermode را ببینید.
میتوانید با افزودن دستورها به فهرست pager.ignore، صفحهبند را برای دستورهای خاصی غیرفعال کنید:
[pager] ignore = version, help, update
برای نادیده گرفتن دستورهای سراسری مانند hg version یا hg help، باید آنها را در فایل پیکربندی کاربر خود مشخص کنید.
برای کنترل اینکه آیا برای یک دستور خاص اصلاً از صفحهبند استفاده شود یا خیر، میتوانید از --pager=<value> استفاده کنید:
- استفاده در صورت نیاز: auto.
- الزام به استفاده از صفحهبند: yes یا on.
- جلوگیری از صفحهبند: no یا off (هر مقدار ناشناختهٔ دیگری نیز کار خواهد کرد).
برای غیرفعال کردن سراسری تمام تلاشها جهت استفاده از صفحهبند، این مورد را تنظیم کنید:
[ui] paginate = never
که از اجرای صفحهبند جلوگیری خواهد کرد.
الگوهای نام فایل (FILE NAME PATTERNS)
ابزار Mercurial شیوههای نگارش متعددی را برای شناسایی یک یا چند فایل بهصورت همزمان میپذیرد.
بهطور پیشفرض، Mercurial با نامهای فایل بهصورت لفظی (عین عبارت) و بدون تطبیق الگو، نسبت به دایرکتوری کاری فعلی رفتار میکند. توجه داشته باشید که پوستهٔ سیستم شما ممکن است پیش از ارسال نامهای فایل به Mercurial، تطبیق الگوی مخصوص به خود را انجام دهد.
شیوههای دیگر نگارش الگو باید بهصورت صریح مشخص شوند.
- نکته
- الگوهای مشخصشده در .hgignore مقید به ریشه نیستند. لطفاً برای جزئیات hg help hgignore را ببینید.
برای استفاده از یک نام مسیر ساده بدون هیچگونه تطبیق الگو، آن را با path: آغاز کنید. این نامهای مسیر باید از ریشهٔ مخزن فعلی بهطور کامل مطابقت داشته باشند، و هنگامی که مسیر به یک دایرکتوری اشاره میکند، تطبیق آن بهصورت بازگشتی انجام میشود. برای تطبیق تمام فایلها در یک دایرکتوری بهصورت غیربازگشتی (بدون شامل شدن هیچ فایلی در زیردایرکتوریها)، میتوان از rootfilesin: با مشخص کردن یک مسیر مطلق (نسبت به ریشهٔ مخزن) استفاده کرد. برای تطبیق دقیق یک تکفایل، نسبت به ریشهٔ مخزن، میتوانید از filepath: استفاده کنید.
برای استفاده از یک glob گسترشیافته، نام را با glob: آغاز کنید. الگوهای glob نسبت به دایرکتوری جاری مبنا میگیرند؛ الگویی مانند *.c تنها با فایلهایی در دایرکتوری جاری مطابقت مییابد که به .c ختم میشوند. برای یک glob که مبنای آن ریشهٔ مخزن است، میتوان بهجای glob: از rootglob: استفاده کرد.
گسترشهای نحوی glob پشتیبانیشده عبارتند از ** برای تطبیق با هر رشتهای در میان جداکنندههای مسیر و {a,b} به معنای «a یا b».
برای استفاده از یک عبارت منظم Perl/Python، نام را با re: آغاز کنید. تطبیق الگوی عبارت منظم، در ریشهٔ مخزن مهار (anchored) میشود.
برای خواندن الگوهای نام از یک فایل، از listfile: یا listfile0: استفاده کنید. مورد دوم انتظار الگوهای جداشده با بایت تهی (null) را دارد، در حالی که اولی خطوط جدید را در نظر میگیرد. هر رشتهٔ خواندهشده از فایل، خود بهعنوان یک الگوی فایل تلقی میشود.
برای خواندن مجموعهای از الگوها از یک فایل، از include: یا subinclude: استفاده کنید. include: از تمام الگوهای فایل دادهشده استفاده کرده و با آنها طوری رفتار میکند که گویی دستی وارد شدهاند. subinclude: الگوها را تنها بر روی فایلهایی اعمال میکند که زیر دایرکتوریِ فایل subinclude قرار دارند. برای جزئیات در مورد قالب این فایلها، hg help hgignore را ببینید.
تمام الگوها، بهجز glob: مشخصشده در خط فرمان (نه برای گزینههای -I یا -X)، میتوانند با دایرکتوریها نیز تطبیق یابند: فایلهای زیر دایرکتوریهای تطبیقیافته، بهعنوان تطبیقیافته در نظر گرفته میشوند. برای گزینههای -I و -X، الگوی glob: دایرکتوریها را بهصورت بازگشتی مطابقت میدهد.
مثالهای ساده (Plain):
path:foo/bar نام bar در دایرکتوری با نام foo در ریشهٔ
مخزن
path:some/path یک فایل یا دایرکتوری با نام "some/path"
filepath:some/path/to/a/file دقیقاً یک تکفایل با نام
"some/path/to/a/file"، نسبت به ریشهٔ
مخزن
rootfilesin:foo/bar فایلهای درون دایرکتوری با نام foo/bar،
اما نه هیچ فایلی در زیردایرکتوریهای آن
و نه فایل bar در دایرکتوری foo
مثالهای Glob:
glob:*.c هر نامی که در دایرکتوری جاری به ".c" ختم میشود
*.c هر نامی که در دایرکتوری جاری به ".c" ختم میشود
**.c هر نامی که در هر زیردایرکتوری از دایرکتوری جاری،
شامل خود آن، به ".c" ختم میشود.
foo/* هر فایلی در دایرکتوری foo
foo/** هر فایلی در دایرکتوری foo بههمراه همهٔ زیردایرکتوریهای
آن، بهصورت بازگشتی
foo/*.c هر نامی که در دایرکتوری foo به ".c" ختم میشود
foo/**.c هر نامی که در هر زیردایرکتوری از foo، شامل خود آن،
به ".c" ختم میشود.
rootglob:*.c هر نامی که در ریشهٔ مخزن به ".c" ختم میشود
مثالهای عبارت منظم (Regexp):
re:.*\.c$ هر نامی که به ".c" ختم میشود، در هر کجای مخزن
مثالهای فایل:
listfile:list.txt خواندن فهرست از list.txt با یک الگوی فایل در هر خط listfile0:list.txt خواندن فهرست از list.txt با جداکنندههای بایت تهی (null)
همچنین hg help filesets را ببینید.
مثالهای Include:
include:path/to/mypatternfile خواندن الگوها برای اعمال بر تمام مسیرها
subinclude:path/to/subignorefile خواندن الگوها بهطور خاص برای مسیرهای
درون زیردایرکتوری
فازها چه هستند؟
فازها سامانهای برای ردگیری این موضوع هستند که کدام مجموعهتغییرها (changesets) به اشتراک گذاشته شدهاند یا باید به اشتراک گذاشته شوند. این کار به جلوگیری از اشتباههای متداول هنگام اصلاح تاریخچه کمک میکند (برای نمونه، با افزونههای mq یا rebase).
هر مجموعهتغییر در یک مخزن، در یکی از فازهای زیر قرار دارد:
- public : مجموعهتغییر روی یک سرور عمومی قابل مشاهده است
- draft : مجموعهتغییر هنوز منتشر نشده است
- secret : مجموعهتغییر نباید push، pull، یا clone شود
این فازها دارای ترتیب هستند (public < draft < secret) و هیچ مجموعهتغییری نمیتواند در فازی پایینتر از نیاکان خود باشد. برای نمونه، اگر یک مجموعهتغییر public باشد، تمام نیاکان آن نیز public هستند. در نهایت، فازهای مجموعهتغییر تنها باید به سمت فاز public تغییر یابند.
فازها چگونه مدیریت میشوند؟
در بیشتر موارد، فازها باید بهصورت شفاف و خودکار عمل کنند. بهطور پیشفرض، یک مجموعهتغییر در فاز draft ایجاد میشود و هنگامی که به مخزن دیگری push شود، به فاز public منتقل میگردد.
به محض اینکه مجموعهتغییرها public شوند، افزونههایی مانند mq و rebase برای جلوگیری از ایجاد مجموعهتغییرهای تکراری، از دستکاری آنها خودداری خواهند کرد. همچنین فازها را میتوان در صورت نیاز با دستور hg phase بهصورت دستی تغییر داد. برای مشاهدهٔ مثالها، hg help -v phase را ببینید.
برای اینکه commitهای شما بهطور پیشفرض secret باشند، این تنظیم را در فایل پیکربندی خود قرار دهید:
[phases] new-commit = secret
فازها و سرورها
بهطور معمول، همهٔ سرورها بهطور پیشفرض در وضعیت publishing هستند. این بدان معناست که:
- تمامی مجموعهتغییرهای draft که pull یا clone شوند، در سمت کلاینت در فاز public ظاهر میشوند - تمامی مجموعهتغییرهای draft که push شوند، هم در کلاینت و هم در سرور بهصورت public ظاهر میشوند - مجموعهتغییرهای secret نه push میشوند، نه pull، و نه clone
- نکته
- دریافت (pull) یک مجموعهتغییر draft از سروری با حالت publishing، به دلیل ماهیت فقطخواندنیِ (read-only) عملیات pull، آن را در سمت سرور به public تغییر وضعیت نمیدهد.
گاهی اوقات ممکن است ارسال (push) و دریافت (pull) مجموعهتغییرها در فاز draft برای به اشتراکگذاری کارهای ناتمام مطلوب باشد. این کار با غیرفعالسازی حالت publishing در فایل پیکربندی یک مخزن امکانپذیر است:
[phases] publish = False
برای اطلاعات بیشتر در مورد فایلهای پیکربندی، hg help config را ببینید.
- نکته
- با سرورهایی که نگارشهای قدیمیتر Mercurial را اجرا میکنند، بهعنوان publishing رفتار میشود.
- نکته
- مجموعهتغییرهای موجود در فاز secret با سرور مبادله نمیشوند. این موضوع در مورد محتوای آنها صدق میکند: نام فایلها، محتوای فایلها و فرادادههای مجموعهتغییر. به دلایل فنی، ممکن است شناسهٔ (برای مثال d825e4025e39) مجموعهتغییر secret به سرور منتقل شود.
- فهرست کردن
مجموعهتغییرها
(changesets) در فاز draft
یا secret:
hg log -r "not public()"
- تغییر دادن
تمام
مجموعهتغییرهای
secret به draft:
hg phase --draft "secret()"
- انتقال
اجباری
مجموعهتغییر
کنونی و
نوادگان آن
از public به draft:
hg phase --force --draft .
- نمایش
فهرستی از
بازبینیهای
مجموعهتغییر
و فاز مربوط
به هر یک:
hg log --template "{rev} {phase}\n" - همگامسازی
مجدد
مجموعهتغییرهای
draft نسبت به یک
مخزن
دوردست (remote):
hg phase -fd "outgoing(URL)"
برای اطلاعات بیشتر دربارهٔ دستکاری دستی فازها، hg help phase را ببینید.
مشخص کردن بازبینیها (SPECIFYING REVISIONS)
نرمافزار Mercurial از چندین روش برای مشخص کردن بازبینیها پشتیبانی میکند.
مشخص کردن یک بازبینی (Specifying single revisions)
یک عدد صحیح ساده، به عنوان شمارهٔ بازبینی در نظر گرفته میشود. اعداد صحیح منفی به عنوان آفستهای ترتیبی از tip در نظر گرفته میشوند؛ بهطوریکه -1 بیانگر tip، و -2 بیانگر بازبینی پیش از tip است، و به همین ترتیب ادامه مییابد.
یک رشتهٔ شانزدهشانزدهی (hexadecimal) ۴۰ رقمی به عنوان شناسهٔ بازبینی یکتا در نظر گرفته میشود. یک رشتهٔ شانزدهشانزدهی با طول کمتر از ۴۰ نویسه نیز به عنوان یک شناسهٔ بازبینی یکتا در نظر گرفته شده و شناسهٔ فرمکوتاه (short-form) نامیده میشود. یک شناسهٔ فرمکوتاه تنها در صورتی معتبر است که پیشوند دقیقاً یک شناسه با طول کامل باشد.
هر رشتهٔ دیگری به عنوان یک bookmark، برچسب (tag)، یا نام شاخه (branch) در نظر گرفته میشود. یک bookmark یک اشارهگر جابهجاشونده به یک بازبینی است. یک tag نامی دائمی است که به یک بازبینی نسبت داده شده است. نام یک شاخه نشاندهندهٔ تازهترین سرشاخهٔ باز (tipmost open branch head) از آن شاخه است - یا در صورتی که همهٔ آنها بسته باشند، تازهترین سرشاخهٔ بستهٔ آن شاخه خواهد بود. نامهای bookmark، برچسب (tag)، و شاخه (branch) نباید شامل نویسهٔ ":" باشند.
نام رزروشدهٔ "tip" همواره جدیدترین بازبینی را مشخص میکند.
نام رزروشدهٔ "null" بیانگر بازبینی تهی است. این، بازبینی یک مخزن خالی و والدِ بازبینی 0 است.
نام رزروشدهٔ "." بیانگر والد دایرکتوری کاری است. اگر هیچ دایرکتوری کاری تحویل گرفته نشده باشد (checked out)، معادل با null خواهد بود. اگر یک ادغام ثبتنشده (uncommitted merge) در جریان باشد، "." بازبینی والد اول خواهد بود.
در نهایت، دستورهایی که انتظار یک بازبینی واحد را دارند (مانند hg update) مجموعهبازبینیها یا revsetها را نیز میپذیرند (برای جزئیات به بخش زیر مراجعه کنید). هنگام دریافت یک revset، آنها از آخرین بازبینی موجود در revset استفاده میکنند. تعداد کمی از دستورها دو بازبینی واحد را میپذیرند (مانند hg diff). هنگام دریافت یک revset، آنها از نخستین و آخرین بازبینی revset استفاده خواهند کرد..SS مشخص کردن چندین بازنگری
مرکوریال (Mercurial) از یک زبان تابعی برای انتخاب مجموعهای از بازنگریها پشتیبانی میکند. عبارتها در این زبان revset نامیده میشوند.
این زبان از تعدادی گزاره پشتیبانی میکند که توسط عملگرهای میانوند به یکدیگر متصل میشوند. از پرانتز میتوان برای گروهبندی استفاده کرد.
شناسههایی مانند نام شاخهها، در صورتی که حاوی نویسههایی مثل - باشند یا با یکی از گزارههای از پیش تعریفشده مطابقت داشته باشند، ممکن است نیاز به قرار گرفتن داخل نقلقول تکی یا دوگانه داشته باشند.
نویسههای خاص را میتوان با گریز دادن (escape کردن) در شناسههای داخل نقلقول استفاده کرد؛ به عنوان مثال، \n به عنوان خط جدید تفسیر میشود. برای جلوگیری از تفسیر آنها، میتوان رشتهها را با پیشوند r مشخص کرد، مانند r'...'.
عملگرها
تنها یک عملگر پیشوندی وجود دارد:
- not x
-
مجموعهتغییرهایی که در x نیستند. فرم کوتاه آن ! x است.
عملگرهای میانوند پشتیبانیشده عبارتند از:
- x::y
-
یک بازه در گراف جهتدار بدون دور (DAG)، به معنای تمام مجموعهتغییرهایی که نوادگان x و نیاکان y هستند، شامل خود x و y. اگر نقطه انتهایی نخست حذف شود، معادل ancestors(y) است، و اگر دومی حذف شود، معادل descendants(x) خواهد بود.
یک نحو جایگزین x..y است.
- x:y
-
تمام مجموعهتغییرهای با شماره بازنگری بین x و y، شامل هر دو مورد. هر یک از نقاط انتهایی میتواند حذف شود، که مقدار پیشفرض آنها 0 و tip است.
- x and y
-
اشتراک مجموعهتغییرها در x و y. شکل کوتاه آن x & y است.
- x or y
-
اجتماع مجموعهتغییرها در x و y. دو شکل کوتاه جایگزین وجود دارد: x | y و x + y.
- x - y
-
مجموعهتغییرهایی که در x هستند اما در y نیستند.
- x % y
-
مجموعهتغییرهایی که از نیاکان x هستند اما از نیاکان y نیستند (یعنی ::x - ::y). این یک نشانهگذاری کوتاه برای only(x, y) است (پایینتر را ببینید). آرگومان دوم اختیاری است و در صورت حذف، معادل only(x) خواهد بود.
- x^n
-
والد nامِ x، که در آن n == 0، 1، یا 2 است. به ازای n == 0، خود x؛ به ازای n == 1، نخستین والد هر مجموعهتغییر در x؛ برای n == 2، دومین والد هر مجموعهتغییر در x.
- x~n
-
nامین والد نخست x؛ x~0 برابر با x است؛ x~3 معادل x^^^ است. برای n < 0، nامین نواده بدون ابهام x.
- x ## y
-
الحاق رشتهها و شناسهها به یکدیگر در قالب یک رشته.
تمام عملگرهای دیگرِ پیشوندی، میانوند و پسوندی اولویت کمتری نسبت به ## دارند. برای مثال، a1 ## a2~2 معادل (a1 ## a2)~2 است.
برای مثال:
[revsetalias] issue(a1) = grep(r'\bissue[ :]?' ## a1 ## r'\b|\bbug\(' ## a1 ## r'\)')در این حالت، issue(1234) معادل grep(r'\bissue[ :]?1234\b|\bbug\(1234\)') است. این عبارت با تمام موارد "issue 1234"، "issue:1234"، "issue1234" و "bug(1234)" مطابقت دارد.
تنها یک عملگر پسوندی وجود دارد:
- x^
-
معادل x^1، نخستین والد هر مجموعهتغییر در x.
در جاهایی که ذکر شده است، گزارههایی که تطبیق رشته انجام میدهند میتوانند یک رشتهٔ الگو بپذیرند. الگو میتواند یک عبارت تحتاللفظی (literal) یا یک عبارت منظم (regular expression) باشد. اگر الگو با re: آغاز شود، ادامهٔ الگو به عنوان یک عبارت منظم در نظر گرفته میشود؛ در غیر این صورت، به عنوان یک عبارت تحتاللفظی رفتار خواهد شد. برای تطبیق الگویی که واقعاً با re: شروع میشود، از پیشوند literal: استفاده کنید.
تطبیق به بزرگی و کوچکی حروف حساس است (case-sensitive)، مگر آنکه خلاف آن قید شده باشد. برای انجام تطبیق غیرحساس به حروف کوچک و بزرگ روی یک گزارهٔ حساس، از یک عبارت منظم با پیشوند (?i) استفاده کنید.
برای نمونه، tag(r're:(?i)release') با "release" یا "RELEASE" یا "Release" و غیره تطبیق مییابد.
گزارهها (Predicates)
گزارههای زیر پشتیبانی میشوند:
- adds(pattern)
-
مجموعهتغییراتی که فایلی منطبق با الگو اضافه میکنند.
انتظار میرود الگوی بدون نوع صریح مانند glob: نسبت به دایرکتوری جاری سنجیده شده و با یک فایل یا دایرکتوری تطبیق یابد.
- all()
-
تمام مجموعهتغییرات، مشابه با 0:tip.
- ancestor(*changeset)
-
بزرگترین نیای مشترک مجموعهتغییرات.
۰ یا چند مجموعهتغییرات میپذیرد. در صورت عدم ارسال آرگومان، فهرستی خالی برمیگرداند. بزرگترین نیای مشترک یک تک مجموعهتغییرات، خود آن مجموعهتغییرات است.
- ancestors(set[, depth])
-
مجموعهتغییراتی که نیای مجموعهتغییرات درون set هستند، شامل خود مجموعهتغییرات ارائهشده.
در صورت تعیین depth، خروجی تنها شامل مجموعهتغییرات تا نسل مشخصشده خواهد بود.
-
نام مستعاری برای user(string).
- bisect(string)
-
مجموعهتغییرات نشانهگذاریشده در وضعیت مشخص bisect:
- good، bad، skip: مجموعهتغییراتی که صراحتاً به عنوان good/bad/skip نشانهگذاری شدهاند
- goods، bads : مجموعهتغییرات با وضعیت توپولوژیکی good/bad
- range : مجموعهتغییرات حاضر در دونیمسازی (bisection)
- pruned : مجموعهتغییراتی که goods، bads یا ردشده (skipped) هستند
- untested : مجموعهتغییراتی که وضعیت آنها هنوز نامشخص است
- ignored : مجموعهتغییرات نادیدهگرفتهشده به دلیل توپولوژی DAG
- current : مجموعهتغییراتی که در حال حاضر تحت bisect قرار دارد
- bookmark([name])
-
بوکمارک مشخصشده یا همهٔ بوکمارکها.
تطبیق الگو برای name پشتیبانی میشود. hg help revisions.patterns را ببینید.
- branch(string or set)
-
تمام مجموعهتغییرات متعلق به شاخهٔ دادهشده یا شاخههای مجموعهتغییرات ارائهشده.
تطبیق الگو برای string پشتیبانی میشود. hg help revisions.patterns را ببینید.
- branchpoint()
-
مجموعهتغییراتی با بیش از یک فرزند.
- bundle()
-
مجموعهتغییرات موجود در بسته (bundle).
بسته باید با گزینهٔ -R مشخص شود.
- children(set)
-
مجموعهتغییرات فرزند برای مجموعهتغییرات در set.
- closed()
-
مجموعهتغییرات بسته است.
- commonancestors(set)
-
مجموعهتغییراتی که نیای تکتک مجموعهتغییرات در set هستند.
- conflictlocal()
-
سمت محلی ادغام، اگر در حال حاضر در یک ادغام حلنشده باشد.
واژهٔ "merge" در اینجا شامل تداخلهای ادغام ناشی از مواردی مانند 'hg rebase' یا 'hg graft' نیز میشود.
- conflictother()
-
سمت دیگر ادغام، اگر در حال حاضر در یک ادغام حلنشده باشد.
واژهٔ "merge" در اینجا شامل تداخلهای ادغام ناشی از مواردی مانند 'hg rebase' یا 'hg graft' نیز میشود.
- contains(pattern)
-
مانیفست بازبینی، حاوی فایلی منطبق با الگو است (اما ممکن است آن را تغییر نداده باشد). برای اطلاعات دربارهٔ الگوهای فایل، hg help patterns را ببینید.
انتظار میرود الگوی بدون نوع صریح مانند glob: جهت کارایی بهتر، نسبت به دایرکتوری جاری بوده و دقیقاً با یک فایل تطبیق یابد.
- converted([id])
-
مجموعهتغییرات تبدیلشده از شناسهٔ دادهشده در مخزن قدیمی (در صورت وجود)، یا تمام مجموعهتغییرات تبدیلشده در صورت عدم تعیین شناسه.
- date(interval)
-
مجموعهتغییرات درون بازهٔ زمانی، hg help dates را ببینید.
- desc(string)
-
جستجوی string در پیام کامیت. تطبیق نسبت به بزرگی و کوچکی حروف حساس نیست (case-insensitive).
تطبیق الگو برای string پشتیبانی میشود. hg help revisions.patterns را ببینید.
- descendants(set[, depth])
-
مجموعهتغییراتی که نوادهٔ مجموعهتغییرات در set هستند، شامل خود مجموعهتغییرات ارائهشده.
در صورت تعیین depth، نتیجه تنها شامل مجموعهتغییرات تا نسل مشخصشده خواهد بود.
- destination([set])
-
مجموعهتغییراتی که توسط عملیات graft، transplant یا rebase ایجاد شدهاند و بازبینیهای ارائهشده به عنوان مبدأ آنها مشخص شده است. حذف کردن set اختیاری معادل ارسال all() است.
- diffcontains(pattern)
-
جستجوی تفاوتهای بازبینی برای زمانی که الگو اضافه یا حذف شده است.
الگو میتواند یک زیررشتهٔ تحتاللفظی یا یک عبارت منظم باشد. hg help revisions.patterns را ببینید.
- draft()
-
مجموعهتغییرات در فاز پیشنویس (draft).
- expectsize(set[, size])
-
در صورتی که size با اندازهٔ revset تطابق داشته باشد، revset دادهشده را برمیگرداند. اگر revset اندازهٔ دادهشده را نداشته باشد، لغو میشود (Abort). مقدار size میتواند یک بازه از اعداد صحیح یا یک عدد صحیح باشد..sp برای مثال، expectsize(0:1, 3:5) لغو خواهد شد زیرا اندازه revset برابر با ۲ است و ۲ بین ۳ و ۵ (شامل خود آنها) نیست.
- extra(label, [value])
-
مجموعهتغییرها (changesets) دارای برچسب دادهشده در فرادادههای اضافی (extra metadata)، همراه با مقدار اختیاری مشخصشده.
تطبیق الگو برای value پشتیبانی میشود. به hg help revisions.patterns مراجعه کنید.
- file(pattern)
-
مجموعهتغییرهایی که بر فایلهای منطبق با الگو تأثیر میگذارند.
برای نتیجهای سریعتر اما با دقت کمتر، میتوانید استفاده از filelog() را در نظر بگیرید.
این گزاره از glob: بهعنوان نوع پیشفرض الگو استفاده میکند.
- filelog(pattern)
-
مجموعهتغییرهای متصل به filelog مشخصشده.
به دلایل کارایی و عملکرد، تنها بازبینیهای ذکرشده در filelog در سطح فایل بررسی میشوند، به جای پالایش میان تمام مجموعهتغییرها (بسیار سریعتر است، اما شامل حذفها یا تغییرات تکراری نمیشود). برای نتیجهای کندتر و دقیقتر، از file() استفاده کنید.
الگوی بدون نوع صریح مانند glob:، برای کارایی بیشتر انتظار میرود که نسبت به دایرکتوری جاری باشد و دقیقاً با یک فایل تطابق یابد.
- first(set, [n])
-
نام مستعاری برای limit().
- follow([file[, startrev]])
-
نام مستعاری برای ::. (نیاکان والد اول دایرکتوری کاری). اگر الگوی فایل مشخص شود، تاریخچه فایلهای منطبق با الگوی ارائهشده در بازبینی مشخصشده توسط startrev، شامل رونوشتها، دنبال میشود.
- followlines(file, fromline:toline[, startrev=., descend=False])
-
مجموعهتغییرهایی که file را در محدوده خطوط ('fromline'، 'toline') اصلاح میکنند.
محدوده خط متناظر با محتوای 'file' در 'startrev' است و بنابراین باید با اندازه فایل همخوانی داشته باشد. اگر startrev مشخص نشود، والد دایرکتوری کاری استفاده میشود.
بهطور پیشفرض، نیاکان 'startrev' بازگردانده میشوند. اگر 'descend' برابر با True باشد، نوادگان 'startrev' بازگردانده میشوند، هرچند تغییر نامها (در حال حاضر) در این جهت دنبال نمیشوند.
- grep(regex)
-
مانند keyword(string) است ولی یک regex را میپذیرد. از grep(r'...') استفاده کنید تا مطمئن شوید نویسههای گریز (escape) بهدرستی پردازش میشوند. برخلاف keyword(string)، تطبیق به حروف بزرگ و کوچک حساس است.
- head()
-
مجموعهتغییری که سرشاخه (head) یک شاخه نامگذاریشده است.
- heads(set)
-
عضوهایی از set که هیچ فرزندی در set ندارند.
-
مجموعهتغییرهای مخفی.
- id(string)
-
بازبینی که بهطور غیرمبهم با پیشوند رشته هگز مشخص شده است.
- keyword(string)
-
جستجوی پیام کامیت، نام کاربری، و نامهای فایلهای تغییریافته برای string. تطبیق حساس به حروف بزرگ و کوچک نیست.
برای یک عبارت باقاعده (regular expression) یا جستجوی حساس به حروف در این فیلدها، از grep(regex) استفاده کنید.
- last(set, [n])
-
تعداد n عضو آخر set، با مقدار پیشفرض ۱.
- limit(set[, n[, offset]])
-
تعداد n عضو اول set، با مقدار پیشفرض ۱، با شروع از offset.
- matching(revision [, field])
-
مجموعهتغییرهایی که در آنها مجموعهای مشخص از فیلدها با فیلدهای بازبینی یا مجموعه انتخابشده مطابقت دارند.
برای مطابقت دادن بیش از یک فیلد، فهرست فیلدهای مورد نظر را جداشده با فاصله ارسال کنید (مانند author description).
فیلدهای معتبر شامل بیشتر فیلدهای معمول بازبینی و برخی فیلدهای ویژه هستند.
فیلدهای معمول بازبینی عبارتاند از description، author، branch، date، files، phase، parents، substate، user و diff. توجه داشته باشید که author و user مترادف یکدیگرند. diff به محتویات بازبینی اشاره دارد. دو بازبینی که در diff خود مطابقت دارند، در files نیز مطابقت خواهند داشت.
فیلدهای ویژه عبارتاند از summary و metadata: summary با خط اول description مطابقت دارد. metadata معادل تطبیق description user date است (یعنی با فیلدهای اصلی فراداده مطابقت دارد).
metadata فیلد پیشفرضی است که در صورت عدم تعیین فیلدها استفاده میشود. میتوانید بیش از یک فیلد را بهطور همزمان مطابقت دهید.
- max(set)
-
مجموعهتغییر با بیشترین شماره بازبینی در set.
- merge()
-
مجموعهتغییری که یک ادغام (merge) است.
- min(set)
-
مجموعهتغییر با کمترین شماره بازبینی در set.
- modifies(pattern)
-
مجموعهتغییرهایی که فایلهای منطبق با الگو را اصلاح میکنند.
الگوی بدون نوع صریح مانند glob: انتظار میرود که نسبت به دایرکتوری جاری باشد و با یک فایل یا دایرکتوری مطابقت یابد.
- named(namespace)
-
مجموعهتغییرهای موجود در یک فضاینام (namespace) معین.
تطبیق الگو برای namespace پشتیبانی میشود. به hg help revisions.patterns مراجعه کنید.
- nodefromfile(path)
-
خواندن فهرستی از گرهها از فایل موجود در path.
این گزاره id(LINE) را بر روی هر خط از فایل اعمال میکند.
این مورد زمانی مفید است که تعداد گرههایی که باید مشخص کنید برای خط فرمان بیش از حد بزرگ میشود.
- none()
-
هیچ مجموعهتغییری.
- only(set, [set])
-
مجموعهتغییرهایی که نیاکان مجموعه اول هستند اما نیاکان هیچ سرشاخه (head) دیگری در مخزن نیستند. اگر مجموعه دوم مشخص شود، نتیجه نیاکان مجموعه اول است که نیاکان مجموعه دوم نباشند (یعنی ::<set1> - ::<set2>).
- origin([set])
-
مجموعهتغییرهایی که بهعنوان مبدأ برای عملیات graft، transplant یا rebase مشخص شده بودند که بازبینیهای ارائهشده را ایجاد کردهاند. حذف set اختیاری مانند ارسال all() است. اگر مجموعهتغییری که توسط این عملیات ایجاد شده خود بهعنوان مبدأ یکی از این عملیات مشخص شود، تنها مجموعهتغییر مبدأ برای اولین عملیات انتخاب میشود.
- outgoing([path])
-
مجموعهتغییرهایی که در مخزن مقصد مشخصشده یا مکان پیشفرض push یافت نمیشوند.
اگر مکان به چندین مخزن منتهی شود، اجتماع تمام مجموعهتغییرهای ارسالی (outgoing) استفاده خواهد شد..TP p1([set])
والد نخست چنجستهای موجود در set، یا دایرکتوری کاری.
- p2([set])
-
والد دوم چنجستهای موجود در set، یا دایرکتوری کاری.
- parents([set])
-
مجموعه تمام والدین برای همه چنجستهای موجود در set، یا دایرکتوری کاری.
- present(set)
-
یک مجموعه خالی، چنانچه هر بازنگریای در set یافت نشود؛ در غیر این صورت، تمام بازنگریهای موجود در set.
اگر هر یک از بازنگریهای مشخصشده در مخزن محلی موجود نباشد، پرسوجو معمولاً لغو میشود. اما این گزاره به پرسوجو اجازه میدهد حتی در چنین مواردی نیز ادامه یابد.
- public()
-
چنجست در فاز public.
- remote([id [,path]])
-
بازنگری محلی که در صورت وجود، متناظر با شناسه دادهشده در یک مخزن دوردست (remote) است. در اینجا، شناسه '.' مترادفی برای شاخه محلی جاری است.
- removes(pattern)
-
چنجستهایی که فایلهای منطبق با pattern را حذف میکنند.
انتظار میرود الگوی بدون نوع صریح مانند glob: نسبت به دایرکتوری جاری در نظر گرفته شود و با یک فایل یا یک دایرکتوری تطبیق داده شود.
- rev(number)
-
بازنگری با شناسه عددی دادهشده.
- reverse(set)
-
ترتیب معکوس set.
- revset(set)
-
تفسیر دقیق محتوا به عنوان یک revset.
محتوای این گزاره ویژه دقیقاً به عنوان یک revset تفسیر خواهد شد. برای مثال، revset(id(0)) بدون ابهام احتمالی با یک بوکمارک یا تگ "id(0)"، به صورت "id(0)" تفسیر خواهد شد.
- roots(set)
-
چنجستهایی در set که هیچ چنجست والدی در set ندارند.
- secret()
-
چنجست در فاز secret.
- sort(set[, [-]key... [, ...]])
-
مرتبسازی set بر اساس کلیدها. ترتیب مرتبسازی پیشفرض صعودی است؛ برای مرتبسازی نزولی یک کلید را به صورت -key مشخص کنید.
کلیدها میتوانند موارد زیر باشند:
- rev برای شماره بازنگری،
- branch برای نام شاخه،
- desc برای پیام کامیت (توضیحات)،
- user برای نام کاربر (author میتواند به عنوان یک نام مستعار استفاده شود)،
- date برای تاریخ کامیت
- topo برای مرتبسازی توپولوژیکی معکوس
- node برای nodeid بازنگری
- random برای بر زدن تصادفی بازنگریها
ترتیب مرتبسازی topo نمیتواند با سایر کلیدهای مرتبسازی ترکیب شود. این مرتبسازی یک آرگومان اختیاری، topo.firstbranch، میپذیرد که یک revset دریافت میکند و مشخص میسازد کدام شاخههای توپولوژیکی در مرتبسازی اولویت داشته باشند.
مرتبسازی random یک آرگومان اختیاری random.seed برای واپایش شبهتصادفی بودن نتیجه میپذیرد.
- subrepo([pattern])
-
چنجستهایی که subrepo دادهشده را اضافه، ویرایش یا حذف میکنند. اگر هیچ الگوی subrepo مشخص نشده باشد، تمامی تغییرات subrepo بازگردانده میشوند.
- tag([name])
-
تگ مشخصشده با نام، یا تمام بازنگریهای تگخورده در صورتی که نامی داده نشود.
تطبیق الگو برای name پشتیبانی میشود. ببینید hg help revisions.patterns.
- user(string)
-
نام کاربر شامل string باشد. تطابق نسبت به بزرگی و کوچکی حروف حساس نیست (case-insensitive).
تطبیق الگو برای string پشتیبانی میشود. ببینید hg help revisions.patterns.
میتوان با استفاده از هر ترکیبی از گزارههای موجود یا دیگر نامهای مستعار، گزارههای جدیدی (معروف به «نامهای مستعار» یا aliases) تعریف کرد. تعریف یک نام مستعار به این صورت است:
<alias> = <definition>
در بخش revsetalias یک فایل پیکربندی Mercurial قرار میگیرد. آرگومانهایی به فرم a1، a2 و غیره از نام مستعار در تعریف جایگزین میشوند.
برای مثال،
[revsetalias] h = heads() d(s) = sort(s, date) rs(s, k) = reverse(sort(s, k))
سه نام مستعار h، d و rs را تعریف میکند. عبارت rs(0:tip, author) دقیقاً معادل reverse(sort(0:tip, author)) است.
معادلها (Equivalents)
معادلهای خط فرمان برای hg log:
-f -> ::. -d x -> date(x) -k x -> keyword(x) -m -> merge() -u x -> user(x) -b x -> branch(x) -P x -> !::x -l x -> limit(expr, x)
مثالها (EXAMPLES)
چند پرسوجوی نمونه:
- مجموعهتغییرها
(changesets) در شاخه default:
hg log -r "branch(default)"
- مجموعهتغییرهای
شاخه default از
زمان برچسب
1.5 به بعد
(بدون
ادغامها):
hg log -r "branch(default) and 1.5:: and not merge()"
- سرشاخههای
باز (heads):
hg log -r "head() and not closed()"
- مجموعهتغییرهای
بین
برچسبهای
1.3 و 1.5 که به «bug»
اشاره
دارند و بر
hgext/* تأثیر
میگذارند:
hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')" - مجموعهتغییرهای
ثبتشده در
مه ۲۰۰۸،
مرتبشده
بر اساس
کاربر:
hg log -r "sort(date('May 2008'), user)" - مجموعهتغییرهایی
که به «bug» یا
«issue» اشاره
دارند و در
یک انتشار
برچسبخورده
قرار
ندارند:
hg log -r "(keyword(bug) or keyword(issue)) and not ancestors(tag())"
- بهروزرسانی
به کامیتی
که نشانک (bookmark) @
به آن اشاره
دارد، بدون
فعالسازی
نشانک (این
دستور کار
میکند چون
آخرین
بازبینی revset
استفاده
میشود):
hg update :@
- نمایش
تفاوت (diff)
میان
برچسبهای
1.3 و 1.5 (این
دستور کار
میکند چون
اولین و
آخرین
بازبینیهای
revset استفاده
میشوند):
hg diff -r 1.3::1.5
میتوان Mercurial را برای افزایش سرعت برخی عملیاتها با افزونههای Rust ارتقا داد.
هشدار (Word of Caution)
استفاده از افزونهٔ Rust ممکن است منجر به استفاده از قالبهای مختلف مخزنی شود که توسط نسخههای غیر Rust نرمافزار Mercurial پشتیبانی نمیشوند. هنگام استفاده از نسخهٔ Mercurial بدون پشتیبانی از Rust بر روی همان مخازن، ممکن است نیاز باشد قالبهای مخزن خود را به نسخههای قدیمیتر برگردانید (downgrade) و/یا برای سازگاری، مسیرهای بسیار کُند را فعال کنید. برای جزئیات بیشتر، ببینید:
- hg help config.format.use-persistent-nodemap
- hg help config.format.use-dirstate-v2
علاوه بر این، در حالی که آزمونها با کد Rust اجرا میشوند، ممکن است انحرافها و تفاوتهای ظریف و کشفنشدهای نسبت به کدهای قدیمی غیر Rust وجود داشته باشد. بنابراین دقت کافی داشته باشید و هرگونه رفتار غیرعادی را گزارش دهید. Rust هنوز به عنوان یک شهروند درجهیک در این پروژه در نظر گرفته نمیشود.
سازگاری (Compatibility)
اگرچه افزونههای Rust توسط پروژه فقط روی Linux آزمایش میشوند، کاربران MacOS ،FreeBSD و سایر سیستمهای شبهیونیکس (UNIX-like) نیز از آنها استفاده کردهاند. ممکن است تجربهٔ شما متفاوت باشد، اما حتماً بازخورد ارسال کنید یا علاقهٔ خود را برای پشتیبانی بهتر اعلام نمایید.
برای سازگاری با نسخههای بدون Rust از Mercurial، بخش قبلی «هشدار (Word of Caution)» را بررسی کنید.
در حال حاضر هیچ افزونهٔ Rust برای Windows در دسترس نیست.
ویژگیها (Features)
هنگام استفاده از Rust سرعت عملیاتهای زیر افزایش مییابد:
- کشف تفاوتهای میان مخازن (pull/push)
- قابلیت nodemap (ببینید hg help config.format.use-persistent-nodemap)
- تمامی دستورهایی که از dirstate استفاده میکنند (status، commit، diff، add، update و غیره)
- قابلیت dirstate-v2 (ببینید hg help config.format.use-dirstate-v2)
- پیمایش روی نیاکان (ancestors) در یک گراف
ویژگیهای بیشتری در دست ساخت هستند و بهبود موارد فهرستشده در بالا همچنان در حال انجام است. برای کارهای آزمایشی بیشتر، بخش «rhg» را ببینید.
بررسی وجود Rust (Checking for Rust)
بسته به نحوهٔ نصب Mercurial، ممکن است از قبل افزونههای Rust را در اختیار داشته باشید:
$ hg debuginstall | grep -i rust checking Rust extensions (installed) checking module policy (rust+c-allow)
اگر این خطوط اصلاً وجود ندارند، از نسخهٔ قدیمی hg استفاده میکنید که هنوز هیچ افزونهٔ Rust ندارد..SS نصب
شما نیاز خواهید داشت که cargo در $PATH شما باشد. برای اطلاع از اینکه از کدام نسخه استفاده کنید، بخش «MSRV» را ببینید.
استفاده از pip
کاربران pip میتوانند افزونههای Rust را با دستورهای زیر نصب کنند:
$ pip cache remove mercurial
$ pip install mercurial -v \
--config-settings --global-option=--rust \
--no-binary mercurial --force
دستور pip cache remove و گزینهٔ --no-binary برای این هستند که به pip بگویند از wheelهای از پیش کامپایلشدهای که فاقد پشتیبانی از rust هستند استفاده نکند. این فرآیند ممکن است چند دقیقه طول بکشد زیرا شما در حال کامپایل کردن همه چیز هستید.
برای بررسی موفقیتآمیز بودن نصب، بخش «Checking for Rust» را ببینید.
استفاده از pipx
استفاده از pipx روشی کارآمد برای داشتن یک نصب ایزوله از mercurial برای یک کاربر یا بهصورت سراسری است.
- $ pipx install mercurial
- --pip-args '--no-cache-dir --config-settings --global-option=--rust --no-binary=mercurial'
سپس میتوانید با استفاده از دستور زیر افزونهها را به آن نصب اضافه کنید:
$ pipx inject mercurial hg-foo
استفاده از uv tool
استفاده از uv tool روش کارآمد دیگری برای داشتن یک نصب ایزوله از mercurial برای یک کاربر یا بهصورت سراسری است.
- $ uv tool install mercurial
- --no-binary=mercurial --no-cache --config-setting=--build-option=--rust
میتوانید با استفاده از گزینهٔ --with افزونهها را نیز به همراه آن بیاورید. برای مثال
$ uv tool install mercurial --with hg-evolve [...]
از طریق توزیع شما
برخی از توزیعها Mercurial را با افزونههای Rust از پیش کامپایلشده و فعال عرضه میکنند (به این معنی که نیازی به نصب cargo نخواهید داشت)، یا به شما امکان میدهند یک پرچم نصب را مشخص کنید. برای چگونگی انجام این کار، توزیع خاص خود را بررسی کنید یا از تیم آنها بخواهید که پشتیبانی از hg+Rust را اضافه کنند!
از کد منبع
لطفاً برای دریافت دستورالعملهای نحوهٔ نصب از کد منبع، به فایل rust/README.md در مخزن Mercurial مراجعه کنید.
MSRV
حداقل نسخهٔ پشتیبانیشدهٔ Rust در rust/clippy.toml تعریف شده است. سیاست پروژه این است که برای سادهتر کردن کار توزیعها، آن را در نسخهٔ Debian testing یا پایینتر از آن نگه دارد..SS rhg
نسخهای آزمایشی و کاملاً مبتنی بر Rust از Mercurial به نام rhg وجود دارد که مجهز به سازوکار بازگشت خودکار (fallback) برای فراخوانیهای پشتیبانینشده است. این ابزار امکان اجرای بسیار سریعتر برخی دستورها را فراهم میکند، بدون اینکه بار اضافی محسوسی برای سایر دستورها به همراه داشته باشد.
تنها راه آزمایش آن، کامپایل و ساخت از سورسکد است. لطفاً به rust/README.md در مخزن Mercurial مراجعه کنید.
برای مشاهده گزینههای پیکربندی، hg help config.rhg را ببینید.
مشارکت (Contributing)
اگر مایلید در تلاشهای مربوط به Rust مشارکت کنید، لطفاً به rust/README.md در مخزن Mercurial مراجعه کنید.
استفاده از MERCURIAL در اسکریپتها و خودکارسازی (USING MERCURIAL FROM SCRIPTS AND AUTOMATION)
استفاده ماشینها (در مقایسه با انسانها) از Mercurial بسیار متداول است. این مبحث راهنما برخی از نکات و ملاحظات مربوط به برقراری ارتباط ماشینها با Mercurial را شرح میدهد.
انتخاب رابط (Choosing an Interface)
ماشینها برای برقراری ارتباط با Mercurial، چندین روش در پیش رو دارند. این روشها شامل موارد زیر است:
- اجرای فرایند hg
- ارسال درخواست به یک سرور HTTP
- فراخوانی سرور دستور (command server)
اجرای فرایندهای hg بسیار شبیه به نحوه تعامل انسانها با Mercurial در محیط خط فرمان (shell) است و احتمالاً از قبل با آن آشنا هستید.
از hg serve میتوان برای راهاندازی یک سرور استفاده کرد. بهطور پیشفرض، این دستور یک سرور HTTP از نوع “hgweb” را راهاندازی میکند. این سرور HTTP از خروجیهای ماشینخوان مانند JSON پشتیبانی میکند. برای اطلاعات بیشتر، hg help hgweb را ببینید.
همچنین hg serve میتواند یک “سرور دستور” (command server) را راهاندازی کند. کلاینتها میتوانند به این سرور متصل شده و دستورهای Mercurial را از طریق یک پروتکل ویژه صادر کنند. برای جزئیات بیشتر درباره سرور دستور، از جمله پیوندها به کتابخانههای کلاینت، https://www.mercurial-scm.org/wiki/CommandServer را ببینید.
رابطهای مبتنی بر hg serve (سرورهای hgweb و سرورهای دستور) نسبت به فراخوانیهای ساده فرایند hg این مزیت را دارند که احتمالاً کارآمدتر هستند؛ زیرا ایجاد و راهاندازی فرایندهای جدید Python با سربار چشمگیری همراه است.
- نکته
- اگر نیاز دارید چندین فرایند hg را در فواصل زمانی کوتاه اجرا کنید و/یا کارایی (performance) برایتان مهم است، استفاده از یک رابط مبتنی بر سرور اکیداً توصیه میشود.
متغیرهای محیطی (Environment Variables)
همانطور که در hg help environment مستند شده است، متغیرهای محیطی گوناگونی بر عملکرد Mercurial تأثیر میگذارند. موارد زیر بهویژه برای ماشینهایی که از Mercurial استفاده میکنند اهمیت دارند:
- HGPLAIN
- در صورت
تنظیم
نشدن،
خروجی Mercurial
میتواند
تحت تأثیر
تنظیمات
پیکربندی
قرار گیرد
که بر
کدگذاری
(encoding)، حالت
پرگویی (verbose mode)،
بومیسازی
و غیره
تأثیر
میگذارند.
اکیداً توصیه میشود هنگام فراخوانی فرایندهای hg توسط ماشینها، این متغیر تنظیم شود.
- HGENCODING
- در صورت
تنظیم
نشدن،
لوکال (locale)
مورد
استفاده Mercurial
از
متغیرهای
محیط سیستم
تشخیص داده
خواهد شد.
اگر لوکال
مشخصشده
از نمایش
نویسههای
خاصی
پشتیبانی
نکند، ممکن
است Mercurial این
دنبالههای
نویسهای
را بهصورت
نادرست
نمایش دهد
(اغلب با
استفاده از
“?” به
عنوان
جایگزین
نویسههای
نامعتبر در
لوکال
فعلی).
تنظیم صریح این متغیر محیطی روشی مناسب برای تضمین نتایج پایدار و یکنواخت است. مقدار “utf-8” انتخابی مناسب در محیطهای شبهیونیکس (UNIX-like) به شمار میرود.
- HGRCPATH
- در صورت
تنظیم
نشدن، Mercurial
گزینههای
پیکربندی
را با
استفاده از
فرایند شرح
دادهشده
در hg help config از
فایلهای
پیکربندی
به ارث
میبرد. این
شامل به ارث
بردن
فایلهای
پیکربندی
کاربر یا
سراسری
سیستم نیز
میشود.
هنگامی که بیشترین سطح کنترل بر پیکربندی Mercurial مد نظر باشد، مقدار HGRCPATH را میتوان روی یک فایل مشخص با پیکربندیهای معتبر شناختهشده تنظیم کرد. در موارد نادر، میتوان مقدار آن را روی یک فایل خالی یا دستگاه تهی (معمولاً /dev/null) قرار داد تا از بارگذاری هرگونه فایل پیکربندی کاربر یا سیستم صرفنظر شود. توجه داشته باشید که این روشها میتوانند پیامدهای ناخواستهای داشته باشند، زیرا فایلهای پیکربندی کاربر و سیستم غالباً مواردی نظیر نام کاربری و افزونههایی را تعریف میکنند که ممکن است برای برقراری ارتباط با یک مخزن الزامی باشند.
- HGRCSKIPREPO
- در صورت
تنظیم شدن،
فایل .hg/hgrc
مخازن
خوانده
نخواهد شد.
توجه داشته باشید که نخواندن پیکربندی مخزن میتواند پیامدهای ناخواستهای داشته باشد، زیرا فایلهای پیکربندی مخزن میتوانند مواردی مانند افزونههای مورد نیاز برای دسترسی به مخزن را تعریف کنند.
تجزیهگر خط فرمان پیشفرض Mercurial برای انسانها طراحی شده است و در برابر ورودیهای مخرب مقاوم نیست. برای نمونه، میتوانید با ارسال --debugger به عنوان مقدار یک گزینه، یک اشکالزدا (debugger) را اجرا کنید:
$ REV=--debugger sh -c 'hg log -r "$REV"'
این اتفاق به این دلیل رخ میدهد که چندین پرچم خط فرمان باید بدون استفاده از یک جدول دستور مشخص بررسی شوند؛ جدولی که ممکن است هنگام بارگذاری تنظیمات مخزن و افزونهها تغییر یابد.
از نسخه 4.4.2 نرمافزار Mercurial به بعد، تجزیه چنین پرچمهایی میتواند با مقداردهی HGPLAIN=+strictflags محدود شود. هنگامی که این ویژگی فعال است، تمام گزینههای اولیه (مانند -R/--repository، --cwd، --config) باید در ابتدا و پیش از سایر گزینههای سراسری مشخص شوند و نمیتوان آنها را در یک مکان دلخواه تزریق کرد:
$ HGPLAIN=+strictflags hg -R "$REPO" log -r "$REV"
در نسخههای پیشین Mercurial که +strictflags در دسترس نیست، میتوانید این مشکل را با چسباندن مقدار گزینه به پرچم آن کاهش دهید:
$ hg log -r"$REV" --keyword="$KEYWORD"
دریافت و پردازش خروجی دستورات (Consuming Command Output)
بسیار معمول است که سیستمها یا برنامهها نیاز داشته باشند خروجی دستورهای Mercurial را برای استخراج دادههای مرتبط تجزیه کنند. این بخش روشهای گوناگون انجام این کار را شرح میدهد.
تجزیه خروجی خام دستور (Parsing Raw Command Output)
احتمالاً سادهترین و کارآمدترین راهکار برای استفاده از خروجی، اجرای عادی دستورهای hg همانند یک کاربر معمولی و تجزیه خروجی آنها است.
خروجی بسیاری از دستورها را میتوان به آسانی با ابزارهایی مانند grep، sed و awk تجزیه کرد.
یک جنبه منفی بالقوه در تجزیه خروجی دستورات این است که با ارتقای Mercurial، ممکن است خروجی دستورها تغییر کند. اگرچه Mercurial بهطور کلی برای حفظ سازگاری رو به عقب (backwards compatibility) قوی تلاش میکند، اما خروجی دستورات گاهی دستخوش تغییر میشود. داشتن آزمونهایی برای بررسی تعاملات خودکار با دستورهای hg عموماً توصیه میشود، اما زمانی که پای تجزیه خروجی خام در میان باشد، این امر اهمیت دوچندانی پیدا میکند.
استفاده از الگوها برای کنترل خروجی (Using Templates to Control Output)
بسیاری از دستورهای hg از خروجی قالببندیشده از طریق آرگومان -T/--template پشتیبانی میکنند. برای اطلاعات بیشتر، دستور hg help templates را ببینید.
الگوها برای کنترل صریح خروجی سودمند هستند تا بتوانید دقیقاً دادههای مورد نظر خود را با همان قالبی که میخواهید به دست آورید. برای نمونه، log -T {node}\n میتواند برای چاپ فهرستی از گرههای changeset با جداکننده خط جدید استفاده شود، بهجای خروجی مخصوص انسان که شامل نام نویسندگان، تاریخها، توضیحات و غیره است.
- نکته
- اگر تجزیه خروجی خام دستور بیش از حد پیچیده است، برای سادهتر کردن کار از الگوها استفاده کنید.
آرگومان -T/--template امکان مشخص کردن سبکهای از پیش تعریفشده را فراهم میکند. نرمافزار Mercurial همراه با سبکهای ماشینخوان cbor، json و xml عرضه میشود که به ترتیب خروجیهای CBOR، JSON و XML را ارائه میدهند. این سبکها برای تولید خروجیهایی که مستقیماً برای ماشین قابل خواندن هستند، بسیار کاربردیاند.
(برای سبک CBOR، به Mercurial نسخه 5.0 یا بالاتر نیاز است.)
- مهم
- سبکهای json
و xml
آزمایشی در
نظر گرفته
میشوند.
اگرچه ممکن
است
استفاده از
آنها برای
بهدست
آوردن آسان
خروجی
ماشینخوان
جذاب باشد،
اما رفتار
آنها در
نسخههای
بعدی ممکن
است تغییر
کند.
این سبکها همچنین ممکن است هنگام مواجهه با برخی رمزگذاریها (encodings) رفتارهای غیرمنتظرهای نشان دهند. نرمافزار Mercurial مواردی همچون نام فایلها را به صورت دنبالهای از بایتها در نظر میگیرد و عادیسازی دنبالههای خاصی از بایتها به JSON یا XML با تنظیمات رمزگذاری خاص میتواند منجر به رفتارهای پیشبینینشده شود.
اگر برای تعامل با Mercurial از سرور فرمان استفاده میکنید، به احتمال زیاد از یک کتابخانه/API موجود استفاده میکنید که جزئیات پیادهسازی سرور فرمان را انتزاعی میکند. در این صورت، این لایهٔ رابط ممکن است تجزیه (parsing) را برای شما انجام دهد و شما را از پیادهسازی دستی آن بینیاز کند.
پرگویی خروجی (Output Verbosity)
دستورها اغلب پرگویی (verbosity) خروجی متفاوتی دارند، حتی زمانی که از سبکهای ماشینخوان (مانند -T json) استفاده میشود. افزودن -v/--verbose و --debug به آرگومانهای دستور میتواند مقدار دادههای ارائهشده توسط Mercurial را افزایش دهد.
یک روش جایگزین برای دریافت دادههای مورد نیازتان، مشخص کردن صریح یک الگو (template) است.
موضوعات دیگر (Other Topics)
- revsets
- مجموعههای
بازبینی (Revision sets)
یک زبان
پرسمان
تابعی برای
انتخاب
مجموعهای
از
بازبینیها
است. آن را
مانند SQL
برای مخازن
Mercurial در نظر
بگیرید. revsetها
برای
پرسوجوی
دادههای
خاص از
مخازن
سودمند
هستند.
برای اطلاعات بیشتر hg help revsets را ببینید.
- share extension
- افزونهٔ share
قابلیتهایی
را برای به
اشتراکگذاری
دادههای
مخزن میان
چندین
نسخهٔ کاری
فراهم
میکند. این
افزونه حتی
میتواند
هنگام
شبیهسازی
(cloning)، فضای
ذخیرهسازی
را برای
مخازنی که
از نظر
منطقی به هم
مرتبط
هستند
بهطور
خودکار
تجمیع (pool) کند.
پیکربندی افزونهٔ share میتواند به کاهش چشمگیر مصرف منابع، بهویژه در فضای دیسک و شبکه منجر شود. این موضوع مخصوصاً برای محیطهای یکپارچهسازی مداوم (CI) صادق است.
برای اطلاعات بیشتر hg help -e share را ببینید.
مخازن فرعی (SUBREPOSITORIES)
مخازن فرعی به شما امکان میدهند مخازن یا پروژههای خارجی را درون یک مخزن والد Mercurial قرار دهید (تودرتو کنید) و کاری کنید که دستورها بهصورت گروهی روی آنها عمل کنند.
در حال حاضر Mercurial از مخازن فرعی Mercurial، Git و Subversion پشتیبانی میکند.
مخازن فرعی از سه مؤلفه تشکیل شدهاند:
- 1.
- نسخههای checkout شدهٔ مخازن تودرتو. آنها میتوانند در هر کجای دایرکتوری کاری والد قرار گیرند.
- 2.
- ارجاعات
مخازن
تودرتو.
آنها در
فایل .hgsub
تعریف
میشوند که
باید در
ریشهٔ
دایرکتوری
کاری قرار
گیرد و مشخص
میکند که
checkoutهای مخزن
فرعی از کجا
میآیند. به
مخازن فرعی
Mercurial به این
صورت ارجاع
داده
میشود:
path/to/nested = https://example.com/nested/repo/path
مخازن فرعی Git و Subversion نیز پشتیبانی میشوند:
path/to/nested = [git]git://example.com/nested/repo/path path/to/nested = [svn]https://example.com/nested/trunk/path
که در آن path/to/nested محل checkout بهصورت نسبی نسبت به ریشهٔ والد Mercurial است، و https://example.com/nested/repo/path مسیر مخزن مبدأ است. منبع میتواند به یک مسیر در سیستمفایل نیز اشاره داشته باشد.
توجه داشته باشید که .hgsub بهطور پیشفرض در مخازن Mercurial وجود ندارد؛ شما باید پیش از استفاده از مخازن فرعی، آن را ایجاد کرده و به مخزن والد اضافه کنید.
- 3.
- وضعیتهای مخازن تودرتو. آنها در فایل .hgsubstate تعریف میشوند که در ریشهٔ دایرکتوری کاری قرار میگیرد و تمام اطلاعات لازم برای بازگرداندن مخازن فرعی به وضعیتی را که در یک مجموعه تغییرات (changeset) مخزن والد commit شده بودند، ثبت میکند. Mercurial هنگام commit کردن در مخزن والد، وضعیت مخازن تودرتو را بهطور خودکار ذخیره میکند.
- نکته
- فایل .hgsubstate نباید بهصورت دستی ویرایش شود.
اگر .hgsub وجود ندارد، آن را بسازید و به مخزن والد اضافه کنید. پروژههای خارجی را در مکانی از مخزن والد که میخواهید قرار گیرند clone یا checkout کنید. .hgsub را ویرایش کرده و ورودی مخزن فرعی را همانطور که در بالا توضیح داده شد اضافه کنید. در این مرحله، مخزن فرعی ردگیری میشود و ثبت (commit) بعدی وضعیت آن را در .hgsubstate ذخیره کرده و به مجموعه تغییرات ثبتشده پیوند میدهد.
همگامسازی یک مخزن فرعی
مخازن فرعی بهطور خودکار آخرین مجموعه تغییرات منابع خود را دنبال نمیکنند. در عوض، آنها به مجموعه تغییراتی بهروزرسانی میشوند که مطابق با مجموعه تغییرات checkout شده در مجموعه تغییرات سطح بالا است. بدین ترتیب توسعهدهندگان هنگام بهروزرسانی همیشه مجموعهای یکدست و سازگار از کدها و کتابخانهها را دریافت میکنند.
بنابراین، بهروزرسانی مخازن فرعی یک فرایند دستی است. کافی است مخزن فرعی هدف را در بازبینی (revision) دلخواه checkout کنید، آن را در مخزن سطح بالا بیازمایید، و سپس در مخزن والد commit کنید تا ترکیب جدید ثبت شود.
حذف یک مخزن فرعی
برای حذف یک مخزن فرعی از مخزن والد، ارجاع آن را از .hgsub حذف کرده، سپس فایلهای آن را پاک کنید.
تعامل با دستورهای Mercurial
- add
- دستور add درون مخازن فرعی بهصورت بازگشتی عمل نمیکند مگر اینکه -S/--subrepos مشخص شده باشد. با این حال، اگر مسیر کامل یک فایل در یک مخزن فرعی را مشخص کنید، حتی بدون تعیین -S/--subrepos نیز اضافه خواهد شد. مخازن فرعی Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- addremove
- دستور addremove به مخازن فرعی بهصورت بازگشتی وارد نمیشود مگر اینکه -S/--subrepos مشخص شده باشد. با این حال، اگر مسیر کامل یک دایرکتوری در یک مخزن فرعی را مشخص کنید، addremove روی آن اجرا خواهد شد حتی بدون اینکه -S/--subrepos تعیین شده باشد. مخازن فرعی Git و Subversion یک هشدار چاپ کرده و ادامه میدهند.
- archive
- دستور archive در مخازن فرعی بهصورت بازگشتی عمل نمیکند مگر اینکه -S/--subrepos مشخص شده باشد.
- cat
- مخازن فرعی Git تنها از تطابق دقیق فایلها پشتیبانی میکنند. مخازن فرعی Subversion در حال حاضر نادیده گرفته میشوند.
- commit
- دستور commit یک تصویر لحظهای (snapshot) سازگار از وضعیت کل پروژه و مخازن فرعی آن ایجاد میکند. اگر هر یک از مخازن فرعی تغییر یافته باشند، Mercurial عملیات را متوقف (abort) میکند. میتوان Mercurial را وادار کرد تا به جای توقف، تمام مخازن فرعی تغییریافته را با تعیین -S/--subrepos یا تنظیم "ui.commitsubrepos=True" در یک فایل پیکربندی commit کند (مشاهده کنید hg help config). پس از اینکه دیگر هیچ مخزن فرعی تغییریافتهای وجود نداشت، وضعیت آنها را ضبط کرده و در نهایت آن را در مخزن والد ثبت (commit) میکند. گزینه --addremove نیز از گزینه -S/--subrepos تبعیت میکند. با این حال، مخازن فرعی Git و Subversion یک هشدار چاپ کرده و متوقف میشوند.
- diff
- دستور diff در مخازن فرعی بهصورت بازگشتی عمل نمیکند مگر اینکه -S/--subrepos مشخص شده باشد. با این حال، اگر مسیر کامل یک فایل یا دایرکتوری در یک مخزن فرعی را مشخص کنید، حتی بدون تعیین -S/--subrepos نیز تفاوتگیری (diff) انجام میشود. مخازن فرعی Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- files
- دستور files به مخازن فرعی بهصورت بازگشتی وارد نمیشود مگر اینکه -S/--subrepos مشخص شده باشد. با این حال، اگر مسیر کامل یک فایل یا دایرکتوری در یک مخزن فرعی را مشخص کنید، حتی بدون تعیین -S/--subrepos نیز نمایش داده خواهد شد. مخازن فرعی Git و Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- forget
- دستور forget در حال حاضر فقط تطابقهای دقیق فایل را در مخازن فرعی پردازش میکند. مخازن فرعی Git و Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- incoming
- دستور incoming در مخازن فرعی بهصورت بازگشتی عمل نمیکند مگر اینکه -S/--subrepos مشخص شده باشد. مخازن فرعی Git و Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- outgoing
- دستور outgoing در مخازن فرعی بهصورت بازگشتی عمل نمیکند مگر اینکه -S/--subrepos مشخص شده باشد. مخازن فرعی Git و Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- pull
- دستور pull بازگشتی نیست زیرا پیش از اجرای hg update مشخص نیست چه چیزی باید دریافت شود. فهرست کردن و واکشی تمامی تغییرات مخازن فرعی که در مجموعهتغییرات واکشیشدهٔ مخزن والد به آنها ارجاع شده است، در بهترین حالت سنگین و پرهزینه، و در مورد Subversion غیرممکن است.
- push
- هنگامی که مخزن والد در حال push شدن است، Mercurial بهطور خودکار ابتدا تمام مخازن فرعی را push میکند. این کار تضمین میکند که تغییرات جدید مخزن فرعی هنگام ارجاع از سوی مخازن سطح بالا در دسترس باشند. عملیات push برای مخازن فرعی Subversion یک عملیات بیاثر (no-op) است.
- serve
- دستور serve به مخازن فرعی بهصورت بازگشتی وارد نمیشود مگر اینکه -S/--subrepos مشخص شده باشد. مخازن فرعی Git و Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- status
- دستور status به مخازن فرعی بهصورت بازگشتی وارد نمیشود مگر اینکه -S/--subrepos مشخص شده باشد. تغییرات مخزن فرعی بهصورت تغییرات معمولی Mercurial روی عناصر مخزن فرعی نمایش داده میشوند. مخازن فرعی Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- remove
- دستور remove به مخازن فرعی بهصورت بازگشتی وارد نمیشود مگر اینکه -S/--subrepos مشخص شده باشد. با این حال، اگر مسیر یک فایل یا دایرکتوری در یک مخزن فرعی را مشخص کنید، حتی بدون -S/--subrepos نیز حذف خواهد شد. مخازن فرعی Git و Subversion در حال حاضر بدون هشدار نادیده گرفته میشوند.
- update
- دستور update
مخازن فرعی
را به همان
وضعیتی که
در ابتدا در
مجموعه
تغییرات
هدف commit شده
بودند
بازمیگرداند.
اگر مجموعه
تغییرات
ثبتشده در
مخزن فرعی
فعلی در
دسترس
نباشد، Mercurial
پیش از
بهروزرسانی
ابتدا آن را
pull میکند.
این بدان
معناست که
بهروزرسانی
هنگام
استفاده از
مخازن فرعی
ممکن است به
دسترسی به
شبکه نیاز
داشته باشد.
مکان منبع یک زیرمخزن ممکن است در طول حیات یک پروژه تغییر کند و ارجاعات ذخیرهشده در تاریخچهٔ مخزن والد را نامعتبر سازد. برای برطرف کردن این موضوع، میتوان قواعد بازنویسی را در فایل hgrc مخزن والد یا در پیکربندی Mercurial تعریف کرد. برای جزئیات بیشتر بخش [subpaths] را در hgrc(5) ببینید.
استفاده از الگو (TEMPLATE USAGE)
ابزار Mercurial به شما امکان میدهد خروجی دستورها را از طریق الگوها سفارشیسازی کنید. شما میتوانید یک الگو را مستقیماً ارسال کنید یا یک سبک الگوی (template-style) موجود را از طریق گزینهٔ --template از خط فرمان انتخاب نمایید.
شما میتوانید خروجی را برای هر دستور «مشابه log» سفارشیسازی کنید: log، outgoing، incoming، tip، parents و heads.
برخی از سبکهای توکار همراه با Mercurial بستهبندی شدهاند. این سبکها را میتوان با hg log --template list فهرست کرد. مثال استفاده:
$ hg log -r1.0::1.1 --template changelog
یک الگو تکهای از متن است که همراه با نشانهگذاریهایی برای فراخوانی بسط متغیرها میباشد:
$ hg log -r1 --template "{node}\n"
b56ce7b07c52de7d5fd79fb89701ea538af65746
کلیدواژهها (Keywords)
رشتههای درون آکولاد، کلیدواژه (keyword) نامیده میشوند. در دسترس بودن کلیدواژهها به زمینهٔ دقیق الگو بستگی دارد. این کلیدواژهها معمولاً برای الگودهی به یک دستور مشابه log در دسترس هستند:
- _fast_rank
- رتبهٔ یک changeset
در صورت کش
شدن.
رتبهٔ یک بازبینی (revision) اندازهٔ زیرگرافی است که آن بازبینی به عنوان یک سر (head) تعریف میکند. به بیان معادل، رتبهٔ بازبینی r اندازهٔ مجموعهٔ ancestors(r) با احتساب خودِ r است.
- activebookmark
- رشته. بوکمارک فعال، اگر با changeset مرتبط باشد.
- نام مستعار برای {user}.
- bisect
- رشته. وضعیت بسط و تنصیف (bisection) مربوط به changeset.
- bookmarks
- فهرستی از رشتهها. هر بوکمارک مرتبط با changeset. همچنین 'active'، نام بوکمارک فعال را تنظیم میکند.
- branch
- رشته. نام شاخهای که changeset روی آن ثبت (commit) شده است.
- changessincelatesttag
- عدد صحیح. تمام نیاکانی که در آخرین برچسب (tag) قرار ندارند.
- children
- فهرستی از رشتهها. فرزندان changeset.
- closesbranch
- مقدار "yes" اگر این changeset شاخه را میبندد، در غیر این صورت "no".
- date
- اطلاعات تاریخ. تاریخی که changeset در آن ثبت شده است.
- desc
- رشته. متن توضیحات changeset.
- diffstat
- رشته. آمار تغییرات با قالب زیر: "modified files: +added/-removed lines"
- extras
- فهرستی از دیکشنریها (dicts) شامل مدخلهای کلید و مقدارِ فیلد 'extras' از این changeset.
- file_adds
- فهرستی از رشتهها. فایلهای اضافهشده توسط این changeset.
- file_copies
- فهرستی از رشتهها. فایلهای کپیشده در این changeset به همراه منابعشان.
- file_copies_switch
- فهرستی از رشتهها. مانند "file_copies" اما تنها در صورتی نمایش داده میشود که سوئیچ --copied تنظیم شده باشد.
- file_dels
- فهرستی از رشتهها. فایلهای حذفشده توسط این changeset.
- file_mods
- فهرستی از رشتهها. فایلهای تغییریافته توسط این changeset.
- files
- فهرستی از رشتهها. تمام فایلهای تغییریافته، اضافهشده یا حذفشده توسط این changeset.
- graphnode
- رشته. نویسهای که گرهٔ changeset را در یک گراف بازبینی ASCII نمایش میدهد.
- graphwidth
- عدد صحیح. عرض گراف رسمشده توسط 'log --graph' یا صفر.
- index
- عدد صحیح. تکرار فعلی حلقه (شروع نمایه از 0).
- latesttag
- فهرستی از رشتهها. برچسبهای سراسری روی نزدیکترین نیا با برچسب سراسریِ این changeset. اگر چنین برچسبی وجود نداشته باشد، فهرست شامل یک رشتهٔ تکی "null" خواهد بود.
- latesttagdistance
- عدد صحیح. طولانیترین مسیر تا آخرین برچسب.
- namespaces
- دیکشنری از فهرستها. نامهای متصل به این changeset به ازای هر فضای نام (namespace).
- negrev
- عدد صحیح. شماره بازبینی منفی changeset محلی در مخزن، که در جهت معکوس شمارش میشود.
- node
- رشته. هش شناسایی changeset، به عنوان یک رشتهٔ ۴۰ رقمی هگزادسیمال.
- onelinesummary
- رشته. یک خلاصهٔ تکخطی برای ctx (بدون خط جدید انتهایی). الگوی پیشفرض را میتوان در command-templates.oneline-summary بازنویسی و جایگزین کرد.
- p1
- مقدار Changeset. والد اول changeset. مقدار {p1.rev} برای شمارهٔ بازبینی، و {p1.node} برای هش شناسایی.
- p2
- مقدار Changeset. والد دوم changeset. مقدار {p2.rev} برای شمارهٔ بازبینی، و {p2.node} برای هش شناسایی..TP parents فهرستی از رشتهها. والدهای changeset در قالب "rev:node". اگر changeset تنها یک والد «طبیعی» (نسخهٔ بازبینی پیشین) داشته باشد، چیزی نمایش داده نمیشود.
- peerurls
- فرهنگی (دیکشنری) از مکانهای مخزن که در بخش [paths] فایل پیکربندی شما تعریف شدهاند.
- phase
- رشته. نام فازِ changeset.
- reporoot
- رشته. دایرکتوری ریشهٔ مخزن جاری.
- rev
- عدد صحیح. شمارهٔ نسخهٔ بازبینی changeset محلی در مخزن.
- subrepos
- فهرستی از رشتهها. زیرمخزنهای بهروزشده در changeset.
- فهرستی از رشتهها. تمام برچسبهای مرتبط با changeset.
- termwidth
- عدد صحیح. پهنای پایانهٔ جاری.
- user
- رشته. نویسندهٔ تغییرنیافتهٔ changeset.
- verbosity
- رشته. میزان پرگویی خروجیِ جاری که شامل 'debug'، 'quiet'، 'verbose' یا '' است.
کلیدواژهٔ "date" خروجی قابل خواندن توسط انسان تولید نمیکند. اگر میخواهید از تاریخ در خروجی خود استفاده کنید، میتوانید از یک فیلتر برای پردازش آن بهره ببرید. فیلترها توابعی هستند که بر اساس متغیر ورودی، رشتهای را بازمیگردانند. دقت داشته باشید هنگامی که یک فیلتر با ورودی رشتهای را روی متغیری شبیه به فهرست اِعمال میکنید، ابتدا از فیلتر stringify استفاده کنید. همچنین میتوانید از زنجیرهای از فیلترها برای دستیابی به خروجی دلخواه استفاده کنید:
$ hg tip --template "{date|isodate}\n"
2008-08-21 18:22 +0000
فیلترها (Filters)
فهرست فیلترها:
- addbreaks
- هر متنی. افزودن یک برچسب "<br />" از نوع XHTML پیش از انتهای هر خط بهجز آخرین خط.
- age
- تاریخ. اختلاف تاریخ/زمان دادهشده با تاریخ/زمان فعلی را بهصورت خوانا برای انسان بازمیگرداند.
- basename
- هر متنی. متن را به عنوان یک مسیر در نظر میگیرد و آخرین بخشِ مسیر را پس از جداسازی با جداکنندهٔ مسیر بازمیگرداند. برای نمونه، "foo/bar/baz" به "baz" و "foo/bar//" به "" تبدیل میشود.
- cbor
- هر شیئی. شیء را به بایتهای CBOR سریالسازی میکند.
- commondir
- فهرستی از
متنها. با
هر مورد از
فهرست به
عنوان نام
فایل با
جداکنندهٔ
مسیر /
رفتار کرده
و
طولانیترین
پیشوند
دایرکتوری
مشترک میان
تمام موارد
فهرست را
بازمیگرداند.
در صورتی که
پیشوند
مشترکی
وجود
نداشته
باشد، یک
رشتهٔ خالی
برمیگرداند.
موارد فهرست نرمالسازی نمیشوند؛ یعنی با "foo/../bar" مانند فایل "bar" در دایرکتوری "foo/.." رفتار میشود. اسلشهای ابتدایی نادیده گرفته میشوند.
برای نمونه، ["foo/bar/baz", "foo/baz/bar"] به "foo" و ["foo/bar", "baz"] به "" تبدیل میشود.
- count
- فهرست یا متن. طول را به عنوان یک عدد صحیح بازمیگرداند.
- dirname
- هر متنی. متن را به عنوان یک مسیر در نظر میگیرد و پس از جداسازی با جداکنندهٔ مسیر، آخرین بخشِ مسیر را حذف میکند.
- domain
- هر متنی. نخستین رشتهای را که شبیه نشانی ایمیل است پیدا کرده و تنها بخش دامنهٔ آن را استخراج میکند. نمونه: User <user@example.com> به example.com تبدیل میشود.
- هر متنی. نخستین رشتهای را که شبیه نشانی ایمیل است استخراج میکند. نمونه: User <user@example.com> به user@example.com تبدیل میشود.
- emailuser
- هر متنی. بخش نام کاربری (user) یک نشانی ایمیل را بازمیگرداند.
- escape
- هر متنی. نویسههای خاص XML/XHTML شامل "&"، "<" و ">" را با موجودیتهای XML جایگزین کرده و نویسههای NUL را حذف میکند.
- fill68
- هر متنی. متن را طوری میشکند تا در ۶۸ ستون جای گیرد.
- fill76
- هر متنی. متن را طوری میشکند تا در ۷۶ ستون جای گیرد.
- firstline
- هر متنی. نخستین خط متن را بازمیگرداند.
- hex
- هر متنی. یک شناسهٔ گره (node) دودویی Mercurial را به نمایش شانزدهشانزدهی (hexadecimal) طولانی آن تبدیل میکند.
- hgdate
- تاریخ. تاریخ را به عنوان یک جفت عدد بازمیگرداند: "1157407993 25200" (برچسب زمانی یونیکس، انحراف منطقهٔ زمانی).
- isodate
- تاریخ. تاریخ را در قالب ISO 8601 بازمیگرداند: "2009-08-18 13:00 +0200".
- isodatesec
- تاریخ. تاریخ را در قالب ISO 8601 به همراه ثانیهها بازمیگرداند: "2009-08-18 13:00:13 +0200". همچنین فیلتر rfc3339date را ببینید.
- json
- هر شیئی. شیء را به متنی در قالب JSON سریالسازی میکند.
- lower
- هر متنی. متن را به حروف کوچک تبدیل میکند.
- nonempty
- هر متنی. اگر رشته خالی باشد، '(none)' را بازمیگرداند.
- obfuscate
- هر متنی. متن ورودی را بهصورت توالیای از موجودیتهای XML بازمیگرداند.
- person
- هر متنی. نامِ پیش از نشانی ایمیل را با تفسیر آن مطابق RFC 5322 بازمیگرداند..TP reverse فهرست. ترتیب آیتمهای فهرست را معکوس میکند.
- revescape
- هر متنی. تمام نویسههای «خاص» را، بهجز @، اسکیپ میکند. اسلشهای رو به جلو دو بار اسکیپ میشوند تا از بازگردانی زودهنگام اسکیپ آنها توسط وبسرورها جلوگیری شود. برای مثال، "@foo bar/baz" به "@foo%20bar%252Fbaz" تبدیل میشود.
- rfc3339date
- تاریخ. تاریخی با قالب تاریخ اینترنت مشخصشده در RFC 3339 را برمیگرداند: "2009-08-18T13:00:13+02:00".
- rfc822date
- تاریخ. تاریخی با همان قالب مورد استفاده در سرآیندهای ایمیل را برمیگرداند: "Tue, 18 Aug 2009 13:00:13 +0200".
- short
- هش changeset. شکل کوتاه یک هش changeset را برمیگرداند، یعنی یک رشتهی ۱۲ رقمی هگزادسیمال.
- shortbisect
- هر متنی. با label به عنوان وضعیت bisect برخورد کرده و یک تکنویسه نمایندهی وضعیت را برمیگرداند (G: خوب، B: بد، S: ردشده، U: آزمایشنشده، I: نادیدهگرفتهشده). اگر text یک وضعیت معتبر bisect نباشد، یک فاصلهی تکی برمیگرداند.
- shortdate
- تاریخ. تاریخی مانند "2006-09-18" را برمیگرداند.
- slashpath
- هر متنی. جداکنندهی بومی مسیر را با اسلش جایگزین میکند.
- splitlines
- هر متنی. متن را به فهرستی از خطوط تقسیم میکند.
- stringify
- هر نوعی. با تبدیل مقادیر به متن و الحاق آنها، مقدار را به متن تبدیل میکند.
- stripdir
- متن را به عنوان مسیر در نظر گرفته و در صورت امکان یک سطح دایرکتوری را حذف میکند. برای مثال، "foo" و "foo/bar" به "foo" تبدیل میشوند.
- tabindent
- هر متنی. متن را بازمیگرداند، بهطوری که تمام خطوط غیرخالی بهجز خط اول با یک نویسهی تب آغاز میشوند.
- upper
- هر متنی. متن را به حروف بزرگ تبدیل میکند.
- urlescape
- هر متنی. تمام نویسههای «خاص» را اسکیپ میکند. برای مثال، "foo bar" به "foo%20bar" تبدیل میشود.
- user
- هر متنی. نمایشی کوتاه از یک نام کاربری یا نشانی ایمیل را برمیگرداند.
- utf8
- هر متنی. از رمزگذاری محلی نویسهها به UTF-8 تبدیل میکند.
توجه داشته باشید که یک فیلتر چیزی جز یک فراخوانی تابع نیست، یعنی expr|filter معادل filter(expr) است..SS "توابع (FUNCTIONS)"
علاوه بر فیلترها، تعدادی تابع توکار پایهای نیز وجود دارد:
- config(section, name[, default])
- گزینهٔ پیکربندی درخواستی در hgrc را به صورت یک رشته بازمیگرداند.
- configbool(section, name[, default])
- گزینهٔ پیکربندی درخواستی در hgrc را به صورت یک مقدار بولی بازمیگرداند.
- configint(section, name[, default])
- گزینهٔ پیکربندی درخواستی در hgrc را به صورت یک عدد صحیح بازمیگرداند.
- date(date[, fmt])
- قالببندی یک تاریخ. رشتهٔ قالب از قالب strftime در Python استفاده میکند. حالت پیشفرض یک قالب تاریخ یونیکس، شامل منطقهٔ زمانی است: "Mon Sep 04 15:13:13 2006 0700".
- dict([[key=]value...])
- ساخت یک dict از جفتهای کلید-مقدار. در صورتی که عبارتِ مقدار بتواند نامی بدون ابهام ارائه دهد، میتوان از کلید صرفنظر کرد.
- diff([includepattern [, excludepattern]])
- نمایش یک diff، به صورت اختیاری با مشخص کردن فایلهایی برای لحاظ کردن یا مستثنی کردن.
- files(pattern)
- تمام فایلهای مجموعهتغییر (changeset) جاری که با الگو مطابقت دارند. به hg help patterns مراجعه کنید.
- fill(text[, width[, initialident[, hangindent]]])
- پر کردن چندین پاراگراف با تورفتگی اختیاری. فیلتر "fill" را ببینید.
- filter(iterable[, expr])
- حذف عناصر خالی از یک list یا یک dict. اگر expr مشخص شده باشد، برای آزمایش خالی بودن روی هر عنصر اعمال میشود.
- get(dict, key)
- دریافت یک صفت/کلید از یک شیء. برخی از کلیدواژهها از نوعهای پیچیده هستند. این تابع امکان دریافت مقدار یک صفت را در این نوعها فراهم میکند.
- if(expr, then[, else])
- اجرای شرطی بر پایهٔ نتیجهٔ یک عبارت.
- ifcontains(needle, haystack, then[, else])
- اجرای شرطی بر پایهٔ اینکه آیا مورد "needle" در "haystack" وجود دارد یا خیر.
- ifeq(expr1, expr2, then[, else])
- اجرای شرطی بر پایهٔ اینکه آیا ۲ مورد با یکدیگر معادل هستند یا خیر.
- indent(text, indentchars[, firstline])
- ایجاد تورفتگی در تمام خطوط غیرخالی با نویسههای ارائهشده در رشتهٔ indentchars. پارامتر اختیاری سوم، در صورت وجود، تورفتگی را تنها برای خط نخست بازنویسی میکند.
- join(list, sep)
- اتصال موارد موجود در یک لیست با یک جداکننده.
- label(label, expr)
- اعمال یک برچسب (label) به محتوای تولیدشده. محتوایی که برچسب بر آن اعمال شده باشد میتواند مشمول پردازشهای ثانویه مانند رنگآمیزی خودکار شود. برای دریافت اثرات، برچسبها باید دارای یک نقطه باشند، مانند log.secret یا branch.active.
- latesttag([pattern])
- برچسبهای سراسری (global tags) مطابق با الگوی ارائهشده در جدیدترین نیاکان برچسبخوردهٔ سراسری این مجموعهتغییر. اگر چنین برچسبی وجود نداشته باشد، قالب "{tag}" به رشتهٔ "null" تبدیل میشود. برای نحو الگو به hg help revisions.patterns مراجعه کنید.
- localdate(date[, tz])
- تبدیل یک تاریخ به منطقهٔ زمانی مشخصشده. پیشفرض، تاریخ محلی است.
- بازگرداندن نویسنده (author)، بهروزشده بر اساس مقدار تعیینشده در فایل .mailmap
- max(iterable)
- بازگرداندن بیشینهٔ یک شیء تکرارپذیر (iterable)
- min(iterable)
- بازگرداندن کمینهٔ یک شیء تکرارپذیر (iterable)
- mod(a, b)
- محاسبهٔ a mod b بهگونهای که a / b + a mod b == a باشد
- pad(text, width[, fillchar=' '[, left=False[, truncate=False]]])
- تراز و پر کردن متن با یک نویسهٔ پرکننده.
- relpath(path)
- تبدیل یک مسیر مطلقِ مخزن به یک مسیر در سیستمفایل که نسبت به دایرکتوری کاری جاری نسبی است.
- revset(query[, formatargs...])
- اجرای یک پرسوجوی مجموعهٔ بازبینی (revset). به hg help revset مراجعه کنید.
- rstdoc(text, style)
- قالببندی reStructuredText.
- search(pattern, text)
- جستوجو برای اولین متنی که با الگوی عبارت منظم مطابقت دارد. گروهها به صورت {1}، {2}، ... در قالبهای نگاشتشده با % در دسترس هستند.
- separate(sep, args...)
- افزودن یک جداکننده میان آرگومانهای غیرخالی.
- shortest(node, minlength=4)
- به دست آوردن کوتاهترین نمایش از یک گره (node).
- startswith(pattern, text)
- اگر مقدار آرگومان "text" با محتوای آرگومان "pattern" آغاز شود، آن را بازمیگرداند.
- strip(text[, chars])
- حذف نویسهها از یک رشته. بهطور پیشفرض، تمام فاصلههای سفید ابتدا و انتهای رشته را حذف میکند.
- sub(pattern, replacement, expression)
- انجام جایگزینی متن با استفاده از عبارتهای باقاعده.
- subsetparents(rev, revset)
- یافتن والدین rev در زیرگراف ارائهشده توسط revset.
- word(number, text[, separator])
- بازگرداندن
n-اُمین
کلمه از یک
رشته.
مجموعه محدودی از عملیات حسابی میانوند بر روی اعداد صحیح ارائه شده است:
+ برای جمع - برای تفریق * برای ضرب / برای تقسیم کف (تقسیم گرد شده به نزدیکترین عدد صحیح به سمت -بینهایت)
تقسیم از رابطه x = x / y + mod(x, y) پیروی میکند.
همچنین برای هر عبارتی که یک لیست برمیگرداند، یک عملگر لیست وجود دارد:
expr % "{template}"همانطور که در مثال بالا مشاهده میشود، {template} به عنوان یک الگو تفسیر میشود. برای جلوگیری از تفسیر شدن آن، میتوانید از نویسه گریز \{ یا پیشوند رشته خام، r'...' استفاده کنید.
از عملگر نقطه میتوان به عنوان روشی کوتاه برای دسترسی به یک زیرآیتم استفاده کرد:
- در صورتی که expr مقداری غیر از لیست/دیکشنری برگرداند، expr.member تقریباً معادل expr % '{member}' است. مقدار بازگردانده شده به رشته تبدیل نمیشود.
- dict.key دقیقاً همانند get(dict, 'key') است.
نامهای مستعار (Aliases)
کلیدواژهها و توابع جدید را میتوان در بخش templatealias از یک فایل پیکربندی Mercurial تعریف کرد:
<alias> = <definition>
آرگومانهایی به شکل a1، a2 و غیره از نام مستعار درون تعریف جایگزین میشوند.
برای مثال،
[templatealias]
r = rev
rn = "{r}:{node|short}"
leftpad(s, w) = pad(s, w, ' ', True)
دو نماد مستعار r و rn و یک تابع مستعار leftpad() را تعریف میکند.
همچنین با استفاده از بخش templates، امکان مشخص کردن رشتههای الگوی کامل وجود دارد. نحو مورد استفاده، نحو عمومی رشتههای الگو است.
برای مثال،
[templates]
nodedate = "{node|short}: {date(date, "%Y-%m-%d")}\n"
الگویی به نام nodedate را تعریف میکند که میتواند به شکل زیر فراخوانی شود:
$ hg log -r . -Tnodedate
الگویی که در بخش templates تعریف شده است میتواند از یک الگوی دیگر نیز مورد ارجاع قرار گیرد:
$ hg log -r . -T "{rev} {nodedate}"
اما توجه داشته باشید که کلیدواژهها نمیتوانند توسط الگوها بازنویسی شوند. برای مثال، الگویی که به صورت templates.rev تعریف شده است نمیتواند به صورت {rev} ارجاع داده شود.
الگویی که در بخش templates تعریف شده است میتواند دارای زیرالگوهایی باشد که قبل، بعد، یا بین موارد درج میشوند:
[templates]
myjson = ' {dict(rev, node|short)|json}'
myjson:docheader = '\{\n'
myjson:docfooter = '\n}\n'
myjson:separator = ',\n'
چند نمونه از الگوهای خط فرمان:
-
قالببندی فهرستها، برای مثال فایلها: $ hg log -r 0 --template "files:\n{files % ' {file}\n'}" - اتصال
فهرست
فایلها با
«, »:
$ hg log -r 0 --template "files: {join(files, ', ')}\n" - اتصال
فهرست
فایلهای
پایانیافته
با «.py» با «, »:
$ hg log -r 0 --template "pythonfiles: {join(files('**.py'), ', ')}\n" - جداسازی
آرگومانهای
غیرخالی با
« »:
$ hg log -r 0 --template "{separate(' ', node, bookmarks, tags}\n" - تغییر هر خط
از توضیحات
کامیت:
$ hg log --template "{splitlines(desc) % '**** {line}\n'}" - قالببندی
تاریخ:
$ hg log -r 0 --template "{date(date, '%Y')}\n" - نمایش
تاریخ در
زمان UTC:
$ hg log -r 0 --template "{localdate(date, 'UTC')|date}\n" - نمایش
توضیحات با
تنظیم عرض
پرکردن (fill-width)
روی ۳۰
کاراکتر:
$ hg log -r 0 --template "{fill(desc, 30)}" - استفاده از
شرط برای
بررسی شاخه
پیشفرض (default):
$ hg log -r 0 --template "{ifeq(branch, 'default', 'on the main branch', 'on branch {branch}')}\n" - افزودن خط
جدید در
صورت خالی
نبودن:
$ hg tip --template "{if(author, '{author}\n')}" - برچسبگذاری
خروجی برای
استفاده با
افزونه color:
$ hg log -r 0 --template "{label('changeset.{phase}', node|short)}\n" - معکوس کردن
فیلتر firstline،
یعنی همه
چیز به جز
خط اول:
$ hg log -r 0 --template "{sub(r'^.*\n?\n?', '', desc)}\n" - نمایش
محتویات
فیلد 'extra'، هر
مورد در یک
خط:
$ hg log -r 0 --template "{join(extras, '\n')}\n" - نشانهگذاری
بوکمارک
فعال با '*':
$ hg log --template "{bookmarks % '{bookmark}{ifeq(bookmark, active, '*')} '}\n" - یافتن تگ
نسخه
کاندید
انتشار (RC)
قبلی،
فاصله و
تغییرات از
زمان آن تگ:
$ hg log -r . --template "{latesttag('re:^.*-rc$') % '{tag}, {changes}, {distance}'}\n" - نشانهگذاری
والد نسخه
کاری (working copy) با '@':
$ hg log --template "{ifcontains(rev, revset('.'), '@')}\n" - نمایش
جزئیات
بازبینیهای
والد (parent revisions):
$ hg log --template "{revset('parents(%d)', rev) % '{desc|firstline}\n'}" - نمایش تنها
توضیحات
کامیتی که
با «template» شروع
میشوند:
$ hg log --template "{startswith('template', firstline(desc))}\n" - چاپ اولین
کلمه از هر
خط پیام
کامیت:
$ hg log --template "{word(0, desc)}\n"نشانیهای وب (URL) معتبر به این صورت هستند:
local/filesystem/path[#revision] file://local/filesystem/path[#revision] http://[user[:pass]@]host[:port]/[path][#revision] https://[user[:pass]@]host[:port]/[path][#revision] ssh://[user@]host[:port]/[path][#revision] path://pathname
مسیرها در سیستمفایل محلی میتوانند به مخازن Mercurial یا به فایلهای bundle (همانطور که توسط hg bundle یا hg incoming --bundle ایجاد میشوند) اشاره کنند. همچنین hg help paths را ببینید.
یک شناسه اختیاری پس از # بیانگر یک شاخه (branch)، برچسب (tag) یا مجموعه تغییرات (changeset) خاص برای استفاده از مخزن دوردست است. همچنین hg help revisions را ببینید.
برخی قابلیتها، مانند ارسال (push) به نشانیهای http:// و https://، تنها زمانی ممکن هستند که این ویژگی بهطور صریح در کارساز دوردست Mercurial فعال شده باشد.
توجه داشته باشید که امنیت نشانیهای HTTPS به پیکربندی صحیح web.cacerts بستگی دارد.
چند نکته درباره استفاده از SSH با Mercurial:
- پروتکل SSH نیازمند یک حساب پوسته (shell) در دسترس روی دستگاه مقصد و وجود یک نسخه از hg در مسیر (path) دوردست یا تعیینشده با remotecmd است.
- مسیر (path)
بهطور
پیشفرض
نسبت به
دایرکتوری
خانگی
کاربر
دوردست
سنجیده
میشود.
برای مشخص
کردن یک
مسیر مطلق،
از یک اسلش
اضافی در
ابتدای
مسیر
استفاده
کنید:
ssh://example.com//tmp/repository
- ابزار Mercurial
فشردهسازی
اختصاصی
خود را روی SSH
به کار
نمیگیرد؛
شیوه درست
این است که
آن را در ~/.ssh/config
خود
پیکربندی
کنید، برای
نمونه:
Host *.mylocalnetwork.example.com Compression no Host * Compression yes
به عنوان روش جایگزین، میتوانید "ssh -C" را به عنوان دستور ssh در فایل پیکربندی خود یا با گزینه خط فرمان --ssh مشخص کنید.
تمام این نشانیها میتوانند در فایل پیکربندی شما با نامهای مستعار مسیر (path aliases) تحت بخش [paths] به شکل زیر ذخیره شوند:
[paths] alias1 = URL1 alias2 = URL2 ...
سپس میتوانید از این نام مستعار برای هر دستوری که از یک URL استفاده میکند بهره ببرید (برای نمونه با hg pull alias1 مانند hg pull URL1 رفتار خواهد شد).
دو نام مستعار مسیر ویژه هستند زیرا در صورت عدم ارائه URL به یک دستور، به عنوان پیشفرض استفاده میشوند:
- default:
- هنگامی که با hg clone یک مخزن ایجاد میکنید، دستور clone مکان مخزن مبدأ را به عنوان مسیر 'default' مخزن جدید ذخیره میکند. سپس زمانی که مسیر را در دستورهای مشابه push و pull (از جمله incoming و outgoing) حذف کنید، از این مقدار استفاده میشود.
- default-push:
- دستور push به دنبال مسیری با نام 'default-push' میگردد و در صورت تعریف هر دو، آن را بر 'default' ترجیح میدهد.
این نامهای مستعار همچنین میتوانند در طرحواره (scheme) path:// استفاده شوند:
[paths] alias1 = URL1 alias2 = path://alias1 ...
برای جزئیات درباره رفتار چنین "زیرمسیرهایی" (sub-path)، hg help config.paths را بررسی کنید..SH "افزونهها (EXTENSIONS)"
این بخش شامل راهنمای افزونههایی است که همراه با Mercurial توزیع میشوند. راهنمای سایر افزونهها در سامانهی راهنما در دسترس است.
absorb
اعمال تغییرات دایرکتوری کاری به تغییرگانها (آزمایشی)
افزونهی absorb دستوری فراهم میکند تا با استفاده از اطلاعات annotate، تکههای تغییریافته را به تغییرگانهای (changesets) غیرعمومی متناظر الحاق (amend) کند.
[absorb] # فقط بررسی حداکثر ۵۰ تغییرگان اخیر غیرعمومی max-stack-size = 50 # افزودن نویز به کامیتهای جدید برای جلوگیری از چرخهی منسوخشدگی add-noise = 1 # تبدیل `amend --correlated` به یک میانبر برای دستور اصلی amend-flag = correlated [color] absorb.description = yellow absorb.node = blue bold absorb.path = bold
دستورها (Commands)
ایجاد تغییر (Change creation)
absorb
ادغام اصلاحات در پشتهی تغییرگانهای پیشنویس (draft):
hg absorb [OPTION] [FILE]...
دستور absorb هر تغییر در دایرکتوری کاری شما را تحلیل کرده و تلاش میکند خطوط تغییریافته را به تغییرگانهایی در پشتهی شما الحاق کند که نخستینبار آن خطوط را معرفی کردهاند.
اگر absorb نتواند برای یک تغییر، یک تغییرگان بدون ابهام برای الحاق بیابد، آن تغییر دستنخورده در دایرکتوری کاری باقی خواهد ماند. سپس میتوان آنها را با hg status یا hg diff مشاهده کرد. به عبارت دیگر، absorb چیزی در دایرکتوری کاری نمینویسد.
تغییرگانهای خارج از revsetِ ::. and not public() and not merge() تغییر نخواهند کرد.
تغییرگانهایی که پس از اعمال تغییرات خالی شوند حذف خواهند شد.
بهطور پیشفرض، absorb کاری را که قصد انجام آن دارد نشان داده و برای تأیید سؤال میپرسد. اگر اطمینان دارید که تغییرات در جای درست جذب خواهند شد، hg absorb -a را برای اعمال فوری تغییرات اجرا کنید.
در صورت موفقیت 0، و اگر تمام تکهها نادیده گرفته شوند و چیزی الحاق نشود، 1 را برمیگرداند.
گزینهها:
- -a, --apply-changes
- اعمال تغییرات بدون درخواست تأیید
- -p, --print-changes
- همواره چاپ اینکه کدام تغییرگانها توسط کدام تغییرات اصلاح شدهاند
- -i, --interactive
- انتخاب تعاملی تکههایی که باید اعمال شوند
- -e, --edit-lines
- ویرایش اینکه چه خطوطی به کدام تغییرگانها تعلق دارند پیش از کامیت (آزمایشی)
- -n, --dry-run
- عملیاتی انجام نده، فقط خروجی را چاپ کن
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت الگو (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با الگو
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینهی مشخصشده با [+] میتواند چندین بار مشخص شود.SS acl
قلابهایی برای کنترل دسترسی به مخزن
این قلاب امکان مجاز یا رد کردن دسترسی نوشتن به شاخهها و مسیرهای مشخصی از یک مخزن را هنگام دریافت مجموعهتغییرات (changesets) ورودی از طریق pretxnchangegroup و pretxncommit فراهم میکند.
اعتبارسنجی دسترسی بر اساس نام کاربری محلی در سیستمی که قلاب روی آن اجرا میشود تطبیق داده میشود، نه کامیتکنندهٔ (committer) مجموعهتغییرات اصلی (چرا که مورد اخیر صرفاً جنبهٔ اطلاعرسانی دارد).
قلاب acl بهتر است همراه با یک شل محدودشده مانند hgsh استفاده شود، تا از انجام هر کاری جز ارسال (push) یا دریافت (pull) توسط کاربران احرازهویتشده جلوگیری شود. این قلاب در صورتی که کاربران دسترسی تعاملی به شل داشته باشند ایمن نیست، زیرا میتوانند قلاب را غیرفعال کنند. همچنین در صورتی که کاربران از راه دور از یک حساب مشترک استفاده کنند ایمن نیست، زیرا در این صورت راهی برای تشخیص آنها از یکدیگر وجود ندارد.
ترتیب اجرای بررسیهای دسترسی به شرح زیر است:
- 1.
- فهرست رد برای شاخهها (بخش acl.deny.branches)
- 2.
- فهرست مجاز برای شاخهها (بخش acl.allow.branches)
- 3.
- فهرست رد برای مسیرها (بخش acl.deny)
- 4.
- فهرست مجاز برای مسیرها (بخش acl.allow)
بخشهای مجاز (allow) و رد (deny) جفتهای کلید-مقدار میپذیرند.
کنترل دسترسی مبتنی بر شاخه (Branch-based Access Control)
از بخشهای acl.deny.branches و acl.allow.branches برای برقراری کنترل دسترسی مبتنی بر شاخه استفاده کنید. کلیدها در این بخشها میتوانند یکی از موارد زیر باشند:
- یک نام شاخه، یا
- یک علامت ستاره (*)، برای تطبیق با هر شاخهای؛
مقادیر متناظر میتوانند یکی از موارد زیر باشند:
- فهرستی جداشده با کاما از کاربران و گروهها، یا
- یک علامت ستاره (*)، برای تطبیق با هر کسی؛
میتوانید پیشوند "!" را به نام یک کاربر یا گروه اضافه کنید تا مفهوم تطبیق معکوس شود.
کنترل دسترسی مبتنی بر مسیر (Path-based Access Control)
از بخشهای acl.deny و acl.allow برای برقراری کنترل دسترسی مبتنی بر مسیر استفاده کنید. کلیدها در این بخشها یک الگوی زیردرخت (بهطور پیشفرض با نحو glob) را میپذیرند. مقادیر متناظر از همان نحو سایر بخشهای بالا پیروی میکنند.
کنترل دسترسی مبتنی بر بوکمارک (Bookmark-based Access Control)
از بخشهای acl.deny.bookmarks و acl.allow.bookmarks برای برقراری کنترل دسترسی مبتنی بر بوکمارک استفاده کنید. کلیدها در این بخشها میتوانند یکی از موارد زیر باشند:
- یک نام بوکمارک، یا
- یک علامت ستاره (*)، برای تطبیق با هر بوکمارکی؛
مقادیر متناظر میتوانند یکی از موارد زیر باشند:
- فهرستی جداشده با کاما از کاربران و گروهها، یا
- یک علامت ستاره (*)، برای تطبیق با هر کسی؛
میتوانید پیشوند "!" را به نام کاربر یا گروه اضافه کنید تا مفهوم تطبیق معکوس شود.
نکته: در تعاملات میان کلاینتها و سرورهایی که از Mercurial 3.6+ استفاده میکنند، رد شدن عموماً کل ارسال (push) را رد خواهد کرد؛ اما در تعاملاتی که شامل کلاینتهای قدیمیتر است، تراکنشهای کامیت از قبل پذیرفته خواهند شد و فقط جابهجایی بوکمارک رد میشود..SS "گروهها (Groups)"
نامهای گروه باید دارای پیشوند نماد @ باشند. مشخص کردن نام یک گروه همان اثری را دارد که مشخص کردن همهٔ کاربران آن گروه دارد.
میتوانید اعضای گروه را در بخش acl.groups تعریف کنید. اگر نام گروهی در آنجا تعریف نشده باشد و Mercurial تحت یک سیستم شبه-یونیکس (Unix-like) در حال اجرا باشد، فهرست کاربران از سیستمعامل گرفته خواهد شد. در غیر این صورت، یک استثنا (exception) صادر خواهد شد.
پیکربندی نمونه (Example Configuration)
[hooks] # اگر میخواهید محدودیتهای دسترسی را در زمان commit بررسی کنید، # از این مورد استفاده کنید: pretxncommit.acl = python:hgext.acl.hook # اگر میخواهید محدودیتهای دسترسی را برای pull، push، # bundle و serve بررسی کنید، از این مورد استفاده کنید. pretxnchangegroup.acl = python:hgext.acl.hook [acl] # اجازه یا رد دسترسی برای تغییرات دریافتی تنها در صورتی که منبع آنها # در اینجا فهرست شده باشد؛ در غیر این صورت به آنها اجازهٔ عبور دهید. # منبع برای تمام دسترسیهای از راه دور (http یا ssh) مقدار "serve" است، # و هنگامی که دستورهای مربوطه به صورت محلی اجرا شوند "push"، "pull" یا # "bundle" است. # پیشفرض: serve sources = serve [acl.deny.branches] # دسترسی همه به شاخهٔ frozen-branch رد شده است: frozen-branch = * # دسترسی یک کاربر نامناسب در همهٔ شاخهها رد شده است: * = bad-user [acl.allow.branches] # چند کاربر در branch-a مجاز هستند: branch-a = user-1, user-2, user-3 # تنها یک کاربر در branch-b مجاز است: branch-b = user-1 # مدیر سیستم (super user) در هر شاخهای مجاز است: * = super-user # همه در branch-for-tests مجاز هستند: branch-for-tests = * [acl.deny] # این فهرست ابتدا بررسی میشود. در صورت یافتن تطابق، acl.allow # بررسی نمیشود. اگر acl.deny وجود نداشته باشد، به همهٔ کاربران دسترسی # اعطا میشود. # قالب برای هر دو فهرست: glob pattern = user, ..., @group, ... # برای تطابق با همه، از یک ستاره برای کاربر استفاده کنید: # my/glob/pattern = * # کاربر user6 دسترسی نوشتن به هیچ فایلی نخواهد داشت: ** = user6 # گروه "hg-denied" دسترسی نوشتن به هیچ فایلی نخواهد داشت: ** = @hg-denied # هیچکس قادر به تغییر "DONT-TOUCH-THIS.txt" نخواهد بود، علیرغم # اینکه همه قادر به تغییر تمام فایلهای دیگر هستند. زیر را ببینید. src/main/resources/DONT-TOUCH-THIS.txt = * [acl.allow] # اگر acl.allow وجود نداشته باشد، همهٔ کاربران به صورت پیشفرض مجازند # خالی بودن acl.allow = هیچ کاربری مجاز نیست # کاربر "doc_writer" دسترسی نوشتن به هر فایلی در پوشهٔ "docs" # را دارد: docs/** = doc_writer # کاربر "jack" و گروه "designers" دسترسی نوشتن به هر فایلی در # پوشهٔ "images" را دارند: images/** = jack, @designers # همه (به جز "user6" و "@hg-denied" - acl.deny در بالا را ببینید) # دسترسی نوشتن به هر فایلی در پوشهٔ "resources" را خواهند داشت # (به جز ۱ فایل. acl.deny را ببینید): src/main/resources/** = * .hgtags = release_engineer فرض کنید شاخهای وجود دارد که تنها یک کاربر (یا گروه) مشخص باید بتواند تغییرات را به آن ارسال (push) کند، و شما نمیخواهید دسترسی به شاخههای دیگری را که ممکن است ایجاد شوند محدود کنید. پیشوند "!" به شما این امکان را میدهد تا از ارسال مجموعهتغییرات (changesetها) در یک شاخه یا مسیر مشخص توسط هر کسی به جز یک کاربر یا گروه معین جلوگیری کنید. در مثالهای زیر: ۱) دسترسی به شاخه "ring" را برای همه به جز کاربر "gollum" رد میکنیم ۲) دسترسی به شاخه "lake" را برای همه به جز اعضای گروه "hobbit" رد میکنیم ۳) دسترسی به یک فایل را برای همه به جز کاربر "gollum" رد میکنیم [acl.allow.branches] # Empty [acl.deny.branches] # 1) only 'gollum' can commit to branch 'ring'; # 'gollum' and anyone else can still commit to any other branch. ring = !gollum # 2) only members of the group 'hobbit' can commit to branch 'lake'; # 'hobbit' members and anyone else can still commit to any other branch. lake = !@hobbit # You can also deny access based on file paths: [acl.allow] # Empty [acl.deny] # 3) only 'gollum' can change the file below; # 'gollum' and anyone else can still change any other file. /misty/mountains/cave/ring = !gollum
amend
ارائه دستور amend (آزمایشی)
این افزونه دستور amend را فراهم میکند که مشابه commit --amend است اما ویرایشگری را باز نمیکند.
دستورها (Commands)
ایجاد تغییرات (Change creation)
amend
اصلاح والد رونوشت کاری با تمام یا بخشی از تغییرات معوق مشخصشده:
hg amend [OPTION]... [FILE]...
مشابه hg commit --amend، اما استفاده مجدد از پیام کامیت بدون فراخوانی ویرایشگر، مگر اینکه --edit مشخص شده باشد.
برای جزئیات بیشتر به hg help commit مراجعه کنید.
گزینهها:
- -A, --addremove
- علامتگذاری فایلهای جدید/ناموجود به عنوان اضافهشده/حذفشده پیش از کامیت
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای کامیت
- -i, --interactive
- استفاده از حالت تعاملی
- --close-branch
- علامتگذاری یک شاخه به عنوان بستهشده و پنهان کردن آن از فهرست شاخهها
- -s, --secret
- استفاده از فاز secret برای کامیت
- --draft
- استفاده از فاز draft برای کامیت
- -n,--note <VALUE>
- ذخیره یک یادداشت بر روی amend
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام کامیت
- -l,--logfile <FILE>
- خواندن پیام کامیت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ کامیت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان کامیتکننده
- -D, --currentdate
- ثبت تاریخ فعلی به عنوان تاریخ کامیت
- -U, --currentuser
- ثبت کاربر فعلی به عنوان کامیتکننده
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد.SS automv
بررسی جابهجاییهای ثبتنشده در زمان کامیت (آزمایشی)
این افزونه در زمان commit/amend بررسی میکند که آیا فایلی از فایلهای کامیتشده از یک mv ثبتنشده ناشی میشود یا خیر.
آستانهای که در آن یک فایل به عنوان جابهجایی در نظر گرفته میشود را میتوان با گزینه پیکربندی automv.similarity تعیین کرد. این گزینه درصدی بین 0 (غیرفعال) و 100 (فایلها باید یکسان باشند) میپذیرد؛ مقدار پیشفرض 95 است.
beautifygraph
زیباسازی خروجی log -G با استفاده از نویسههای یونیکد (آزمایشی)
به یک ترمینال با پشتیبانی از UTF-8 و متن تکعرض (monospace) باریک نیاز است.
blackbox
ثبت رویدادهای مخزن در یک جعبه سیاه (blackbox) برای اشکالزدایی
اطلاعات رویدادها را برای کمک به اشکالزدایی و عیبیابی مشکلات در .hg/blackbox.log ثبت میکند. رویدادهایی که ثبت میشوند را میتوان از طریق کلیدهای پیکربندی blackbox.track و blackbox.ignore تنظیم کرد.
مثالها:
[blackbox] track = * ignore = pythonhook # گزینه dirty بسیار سنگین (کُند) است؛ # هر مدخل لاگ در صورتی که مخزن دستکاری شده (dirty) باشد، مانند :hg:`id` علامت `+` را نشان میدهد. dirty = True # ثبت منبع پیامهای لاگ logsource = True [blackbox] track = command, commandfinish, commandexception, exthook, pythonhook [blackbox] track = incoming [blackbox] # محدود کردن اندازه فایل لاگ maxsize = 1.5 MB # چرخش حداکثر N فایل لاگ هنگامی که فایل فعلی بیش از اندازه بزرگ شود maxfiles = 3 [blackbox] # گنجاندن میکروثانیه در ورودیهای لاگ با %f (تابع datetime.datetime.strftime پایتون را ببینید) date-format = %Y-%m-%d @ %H:%M:%S.%f
دستورها (Commands)
نگهداری مخزن (Repository maintenance)
blackbox
مشاهده رویدادهای اخیر مخزن:
hg blackbox [OPTION]...
مشاهده رویدادهای اخیر مخزن
گزینهها:
- -l,--limit <VALUE>
- تعداد رویدادها برای نمایش (پیشفرض: 10)
bookflow
پیادهسازی انشعاب مبتنی بر نشانک (آزمایشی)
- ایجاد شاخههای جدید را غیرفعال میکند (پیکربندی: enable_branches=False).
- هنگام کامیت به یک نشانک فعال نیاز دارد (پیکربندی: require_bookmark=True).
- نشانک فعال را هنگام بروزرسانی جابهجا نمیکند، بلکه فقط هنگام کامیت جابهجا میکند.
- برای جابهجا کردن یک نشانک موجود به '--rev' نیاز دارد.
- از نشانکهای ویژه محافظت میکند (پیکربندی: protect=@).
دستورهای مرتبط با جریان کاری (flow)
- hg book NAME
- ایجاد یک نشانک جدید
- hg book NAME -r REV
- انتقال نشانک به بازنگری (fast-forward)
- hg up|co NAME
- جابهجایی به نشانک
- hg push -B .
- ارسال (push) نشانک فعال
قلابها برای یکپارچهسازی با سامانهٔ ردیابی باگ Bugzilla
این افزونهٔ قلاب، هنگامی که مجموعهتغییرهایی (changeset) که از طریق شناسهٔ Bugzilla به باگها ارجاع میدهند دیده شوند، دیدگاههایی روی باگها در Bugzilla درج میکند. این دیدگاه با استفاده از سازوکار الگوی Mercurial قالببندی میشود.
ارجاعات باگ میتوانند بهصورت اختیاری شامل بهروزرسانی ساعات صرفشده برای کار روی باگ برای Bugzilla باشند. همچنین میتوان باگها را به عنوان رفعشده علامتگذاری کرد.
چهار حالت پایه برای دسترسی به Bugzilla فراهم شده است:
- 1.
- دسترسی از طریق REST-API مربوط به Bugzilla. نیازمند Bugzilla نسخهٔ 5.0 یا بالاتر است.
- 2.
- دسترسی از طریق رابط XMLRPC مربوط به Bugzilla. نیازمند Bugzilla نسخهٔ 3.4 یا بالاتر است.
- 3.
- بررسی دادهها از طریق رابط XMLRPC مربوط به Bugzilla و ارسال تغییرات باگ از طریق ایمیل به رابط ایمیل Bugzilla. نیازمند Bugzilla نسخهٔ 3.4 یا بالاتر است.
- 4.
- نوشتن مستقیم در پایگاهدادهٔ Bugzilla. تنها از نصبهای Bugzilla که از MySQL استفاده میکنند پشتیبانی میشود. نیازمند Python MySQLdb است.
نوشتن مستقیم در پایگاهداده در برابر تغییرات شِما (schema) آسیبپذیر است و برای ارسال ایمیلهای اعلان تغییر باگ، به یک اسکریپت contrib در Bugzilla متکی است. این اسکریپت با کاربری که Mercurial را اجرا میکند اجرا میشود، باید روی میزبانی که Bugzilla روی آن نصب است اجرا شود، و نیازمند مجوز خواندن جزئیات پیکربندی Bugzilla و نام کاربری و گذرواژهٔ لازم MySQL برای داشتن حق دسترسی کامل به پایگاهدادهٔ Bugzilla است. به این دلایل، این حالت دسترسی اکنون منسوخ در نظر گرفته میشود و در آینده برای نسخههای جدید Bugzilla بهروزرسانی نخواهد شد. در این حالت دسترسی تنها افزودن دیدگاهها پشتیبانی میشود.
دسترسی از طریق XMLRPC مستلزم تعیین نام کاربری و گذرواژهٔ Bugzilla در پیکربندی است. دیدگاهها تحت آن نام کاربری افزوده میشوند. از آنجا که پیکربندی باید توسط تمامی کاربران Mercurial خواندنی باشد، توصیه میشود دسترسیهای آن کاربر در Bugzilla به حداقل لازم برای افزودن دیدگاه محدود شود. علامتگذاری باگها به عنوان رفعشده نیازمند Bugzilla نسخهٔ 4.0 و بالاتر است.
دسترسی از طریق XMLRPC/email از XMLRPC برای پرسوجوی Bugzilla استفاده میکند، اما برای ثبت دیدگاهها روی باگها، به رابط ایمیل Bugzilla ایمیل ارسال میکند. نشانی From: در ایمیل روی نشانی ایمیل کاربر Mercurial تنظیم میشود، بهگونهای که به نظر میرسد دیدگاه از سوی کاربر Mercurial ارسال شده است. در صورتی که ایمیل کاربر Mercurial توسط Bugzilla به عنوان کاربر Bugzilla شناخته نشود، ایمیل مرتبط با نام کاربری Bugzilla که برای ورود به Bugzilla استفاده شده، بهجای آن به عنوان منبع دیدگاه استفاده میشود. علامتگذاری باگها به عنوان رفعشده در تمام نسخههای پشتیبانیشدهٔ Bugzilla کار میکند.
دسترسی از طریق REST-API مستلزم تعیین نام کاربری و گذرواژهٔ Bugzilla یا یک apikey در پیکربندی است. دیدگاهها تحت نام کاربری ارائهشده یا کاربر مرتبط با apikey در Bugzilla ثبت میشوند.
موارد پیکربندی مشترک میان تمامی حالتهای دسترسی:
- bugzilla.version
- نوع دسترسی مورد استفاده. مقادیر شناختهشده عبارتند از:
- restapi
-
رابط Bugzilla REST-API، در Bugzilla نسخهٔ 5.0 و بالاتر.
- xmlrpc
-
رابط Bugzilla XMLRPC.
- xmlrpc+email
-
رابطهای XMLRPC و ایمیل Bugzilla.
- 3.0
-
دسترسی MySQL، در Bugzilla نسخهٔ 3.0 و بالاتر.
- 2.18
-
دسترسی MySQL، در Bugzilla نسخهٔ 2.18 تا قبل از نسخهٔ 3.0 (شامل 3.0 نمیشود).
- 2.16
-
دسترسی MySQL، در Bugzilla نسخهٔ 2.16 تا قبل از نسخهٔ 2.18 (شامل 2.18 نمیشود).
- bugzilla.regexp
- عبارت باقاعده برای تطبیق شناسههای باگ جهت بهروزرسانی در پیام کامیت مجموعهتغییر. این عبارت باید شامل یک گروه نامدار «()» بهصورت <ids> باشد که شناسههای باگ را جداشده با نویسههای غیررقم در خود داشته باشد. همچنین میتواند شامل یک گروه نامدار <hours> با یک عدد ممیز شناور باشد که ساعات کار روی باگ را نشان میدهد. اگر هیچ گروه نامداری وجود نداشته باشد، فرض میشود که نخستین گروه «()» شامل شناسههای باگ است و زمان کار بهروزرسانی نمیشود. عبارت پیشفرض با Bug 1234، Bug no. 1234، Bug number 1234، Bugs 1234,5678، Bug 1234 and 5678 و گونههای مختلف آنها تطبیق مییابد، که به دنبال آن یک مقدار ساعت با پیشوند h یا hours میآید؛ مانند hours 1.5. تطبیق نسبت به بزرگی و کوچکی حروف حساس نیست.
- bugzilla.fixregexp
- عبارت باقاعده برای تطبیق شناسههای باگ به منظور علامتگذاری به عنوان رفعشده در پیام کامیت مجموعهتغییر. این باید شامل یک گروه نامدار «()» بهصورت <ids>` باشد که شناسههای باگ را جداشده با نویسههای غیررقم در خود داشته باشد. همچنین میتواند شامل یک گروه نامدار ``<hours> با یک عدد ممیز شناور باشد که ساعات کار روی باگ را نشان میدهد. اگر هیچ گروه نامداری وجود نداشته باشد، فرض میشود نخستین گروه «()» شامل شناسههای باگ است و زمان کار بهروزرسانی نمیشود. عبارت پیشفرض با Fixes 1234، Fixes bug 1234، Fixes bugs 1234,5678، Fixes 1234 and 5678 و گونههای مختلف آنها تطبیق مییابد، که به دنبال آن یک مقدار ساعت با پیشوند h یا hours میآید؛ مانند hours 1.5. تطبیق نسبت به بزرگی و کوچکی حروف حساس نیست.
- bugzilla.fixstatus
- وضعیتی که هنگام علامتگذاری باگ به عنوان رفعشده روی آن تنظیم میشود. پیشفرض RESOLVED است.
- bugzilla.fixresolution
- راهحلی (resolution) که هنگام علامتگذاری باگ به عنوان رفعشده روی آن تنظیم میشود. پیشفرض FIXED است.
- bugzilla.style
- فایل شیوهنامه (style) برای استفاده هنگام قالببندی دیدگاهها.
- bugzilla.template
- الگوی مورد استفاده هنگام قالببندی دیدگاهها. در صورت تعیین، اولویت بالاتری نسبت به style دارد. افزون بر کلیدواژههای معمول Mercurial، این افزونه موارد زیر را تعریف میکند:
- {bug}
-
شناسهٔ باگ در Bugzilla.
- {root}
-
نام مسیر کامل مخزن Mercurial.
- {webroot}
-
نام مسیر تفکیکشده و کوتاهشدهٔ مخزن Mercurial.
- {hgweb}
-
نشانی URL پایه برای مرور مخازن Mercurial.
پیشفرض: changeset {node|short} in repo {root} refers to bug {bug}.\ndetails:\n\t{desc|tabindent}
- bugzilla.strip
- تعداد نویسههای جداکنندهٔ مسیر که برای تولید {webroot} باید از ابتدای مسیر مخزن Mercurial ({root} در الگوها) حذف شوند. برای نمونه، مخزنی با {root} برابر با /var/local/my-project با مقدار strip برابر با 2، مقدار my-project را برای {webroot} تولید میکند. پیشفرض 0 است.
- web.baseurl
- نشانی URL پایه برای مرور مخازن Mercurial. در الگوها با {hgweb} به آن ارجاع داده میشود.
موارد پیکربندی مشترک میان حالتهای دسترسی XMLRPC+email و MySQL:
- bugzilla.usermap
- مسیر فایلی
شامل نگاشت
ایمیل
کامیتکننده
در Mercurial به
ایمیل
کاربر Bugzilla. در
صورت
تعیین، این
فایل باید
در هر خط
شامل یک
نگاشت
باشد:.sp
committer = Bugzilla user
همچنین بخش [usermap] را ببینید.
بخش [usermap] برای مشخصکردن نگاشتهای ایمیل ثبتکنندهٔ (committer) در Mercurial به ایمیل کاربر Bugzilla استفاده میشود. همچنین bugzilla.usermap را ببینید. شامل مدخلهایی به شکل committer = Bugzilla user است.
پیکربندی حالت دسترسی XMLRPC و REST-API:
- bugzilla.bzurl
- نشانی اینترنتی (URL) پایه برای نصب Bugzilla. پیشفرض: http://localhost/bugzilla.
- bugzilla.user
- نام کاربری برای ورود به Bugzilla از طریق XMLRPC. پیشفرض bugs.
- bugzilla.password
- گذرواژه برای ورود به Bugzilla.
حالت دسترسی REST-API از گزینههای فهرستشده در بالا و همچنین موارد زیر استفاده میکند:
- bugzilla.apikey
- یک apikey تولیدشده روی نمونهٔ Bugzilla برای دسترسی به api. استفاده از apikey نیاز به ذخیرهٔ گزینههای user و password را برطرف میکند.
حالت دسترسی XMLRPC+email از موارد پیکربندی حالت دسترسی XMLRPC و همچنین موارد زیر استفاده میکند:
- bugzilla.bzemail
- نشانی ایمیل Bugzilla.
علاوه بر این، تنظیمات ایمیل Mercurial باید پیکربندی شود. مستندات موجود در hgrc(5)، بخشهای [email] و [smtp] را ببینید.
پیکربندی حالت دسترسی MySQL:
- bugzilla.host
- نام میزبانِ کارساز MySQL شامل پایگاهدادهٔ Bugzilla. پیشفرض localhost.
- bugzilla.db
- نام پایگاهدادهٔ Bugzilla در MySQL. پیشفرض bugs.
- bugzilla.user
- نام کاربری برای دسترسی به کارساز MySQL. پیشفرض bugs.
- bugzilla.password
- گذرواژه برای دسترسی به کارساز MySQL.
- bugzilla.timeout
- مهلت زمانی اتصال پایگاهداده (به ثانیه). پیشفرض 5.
- bugzilla.bzuser
- نام کاربری یدکی Bugzilla برای ثبت دیدگاهها با آن، چنانچه ثبتکنندهٔ تغییرات (changeset committer) به عنوان کاربر Bugzilla یافت نشود.
- bugzilla.bzdir
- دایرکتوری نصب Bugzilla. در notify پیشفرض استفاده میشود. پیشفرض /var/www/html/bugzilla.
- bugzilla.notify
- دستوری که برای ارسال ایمیلهای اطلاعرسانیِ تغییر باگ توسط Bugzilla اجرا میشود. با استفاده از نگاشتی با ۳ کلید جایگزین میشود: bzdir، id (شناسه باگ) و user (ایمیل Bugzilla ثبتکننده). پیشفرض به نسخه بستگی دارد؛ از نگارش 2.18 به صورت "cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s" است.
فعالسازی افزونه:
[extensions] bugzilla = [hooks] # run bugzilla hook on every change pulled or pushed in here incoming.bugzilla = python:hgext.bugzilla.hook
پیکربندیهای نمونه:
پیکربندی نمونهٔ XMLRPC. این پیکربندی از Bugzilla در http://my-project.org/bugzilla استفاده کرده و با کاربر bugmail@my-project.org و گذرواژهٔ plugh وارد میشود. این تنظیم همراه با مجموعهای از مخازن Mercurial در /var/local/hg/repos/ و با یک رابط وب در http://my-project.org/hg به کار میرود.
[bugzilla]
bzurl=http://my-project.org/bugzilla
user=bugmail@my-project.org
password=plugh
version=xmlrpc
template=Changeset {node|short} in {root|basename}.
{hgweb}/{webroot}/rev/{node|short}\n
{desc}\n
strip=5
[web]
baseurl=http://my-project.org/hg
پیکربندی نمونهٔ XMLRPC+email. این پیکربندی از Bugzilla در http://my-project.org/bugzilla استفاده کرده و با کاربر bugmail@my-project.org و گذرواژهٔ plugh وارد میشود. این تنظیم همراه با مجموعهای از مخازن Mercurial در /var/local/hg/repos/ و با یک رابط وب در http://my-project.org/hg به کار میرود. دیدگاههای باگ به نشانی ایمیل Bugzilla یعنی bugzilla@my-project.org ارسال میشوند.
[bugzilla]
bzurl=http://my-project.org/bugzilla
user=bugmail@my-project.org
password=plugh
version=xmlrpc+email
bzemail=bugzilla@my-project.org
template=Changeset {node|short} in {root|basename}.
{hgweb}/{webroot}/rev/{node|short}\n
{desc}\n
strip=5
[web]
baseurl=http://my-project.org/hg
[usermap]
user@emaildomain.com=user.name@bugzilladomain.com
پیکربندی نمونهٔ MySQL. این پیکربندی دارای یک نسخهٔ نصبشدهٔ محلی از Bugzilla 3.2 در /opt/bugzilla-3.2 است. پایگاهدادهٔ MySQL روی localhost قرار دارد، نام پایگاهدادهٔ Bugzilla برابر با bugs است و به MySQL با نام کاربری MySQL برابر با bugs و گذرواژهٔ XYZZY دسترسی پیدا میشود. این تنظیم همراه با مجموعهای از مخازن Mercurial در /var/local/hg/repos/ و با یک رابط وب در http://my-project.org/hg به کار میرود.
[bugzilla]
host=localhost
password=XYZZY
version=3.0
bzuser=unknown@domain.com
bzdir=/opt/bugzilla-3.2
template=Changeset {node|short} in {root|basename}.
{hgweb}/{webroot}/rev/{node|short}\n
{desc}\n
strip=5
[web]
baseurl=http://my-project.org/hg
[usermap]
user@emaildomain.com=user.name@bugzilladomain.com
تمام موارد فوق یادداشتی به این شکل به گزارش باگ Bugzilla اضافه میکنند:
Changeset 3b16791d6642 in repository-name.
http://my-project.org/hg/repository-name/rev/3b16791d6642
Changeset commit comment. Bug 1234.
censor
پاک کردن محتوای فایل در یک بازنگری مشخص
دستور censor به Mercurial دستور میدهد تا تمام محتوای یک فایل را در یک بازنگری مشخص بدون بهروزرسانی هش مجموعه تغییرات (changeset hash) پاک کند. این امر اجازه میدهد تا تاریخچهٔ موجود معتبر باقی بماند، در حالی که از دریافت دادههای پاکشده در cloneها/pullهای بعدی جلوگیری میکند.
کاربردهای متداول censor به دلیل الزامات امنیتی یا قانونی است، از جمله:
* گذرواژهها، کلیدهای خصوصی، دادههای رمزنگاری * دادهها/کدها/کتابخانههای دارای مجوزی که مدت اعتبار مجوز آنها منقضی شده است * اطلاعات شناسایی هویتی اشخاص (PII) یا سایر دادههای محرمانه
گرههای سانسورشده (censored nodes) میتوانند هر زمان که دادههای حذفشده نیاز به بازیابی فیزیکی (materialize) داشته باشند، عملیات معمول mercurial را مختل کنند. برخی از دستورها، مانند hg cat/hg revert، هنگامی که درخواست تولید دادههای سانسورشده را دارند صرفاً با شکست مواجه میشوند. دستورهای دیگر، مانند hg verify و hg update، باید قادر به تحمل دادههای سانسورشده باشند تا بتوانند به کارکرد معنادار خود ادامه دهند. اینگونه دستورها تنها فایل سانسورشده را تحمل میکنند، چرا که داشتن نسخهٔ سانسورشده در یک checkout غیرعملی است. بازنگریهای سر (head) فعلی مخزن بررسی میشوند؛ اگر بازنگری مورد نظر برای سانسور در هر یک از آنها باشد، دستور لغو خواهد شد. میتوانید این رفتار را با استفاده از گزینهٔ زیر پیکربندی کنید:
- censor.policy
-
کنترل نحوهٔ واکنش هنگام دسترسی به محتوای سانسورشده. مقادیر پذیرفتهشده: "abort"، "ignore". پیشفرض: abort.
چند دستور اطلاعرسانی مانند hg grep دادههای سانسورشده را بدون قید و شرط نادیده میگیرند و صرفاً مواجهه با آنها را گزارش میکنند.
دستورها (Commands)
نگهداری مخزن (Repository maintenance)
censor
hg censor -r REV [-t TEXT] [FILE]
گزینهها:
- -r,--rev <REV[+]>
- سانسور فایل از بازنگری مشخصشده
- --check-heads
- بررسی اینکه سرهای (heads) مخزن متأثر نشده باشند (پیشفرض: True)
- -t,--tombstone <TEXT>
- دادههای جایگزین نشانگر حذف (tombstone)
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS children
دستور برای نمایش مجموعهتغییرات فرزند (منسوخشده)
این افزونه منسوخ شده است. در عوض باید از hg log -r "children(REV)" استفاده کنید.
دستورها
ناوبری تغییرات
children
نمایش فرزندان بازبینی دادهشده یا دایرکتوری کاری:
hg children [-r REV] [FILE]
فرزندان بازبینیهای دایرکتوری کاری را چاپ میکند. اگر بازبینی از طریق -r/--rev داده شود، فرزندان آن بازبینی چاپ خواهند شد. اگر یک آرگومان فایل داده شود، بازبینیای که فایل آخرین بار در آن تغییر یافته است (پس از بازبینی دایرکتوری کاری یا آرگومانِ --rev در صورت ارائه) چاپ میشود.
لطفاً در عوض از hg log استفاده کنید:
hg children => hg log -r "children(.)" hg children -r REV => hg log -r "children(REV)"
به hg help log و hg help revsets.children مراجعه کنید.
گزینهها:
- -r,--rev <REV>
- نمایش فرزندان بازبینی مشخصشده (پیشفرض: .)
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت قالب (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با قالب
churn
دستور برای نمایش آمار مربوط به تاریخچهٔ مخزن
دستورها
نگهداری مخزن
churn
هیستوگرام تغییرات در مخزن:
hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]
این دستور یک هیستوگرام را نشان میدهد که بیانگر تعداد خطوط یا بازبینیهای تغییریافته است و بر اساس قالب دادهشده گروهبندی میشود. قالب پیشفرض تغییرات را بر پایهٔ پدیدآورنده گروهبندی میکند. از گزینهٔ --dateformat میتوان برای گروهبندی نتایج بر اساس تاریخ استفاده کرد.
آمارها بر پایهٔ تعداد خطوط تغییریافته است، یا در صورتی که گزینهٔ --changesets مشخص شده باشد، بر اساس تعداد بازبینیهای منطبق خواهد بود.
مثالها:
# display count of changed lines for every committer
hg churn -T "{author|email}"
# display daily activity graph
hg churn -f "%H" -s -c
# display activity of developers by month
hg churn -f "%Y-%m" -s -c
# display count of lines changed in every year
hg churn -f "%Y" -s
# display count of lines changed in a time range
hg churn -d "2020-04 to 2020-09"
میتوان با ارائهٔ یک فایل با قالب زیر، نشانیهای ایمیل جایگزین را به یک نشانی اصلی نگاشت کرد:
<alias email> = <actual email>
چنین فایلی را میتوان با گزینهٔ --aliases مشخص کرد، در غیر این صورت فایل .hgchurn در ریشهٔ دایرکتوری کاری جستجو خواهد شد. نامهای مستعار از راستترین «=» تفکیک میشوند.
گزینهها:
- -r,--rev <REV[+]>
- شمارش نرخ برای بازبینی یا revset مشخصشده
- -d,--date <DATE>
- شمارش نرخ برای بازبینیهای منطبق با مشخصات تاریخ
- -t,--oldtemplate <TEMPLATE>
- قالب برای گروهبندی مجموعهتغییرات (منسوخشده)
- -T,--template <TEMPLATE>
- قالب برای گروهبندی مجموعهتغییرات (پیشفرض: {author|email})
- -f,--dateformat <FORMAT>
- قالب سازگار با strftime برای گروهبندی بر اساس تاریخ
- -c, --changesets
- شمارش نرخ بر اساس تعداد مجموعهتغییرات
- -s, --sort
- مرتبسازی بر اساس کلید (پیشفرض: مرتبسازی بر اساس تعداد)
- --diffstat
- نمایش جداگانهٔ خطوط اضافهشده/حذفشده
- --aliases <FILE>
- فایل حاوی نامهای مستعار ایمیل
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینهٔ علامتگذاریشده با [+] میتواند چند بار مشخص شود.SS clonebundles
اعلام بستههای از پیشتولیدشده برای بذردهی عملیاتهای clone
«clonebundles» یک افزونهٔ سمت سرور است که برای اعلام وجود فایلهای بستهٔ (bundle) از پیشتولیدشده و میزبانیشده در سرور خارجی به کارخواههایی (clients) که در حال اجرای clone هستند به کار میرود تا عملیات clone سریعتر، قابلاطمینانتر و با مصرف منابع کمتری در سمت سرور انجام شود. «pullbundles» قابلیتی مرتبط برای ارسال فایلهای بستهٔ از پیشتولیدشده به کارخواهها به عنوان بخشی از عملیات pull است.
همتاسازی (Cloning) میتواند عملیاتی سنگین از نظر مصرف پردازنده (CPU) و ورودی/خروجی (I/O) در سرورها باشد. بهطور سنتی، سرور در پاسخ به درخواست یک کارخواه برای clone، بهصورت پویا بستهای شامل تمام محتوای مخزن تولید کرده و آن را برای کارخواه ارسال میکند. هیچ حافظهٔ موقتی (caching) در سرور وجود ندارد و سرور ناچار است برای پاسخ به هر درخواست clone، همان بستهٔ خروجی تکراری را دوباره تولید کند. برای سرورهایی با مخازن بزرگ یا حجم بالای درخواستهای clone، بار حاصل از این عملیاتها میتواند مقیاسپذیری سرور را دشوار و پرهزینه کند.
این افزونه به مدیران سرور امکان میدهد تا بارِ کاریِ پرهزینهٔ clone را به یک سرویس خارجی محول کنند (offload). بستههای از پیشتولیدشده همچنین اجازه میدهند از فشردهسازیهای سنگینترِ پردازنده استفاده شود که این امر نیازمندیهای پهنای باند را بهطور مؤثری کاهش میدهد.
نحوهٔ کارکرد clone bundles به این صورت است:
- 1.
- مدیر سرور سازوکاری را برای دردسترس قرار دادن فایلهای بسته روی یک سرویس میزبانی ایجاد میکند تا کارخواههای Mercurial بتوانند آنها را دریافت کنند.
- 2.
- یک فایل مانیفست حاوی نشانیهای اینترنتی (URLs) بستههای موجود و برخی متادادههای اختیاری به مخزن Mercurial در سرور اضافه میشود.
- 3.
- یک کارخواه عملیات clone را در برابر سروری که از clone bundles آگاه است آغاز میکند.
- 4.
- کارخواه متوجه میشود که سرور در حال اعلام clone bundles است و مانیفستِ حاوی فهرست بستههای موجود را دریافت میکند.
- 5.
- کارخواه بستههای موجود را بر اساس مواردی که پشتیبانی میکند و ترجیح میدهد، پالایش (فیلتر) و مرتبسازی میکند.
- 6.
- کارخواه یک بستهٔ موجود را از URL مشخصشده توسط سرور بارگیری کرده و اعمال میکند.
- 7.
- کارخواه مجدداً به سرور اصلی متصل میشود و معادل hg pull را برای دریافت تمام دادههای مخزن که در بسته وجود ندارند اجرا میکند. (ممکن است مخزن در فاصلهٔ زمانی بین ایجاد بسته و شروع clone توسط کارخواه بهروزرسانی شده باشد.) این فرایند ممکن است از «pullbundles» استفاده کند.
به جای اینکه سرور برای هر درخواست clone بستههای کامل مخزن را تولید کند، بستههای کامل را یک بار تولید کرده و متعاقباً از آنها برای راهاندازی اولیهٔ همتاسازیهای جدید استفاده مجدد میشود. سرور همچنان ممکن است در زمان clone دادههایی را انتقال دهد؛ با این حال، این دادهها تنها مواردی هستند که پس از ایجاد بسته، اضافه یا تغییر یافتهاند. برای مخازن بزرگ و تثبیتشده، این امر میتواند بار سرور برای عملیاتهای clone را به کمتر از ۱٪ مقدار اولیه کاهش دهد.
نحوهٔ کارکرد pullbundles به این صورت است:
- 1.
- یک فایل مانیفست حاوی فهرست بستههای موجود و توصیف بازبینیها (revisions) به مخزن Mercurial در سرور اضافه میشود.
- 2.
- یک کارخواه به اندازهٔ کافی جدید به سرور اطلاع میدهد که از دریافتهای جزئی (partial pulls) پشتیبانی میکند و یک pull را آغاز میکند.
- 3.
- اگر pull bundles روی سرور فعال باشد و مشاهده کند که کارخواه از partial pulls پشتیبانی میکند، مانیفست را برای یافتن یک pull bundle منطبق بررسی میکند. یک بسته زمانی منطبق محسوب میشود که قالب آن توسط کارخواه پشتیبانی شود، کارخواه از قبل بازبینیهای لازم را داشته باشد و به مواردی از بسته نیز احتیاج داشته باشد.
- 4.
- اگر حداقل یک بستهٔ منطبق وجود داشته باشد، سرور آن را به کارخواه ارسال میکند.
- 5.
- کارخواه بسته را اعمال کرده و متوجه میشود که پاسخ سرور ناقص بوده است؛ سپس عملیات pull دیگری را آغاز میکند.
برای کارکرد صحیح، این افزونه موارد زیر را از مدیران سرور میطلبد:
- تولید فایلهای بسته از محتوای مخزن (معمولاً بهصورت دورهای، مانند یک بار در روز).
- برای Clone bundles: یک سرور فایل که کارخواهها دسترسی شبکهای به آن دارند و Python از طریق سازوکار عادی مدیریت URL خود با آن ارتباط برقرار میکند (معمولاً یک سرور HTTP/HTTPS).
- یک فرایند برای همگام نگه داشتن مانیفست بستهها با فایلهای بستهٔ موجود.
دقیقتر که بگوییم، استفاده از یک سرور میزبان فایلهای ایستا اجباری نیست: یک مدیر سرور میتواند از سرویسی پویا برای واکشی دادههای بسته استفاده کند. با این حال، سرویسهای میزبانی فایلهای ایستا ساده و مقیاسپذیر هستند و باید برای بیشتر نیازمندیها کافی باشند.
فایلهای بسته را میتوان با دستور hg bundle تولید کرد. معمولاً از hg bundle --all برای تولید بسته از کل مخزن استفاده میشود.
گزینهٔ bundlespec با عنوان stream (راهنمای hg help bundlespec را ببینید) میتواند برای تولید یک streaming clonebundle ویژه استفاده شود که معمولاً با دستور hg bundle --all --type="none-streamv2" انجام میگیرد. اینها فایلهای بستهای هستند که تولید و مصرف آنها بسیار بهینه (بخوانید: سریع) است. با این حال، حجم آنها از قالبهای سنتی بستهها بیشتر است و نیازمند آن هستند که کارخواهها دقیقاً از همان مجموعه قالبهای ذخیرهسازی دادهٔ مخزن که توسط مخزنِ تولیدکننده استفاده شده، پشتیبانی کنند. معمولاً یک سرور جدیدتر میتواند دادههایی سازگار با کارخواههای قدیمیتر ارائه دهد. با این حال، streaming clone bundles چنین تضمینی ندارند. مدیران سرور باید آگاه باشند که نسخههای جدیدتر Mercurial ممکن است streaming clone bundles نامتناسب و ناسازگار با نسخههای قدیمیتر Mercurial تولید کنند.
مدیر سرور مسئول ایجاد فایل .hg/clonebundles.manifest شامل فهرست فایلهای بستهٔ موجود و مناسب برای بذردهی به همتاسازیها است. اگر این فایل وجود نداشته باشد، مخزن در هنگام اتصال کارخواهها، وجود clone bundles را اعلام نخواهد کرد. برای pull bundles، از فایل .hg/pullbundles.manifest استفاده میشود.
فایل مانیفست شامل فهرستی از مدخلها است که با نویسهٔ خط جدید (n) از یکدیگر جدا شدهاند.
هر خط در این فایل یک بستهٔ موجود را تعریف میکند. خطوط دارای قالب زیر هستند:
<URL> [<key>=<value>[ <key>=<value>]]
یعنی یک URL و در ادامه فهرستی اختیاری و جداشده با فاصله (space) از جفتهای key=value که ویژگیهای اضافی این بسته را توصیف میکنند. هم کلیدها و هم مقادیر بهصورت URI کدگذاری (URI encoded) میشوند.
برای pull bundles، مقدار URL یک مسیر در داخل پوشهٔ .hg مخزن است.
کلیدهای با حروف بزرگ (UPPERCASE) برای استفادهٔ Mercurial رزرو شدهاند و در زیر تعریف شدهاند. تمام کلیدهای غیر بزرگ میتوانند توسط پیکربندیهای محلی استفاده شوند. یک نمونه استفاده از ویژگیهای سفارشی، استفاده از مشخصهٔ datacenter برای مشخص کردن این است که یک فایل در کدام مرکز داده میزبانی میشود. سپس کارخواهها میتوانند سروری را در نزدیکترین مرکز داده به خود ترجیح دهند.
کلیدهای رزروشدهٔ زیر در حال حاضر تعریف شدهاند:
- BUNDLESPEC
- یک رشتهٔ
«مشخصات
بسته» (bundle specification)
که نوع بسته
را توصیف
میکند.
اینها مقادیر رشتهای هستند که توسط آرگومان «--type» در دستور hg bundle پذیرفته میشوند.
این مقادیر در حالت سختگیرانه (strict mode) تجزیه میشوند، به این معنی که باید به صورت «<compression>-<type>» باشند. برای جزئیات بیشتر به mercurial.exchange.parsebundlespec() مراجعه کنید.
دستور hg debugbundle --spec میتواند برای چاپ رشتهٔ مشخصات بسته برای یک فایل بسته استفاده شود. خروجی این دستور میتواند عیناً برای مقدار BUNDLESPEC استفاده شود (از قبل اسکیپ شده است).
کارخواهها بهطور خودکار مشخصاتی را که ناشناخته یا پشتیبانینشده هستند فیلتر میکنند تا برای بارگیری چیزی که احتمالاً قابل اعمال نیست تلاشی نکنند.
مقدار واقعی، فراتر از مرحلهٔ پالایش تأثیری بر رفتار کارخواه ندارد: کارخواهها همچنان نوع بسته را از سرآیند (header) فایلهای بارگیریشده تشخیص میدهند.
استفاده از این کلید به شدت توصیه میشود، زیرا به کارخواهها اجازه میدهد بستههای پشتیبانینشده را بهراحتی نادیده بگیرند. اگر این کلید تعریف نشود، یک کارخواه قدیمی ممکن است برای اعمال بستهای که قادر به خواندن آن نیست تلاش کند..TP REQUIRESNI مشخص میکند که آیا برای اتصال به URL به قابلیت Server Name Indication (SNI) نیاز است یا خیر. قابلیت SNI به کارگزارها اجازه میدهد تا از چندین گواهی بر روی یک نشانی IP یکسان استفاده کنند. این ویژگی تا حدی در CDNها و دیگر ارائهدهندگان میزبانی متداول است. نگارشهای قدیمیتر Python از SNI پشتیبانی نمیکنند. تعریف این مشخصه به کلاینتهای دارای نگارشهای قدیمیتر Python امکان میدهد تا این ورودی را بدون مواجهه با خطای نامفهوم SSL در زمان برقراری اتصال فیلتر کنند.
اگر این مشخصه تعریف شده باشد، اعلان یک URL جایگزین بدون SNI ضروری است؛ در غیر این صورت ممکن است کلاینتهایی که نگارشهای قدیمی Python را اجرا میکنند قادر به شبیهسازی (clone) با استفاده از سازوکار clonebundles نباشند.
مقدار باید "true" باشد.
- REQUIREDRAM
- این مقدار،
نیازمندیهای
حافظهٔ
مورد
انتظار
برای
رمزگشایی
بار داده (payload)
را مشخص
میکند.
مقادیر
میتوانند
پسوندهایی
برای
اندازههای
بایت رایج
داشته
باشند؛
مانند "64MB".
این کلید اغلب برای دستههای فشردهشده با zstd استفاده میشود که از سطح فشردهسازی / اندازهٔ پنجرهٔ (window size) بالا بهره میبرند و ممکن است برای رمزگشایی به بیش از ۱۰۰ مگابایت حافظه نیاز داشته باشند.
- heads
- برای دستههای pull استفاده میشود. این ورودی شامل هشهای changeset مربوط به سرهای (heads) محتوای بسته است که با ; از هم جدا شدهاند.
- bases
- برای دستههای pull استفاده میشود. این ورودی شامل هشهای changeset مربوط به ریشههای محتوای بسته است که با ; از هم جدا شدهاند. اگر بسته بدون --base ایجاد شده باشد، میتوان از این مورد صرفنظر کرد.
مانیفستها میتوانند شامل چندین ورودی باشند. با فرض تعریف متادیتا، کلاینتها ورودیهایی را که پشتیبانی نمیکنند از مانیفست فیلتر خواهند کرد. ورودیهای باقیمانده را میتوان به صورت اختیاری بر اساس ترجیحات کلاینت (گزینهٔ پیکربندی ui.clonebundleprefers) مرتب کرد. سپس کلاینت تلاش میکند دسته را از نخستین URL موجود در فهرست باقیمانده واکشی کند.
خطاها در هنگام بارگیری دسته، کل عملیات clone را با شکست مواجه خواهند کرد: کلاینتها به طور خودکار به clone سنتی بازگشت (fall back) نمیکنند. دلیل این امر آن است که اگر یک کارگزار از دستههای clone استفاده میکند، احتمالاً به این دلیل است که این ویژگی برای کمک به مقیاسپذیری آن ضروری است. به عبارت دیگر، این فرض وجود دارد که بار clone به سرویس دیگری واگذار خواهد شد و کارگزار Mercurial مسئولیتی در قبال پاسخگویی به این بار clone ندارد. اگر آن سرویس دیگر دچار مشکل شود و کلاینتها به صورت انبوه به کارگزار اصلی Mercurial بازگردند، بار اضافی clone میتواند به دلیل بار غیرمنتظره کارگزار را زیر فشار شدید قرار داده و عملاً آن را از دسترس خارج کند. بازنگشتن خودکار کلاینتها به شبیهسازی از کارگزار اصلی، از بروز این سناریو جلوگیری میکند.
از آنجا که در صورت بروز خرابی در سرویس میزبانی دسته، هیچ بازگشت خودکاری به کارگزار Mercurial وجود ندارد، مهم است که مدیران کارگزار، سرویس میزبانی دسته را از نظر دسترسپذیری و توافقنامههای سطح خدمات (SLA) به عنوان امتدادی از کارگزار Mercurial در نظر بگیرند: اگر سرویس میزبانی دسته از کار بیفتد، امکان clone کردن برای کلاینتها نیز از دست میرود. نکته: در هنگام بروز خرابی، کلاینتها پیامی مشاهده خواهند کرد که نحوهٔ دور زدن سازوکار clone bundles را به آنها اطلاع میدهد. بنابراین مدیران کارگزار باید برای این موضوع آماده باشند که برخی افراد در زمان خرابی این دستورالعملها را دنبال کنند، که در نتیجه هنگام خرابی سرویس میزبانی دسته، بار بیشتری به سمت کارگزار اصلی Mercurial هدایت خواهد شد.
دستههای کلون درونخطی (inline clonebundles)
در صورتی که مخازن از طریق SSH در دسترس باشند، انتقال درونخطی clonebundles امکانپذیر است. این کار نیاز به راهاندازی یک کارگزار HTTPS خارجی را برطرف کرده و منجر به همان کنترل دسترسی میشود که پیشتر برای راهاندازی SSH وجود داشته است.
دستههای clonebundles درونخطی باید در دایرکتوری .hg/bundle-cache قرار داده شوند. به یک clonebundle در مسیر .hg/bundle-cache/mybundle.bundle در فایل clonebundles.manifest با عنوان peer-bundle-cache://mybundle.bundle ارجاع داده میشود.
تولید خودکار دستههای کلون (auto-generation of clone bundles)
امکان تنظیم Mercurial وجود دارد تا در زمان در دسترس بودن محتوای جدید به اندازهٔ کافی، دستههای کلون را به صورت خودکار بازتولید کند.
Mercurial این فرایند را به صورت ناهمگام (asynchronous) انجام خواهد داد. فهرست تعریفشده از bundle-type تولید، بارگذاری و اعلان خواهد شد. دستههای قدیمیتر با جایگزین شدن دستههای جدیدتر، از رده خارج میشوند..SS تولید بستهها (Bundles Generation):
این افزونه میتواند چندین گونهٔ مختلف از بستهٔ کلون (clone bundle) را تولید کند. هر گونهٔ متفاوت توسط «bundle-spec» مورد استفادهاش تعریف میشود:
[clone-bundles] auto-generate.formats= zstd-v2, gzip-v2
برای جزئیات دربارهٔ گزینههای موجود، hg help bundlespec را ببینید.
بهطور پیشفرض، زمانی که ۵٪ از محتوای مخزن یا حداقل ۱۰۰۰ بازبینی (revision) در بستههای ذخیرهشده در حافظهٔ پنهان موجود نباشد، بستههای جدید تولید میشوند. این رفتار را میتوان با گزینهٔ clone-bundles.trigger.below-bundled-ratio (پیشفرض 0.95) و گزینهٔ clone-bundles.trigger.revs (پیشفرض 1000) کنترل کرد:
[clone-bundles] trigger.below-bundled-ratio=0.95 trigger.revs=1000
این منطق میتواند بهصورت دستی با استفاده از دستور admin::clone-bundles-refresh، یا در صورت تنظیم clone-bundles.auto-generate.on-change روی yes، با هر تغییر در مخزن بهطور خودکار اجرا شود:
[clone-bundles] auto-generate.on-change=yes auto-generate.formats= zstd-v2, gzip-v2
ارائه درونخطی خودکار (Automatic Inline serving)
سادهترین راه برای ارائهٔ بستهٔ تولیدشده از طریق پروتکل Mercurial است. با این حال، این روش کارآمدترین راه نیست، چرا که درخواستها همچنان توسط سرور اصلی پاسخ داده میشوند. این روش در مواردی که فرایند احراز هویت پیچیده است یا در حال حاضر یک سامانهٔ آینهای (mirror) کارآمد استفاده میشود، مفید خواهد بود. برای جزئیات دربارهٔ clonebundleهای درونخطی، بخش inline clonebundles در بالا را ببینید.
برای ارائهٔ خودکار بستهٔ تولیدشده از طریق clonebundle درونخطی، کافی است گزینهٔ زیر را تنظیم کنید:
auto-generate.serve-inline=yes
فعال کردن این گزینه، بارگذاری مدیریتشده و ارائه را که در زیر توضیح داده شده است غیرفعال میکند.
بارگذاری و ارائه بستهها (Bundles Upload and Serving):
این روش کارآمدترین راه برای ارائهٔ بستههای کلون تولیدشده بهصورت خودکار است، اما به مقداری پیکربندی اولیه نیاز دارد.
بستههای تولیدشده باید از طریق یک نشانی اینترنتی (URL) «عمومی» در دسترس کاربران قرار گیرند. این کار باید از طریق پیکربندی clone-bundles.upload-command انجام شود. مقدار این پیکربندی باید یک دستور پوسته (shell) باشد. این دستور از طریق متغیر $HGCB_BUNDLE_PATH به مسیر فایل بسته دسترسی خواهد داشت؛ و نام پایه (basename) مورد انتظار در URL «عمومی» در این بخش قابل دسترسی است:
[clone-bundles] upload-command=sftp put $HGCB_BUNDLE_PATH sftp://bundles.host/clone-bundles/$HGCB_BUNDLE_BASENAME
حتی اگر فایل از قبل بارگذاری شده باشد، این دستور همچنان باید با موفقیت پایان یابد.
پس از بارگذاری، فایل باید در یک URL تعریفشده توسط clone-bundles.url-template در دسترس باشد.
[clone-bundles] url-template=https://bundles.host/cache/clone-bundles/{basename}
هنگامی که بستههای جدید تولید میشوند، بستههای قدیمیتر دیگر مورد نیاز نبوده و میتوان آنها را از فضای ذخیرهسازی حذف کرد. این کار از طریق پیکربندی clone-bundles.delete-command انجام میشود. نشانی اینترنتی (URL) دستساختهای که باید حذف شود، از طریق متغیر محیطی $HGCB_BUNDLE_URL به دستور داده میشود.
[clone-bundles] delete-command=sftp rm sftp://bundles.host/clone-bundles/$HGCB_BUNDLE_BASENAME
اگر فایل از قبل حذف شده باشد، دستور همچنان باید با موفقیت به پایان برسد.
دستورها (Commands)
دستورهای دستهبندینشده
admin::clone-bundles-clear
پاک کردن حافظههای موقت (cache) بستههای clone موجود:
hg admin::clone-bundles-clear
برای جزئیات در مورد نحوهٔ تولید مجدد آنها، hg help admin::clone-bundles-refresh را ببینید.
این دستور فقط روی بستههایی که در حال حاضر در دسترس هستند تأثیر میگذارد و روی بستههایی که بهصورت ناهمگام در حال تولید هستند تأثیری نخواهد داشت.
admin::clone-bundles-refresh
تولید بستههای clone بر اساس پیکربندی:
hg admin::clone-bundles-refresh
این دستور منطق تولید خودکار را اجرا کرده، بستههای منسوخ را حذف و در صورت نیاز بستههای جدیدی تولید میکند. برای جزئیات در مورد نحوهٔ پیکربندی این قابلیت، hg help -e clone-bundles را ببینید.
گزینهها:
- --background
- شروع تولید بسته در پسزمینه
closehead
بستن headهای دلخواه بدون checkout کردن اولیهٔ آنها
دستورها (Commands)
دستکاری تغییرات
close-head
بستن بازبینیهای head دادهشده:
hg close-head [OPTION]... [REV]...
این معادل checkout کردن هر بازبینی در یک درخت تمیز و اجرای hg commit --close-branch است، با این تفاوت که دایرکتوری کاری را تغییر نمیدهد.
پیام commit باید با -l یا -m مشخص شود.
گزینهها:
- -m,--message <TEXT>
- استفاده از متن بهعنوان پیام commit
- -l,--logfile <FILE>
- خواندن پیام commit از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده بهعنوان تاریخ commit
- -u,--user <USER>
- ثبت کاربر مشخصشده بهعنوان commitکننده
- -r,--rev <REV[+]>
- بازبینی مورد نظر برای بررسی
گزینهٔ علامتگذاریشده با [+] میتواند چندین بار مشخص شود
نامهای مستعار: close-heads
یک پرچم جدید extras را به commit اضافه میکند (پیشرفته)
convert
وارد کردن بازبینیها از مخازن خارجی VCS به Mercurial
دستورها (Commands)
دستورهای دستهبندینشده (Uncategorized commands)
convert
تبدیل یک مخزن خارجی SCM به یک مخزن Mercurial.:
hg convert [OPTION]... SOURCE [DEST [REVMAP]]
قالبهای مجاز مبدأ [شناسهها]:
- Mercurial [hg]
- CVS [cvs]
- Darcs [darcs]
- git [git]
- Subversion [svn]
- Monotone [mtn]
- GNU Arch [gnuarch]
- Bazaar [bzr]
- Perforce [p4]
قالبهای مجاز مقصد [شناسهها]:
- Mercurial [hg]
- Subversion [svn] (تاریخچه روی شاخهها نگهداری نمیشود)
اگر هیچ بازبینی مشخص نشود، تمام بازبینیها تبدیل خواهند شد. در غیر این صورت، convert تنها تا بازبینی نامبردهشده (که در قالبی قابل فهم برای مبدأ ارائه شده است) را وارد میکند.
اگر نام دایرکتوری مقصدی مشخص نشده باشد، پیشفرض آن نام پایه (basename) مبدأ بههمراه -hg افزوده به انتهای آن خواهد بود. اگر مخزن مقصد وجود نداشته باشد، ایجاد خواهد شد.
بهطور پیشفرض، تمام مبدأها بهجز Mercurial از --branchsort استفاده خواهند کرد. Mercurial از --sourcesort برای حفظ ترتیب شمارههای بازبینی اصلی استفاده میکند. حالتهای مرتبسازی تأثیرات زیر را دارند:
- --branchsort
- تبدیل از بازبینی والد به فرزند در صورت امکان، که به این معنی است شاخهها معمولاً یکی پس از دیگری تبدیل میشوند. این حالت مخازن فشردهتری ایجاد میکند.
- --datesort
- مرتبسازی بازبینیها بر اساس تاریخ. مخازن تبدیلشده گزارش تغییرات (changelog) خوشنماتری دارند، اما اغلب بهمیزان قابلتوجهی (یک مرتبه بزرگی) بزرگتر از نمونههای ایجادشده با --branchsort هستند.
- --sourcesort
- تلاش برای حفظ ترتیب بازبینیهای مبدأ، تنها توسط مبدأهای Mercurial پشتیبانی میشود.
- --closesort
- تلاش برای انتقال بازبینیهای بستهشده به نزدیکترین حالت ممکن به شاخههای والد، تنها توسط مبدأهای Mercurial پشتیبانی میشود.
اگر REVMAP مشخص نشود، در یک مکان پیشفرض قرار میگیرد (بهطور پیشفرض <dest>/.hg/shamap). مورد REVMAP یک فایل متنی ساده است که شناسه کامیت هر مبدأ را به شناسه مقصد برای آن بازبینی نگاشت میکند، به این صورت:
<source ID> <destination ID>
اگر فایل وجود نداشته باشد، بهطور خودکار ایجاد میشود. این فایل با رونوشتبرداری از هر کامیت بهروزرسانی میشود، بنابراین میتوان اجرای hg convert را متوقف کرد و برای رونوشتبرداری از کامیتهای جدید، آن را بهطور مکرر اجرا نمود.
فایل authormap یک فایل متنی ساده است که پدیدآورنده هر کامیتِ مبدأ را به پدیدآورنده کامیتِ مقصد نگاشت میکند. این فایل برای SCMهای مبدأ که از نامهای کاربری یونیکس برای شناسایی پدیدآورندگان استفاده میکنند (مانند CVS) مفید است. در هر خط یک نگاشت پدیدآورنده قرار میگیرد و قالب خط بهصورت زیر است:
source author = destination author
خطهای خالی و خطهایی که با # آغاز میشوند نادیده گرفته میشوند.
فایل filemap فایلی است که امکان پالایش و نگاشت دوباره فایلها و دایرکتوریها را فراهم میکند. هر خط میتواند حاوی یکی از دستورالعملهای زیر باشد:
include path/to/file-or-dir exclude path/to/file-or-dir rename path/to/source path/to/destination
خطهای توضیح با # شروع میشوند. یک مسیر مشخصشده زمانی مطابقت دارد که برابر با نام نسبی کامل یک فایل یا یکی از دایرکتوریهای والد آن باشد. دستورالعمل include یا exclude با طولانیترین مسیر منطبق اعمال میشود، بنابراین ترتیب خطها اهمیتی ندارد.
دستورالعمل include باعث میشود یک فایل، یا تمام فایلهای زیر یک دایرکتوری، در مخزن مقصد گنجانده شوند. در صورتی که هیچ عبارت include وجود نداشته باشد، پیشفرض گنجاندن همهچیز است. اگر عبارتی از نوع include وجود داشته باشد، هیچ چیز دیگری گنجانده نمیشود. دستورالعمل exclude باعث حذف فایلها یا دایرکتوریها میشود. دستورالعمل rename در صورت تبدیل یک فایل یا دایرکتوری، نام آن را تغییر میدهد. برای تغییر نام از یک زیردایرکتوری به ریشه مخزن، از . بهعنوان مسیر مقصد استفاده کنید.
گزینه --full تضمین میکند که مجموعهتغییرهای تبدیلشده دقیقاً حاوی فایلهای درست با محتوای درست باشند. این گزینه تبدیل کاملی از تمام فایلها انجام میدهد، نه فقط مواردی که تغییر یافتهاند. فایلهایی که از قبل درست هستند، تغییر نخواهند کرد. از این قابلیت میتوان برای اعمال تغییرات filemap هنگام تبدیل افزایشی استفاده کرد. این گزینه در حال حاضر تنها برای Mercurial و Subversion پشتیبانی میشود.
فایل splicemap فایلی است که اجازه درج تاریخچه ساختگی را میدهد و به شما امکان میدهد والدین یک بازبینی را مشخص کنید. این قابلیت زمانی مفید است که برای نمونه بخواهید به یک ادغام Subversion دو والد بدهید، یا دو تاریخچه ناپیوسته را به یکدیگر پیوند بزنید (graft). هر ورودی شامل یک کلید (key) است که پس از آن یک فاصله و سپس یک یا دو مقدار جداشده با ویرگول میآید:
key parent1, parent2
کلید، همان شناسه بازبینی در سامانه کنترل نسخه مبدأ است که والدین آن باید اصلاح شوند (همان قالب کلید در .hg/shamap). مقادیر، شناسههای بازبینی (در هر یک از سامانههای کنترل نسخه مبدأ یا مقصد) هستند که باید بهعنوان والدین جدید آن گره استفاده شوند. برای نمونه، اگر "release-1.0" را در "trunk" ادغام کردهاید، باید بازبینی موجود در "trunk" را بهعنوان والد اول و بازبینی روی شاخه "release-1.0" را بهعنوان والد دوم مشخص کنید..sp فایل branchmap به شما امکان میدهد هنگام وارد کردن یک شاخه از هر مخزن خارجی، نام آن را تغییر دهید. هنگامی که این فایل همراه با یک splicemap استفاده شود، ترکیبی قدرتمند برای اصلاح حتی بدترین مخازن با مدیریت نامناسب و تبدیل آنها به مخازن خوشساختار Mercurial فراهم میآورد. فایل branchmap شامل خطوطی با این فرمت است:
original_branch_name new_branch_name
که در آن “original_branch_name” نام شاخه در مخزن مبدأ، و “new_branch_name” نام شاخه در مخزن مقصد است. هیچ فاصله و نویسهٔ خالی (whitespace) در نام شاخهٔ جدید مجاز نیست. این قابلیت میتواند (برای نمونه) برای انتقال کد در یک مخزن از “default” به یک شاخهٔ نامگذاریشده استفاده شود.
مبدأ Mercurial (Mercurial Source)
مبدأ Mercurial گزینههای پیکربندی زیر را شناسایی میکند که میتوانید آنها را از طریق خط فرمان با --config تنظیم کنید:
- convert.hg.ignoreerrors
- نادیده گرفتن خطاهای یکپارچگی (integrity) هنگام خواندن. از این گزینه برای اصلاح مخازن Mercurial دارای revlogهای گمشده، از طریق تبدیل از و به Mercurial استفاده کنید. پیشفرض False است.
- convert.hg.saverev
- ذخیرهٔ شناسهٔ بازبینی (revision ID) اصلی در changeset (شناسههای مقصد را مجبور به تغییر میکند). این گزینه یک آرگومان بولی میپذیرد و پیشفرض آن False است.
- convert.hg.startrev
- مشخص کردن بازبینی اولیهٔ Mercurial. پیشفرض 0 است.
- convert.hg.revs
- مجموعهٔ بازبینی (revset) مشخصکنندهٔ بازبینیهای مبدأ برای تبدیل.
مبدأ Bazaar (Bazaar Source)
گزینههای زیر را میتوان با --config استفاده کرد:
- convert.bzr.saverev
- مشخص میکند که آیا شناسه کامیت اصلی Bazaar در متادادههای کامیت مقصد ذخیره شود یا خیر. پیشفرض True است.
مبدأ CVS (CVS Source)
مبدأ CVS از یک محیط کاری یا سندباکس (یعنی یک رونوشت دریافتشده یا checked-out) از CVS برای تعیین نقطهٔ شروع آنچه که تبدیل خواهد شد، استفاده میکند. دسترسی مستقیم به فایلهای مخزن لازم نیست، مگر اینکه مخزن به صورت :local: باشد. فرایند تبدیل از دایرکتوری سطح بالایی در سندباکس برای یافتن مخزن CVS استفاده کرده و سپس از دستورهای CVS rlog برای یافتن فایلهای قابل تبدیل بهره میبرد. این بدان معناست که مگر در صورت ارائهٔ یک filemap، تمام فایلهای زیر دایرکتوری شروع تبدیل خواهند شد، و هرگونه سازماندهی مجدد دایرکتوریها در سندباکس CVS نادیده گرفته میشود.
گزینههای زیر را میتوان با --config استفاده کرد:
- convert.cvsps.cache
- برای غیرفعال کردن ذخیرهٔ لاگ راه دور در حافظهٔ موقت (caching)، به منظور آزمایش و اشکالزدایی، روی False تنظیم کنید. پیشفرض True است.
- convert.cvsps.fuzz
- مشخص کردن حداکثر زمان مجاز (به ثانیه) بین کامیتهایی با کاربر و پیام لاگ یکسان در یک changeset منفرد. زمانی که فایلهای بسیار بزرگی به عنوان بخشی از یک changeset ثبت شده باشند، ممکن است مقدار پیشفرض به اندازهٔ کافی طولانی نباشد. پیشفرض 60 است.
- convert.cvsps.logencoding
- نام کدگذاری مورد استفاده برای تبدیل کدگذاری (transcoding) پیامهای لاگ CVS را مشخص میکند. میتوان چندین نام کدگذاری را به عنوان یک فهرست مشخص کرد (ببینید hg help config.Syntax)، اما به ازای هر مدخل لاگ CVS تنها اولین کدگذاری قابلقبول در فهرست استفاده میشود. این تبدیل کدگذاری پیش از قلاب cvslog که در زیر آمده اجرا میگردد.
- convert.cvsps.mergeto
- یک عبارت باقاعده (regular expression) را مشخص میکند که پیامهای لاگ کامیت با آن تطبیق داده میشوند. در صورت تطابق، فرایند تبدیل یک بازبینی ساختگی درج میکند که شاخهای را که این پیام لاگ در آن رخ میدهد با شاخهٔ مشخصشده در عبارت باقاعده ادغام مینماید. پیشفرض {{mergetobranch ([-\w]+)}} است.
- convert.cvsps.mergefrom
- یک عبارت باقاعده (regular expression) را مشخص میکند که پیامهای لاگ کامیت با آن تطبیق داده میشوند. در صورت تطابق، فرایند تبدیل تازهترین بازبینی روی شاخهٔ مشخصشده در عبارت باقاعده را به عنوان والد دوم changeset اضافه میکند. پیشفرض {{mergefrombranch ([-\w]+)}} است.
- convert.localtimezone
- استفاده از زمان محلی (به صورتی که توسط متغیر محیطی TZ تعیین میشود) برای تاریخ/زمان changeset. پیشفرض False است (استفاده از UTC).
- hooks.cvslog
- مشخص کردن یک تابع Python که در انتهای جمعآوری لاگ CVS فراخوانی شود. فهرستی از مدخلهای لاگ به تابع ارسال میشود، و تابع میتواند مدخلها را درجا (in-place) تغییر دهد، یا به آنها اضافه یا از آنها حذف کند.
- hooks.cvschangesets
- مشخص کردن یک تابع Python که پس از محاسبهٔ changesetها از روی لاگ CVS فراخوانی شود. فهرستی از مدخلهای changeset به تابع ارسال میشود، و تابع میتواند changesetها را درجا (in-place) تغییر دهد، یا به آنها اضافه یا از آنها حذف کند.
یک دستور اضافی به نام “debugcvsps” در Mercurial امکان اجرای کد ادغام changeset داخلی را بدون انجام تبدیل فراهم میآورد. پارامترها و خروجی آن مشابه دستور cvsps 2.1 است. لطفاً برای جزئیات بیشتر به راهنمای این دستور مراجعه کنید..SS منبع Subversion
منبع Subversion ساختارهای سنتی trunk/branches/tags را شناسایی میکند. بهطور پیشفرض، نشانی URL منبع ارائهشدهٔ svn://repo/path/ بهعنوان یک شاخهٔ منفرد تبدیل میشود. اگر svn://repo/path/trunk وجود داشته باشد، جایگزین شاخهٔ پیشفرض میشود. اگر svn://repo/path/branches وجود داشته باشد، زیردایرکتوریهای آن بهعنوان شاخههای احتمالی فهرست میشوند. اگر svn://repo/path/tags وجود داشته باشد، برای برچسبهایی که به شاخههای تبدیلشده ارجاع میدهند، جستوجو میشود. مقادیر پیشفرض trunk، branches و tags را میتوان با گزینههای زیر بازنویسی کرد. آنها را روی مسیرهای نسبی نسبت به نشانی URL منبع تنظیم کنید، یا برای غیرفعال کردن تشخیص خودکار، آنها را خالی بگذارید.
گزینههای زیر را میتوان با --config تنظیم کرد:
- convert.svn.branches
- مشخص کردن دایرکتوری حاوی شاخهها. پیشفرض branches است.
- مشخص کردن دایرکتوری حاوی برچسبها. پیشفرض tags است.
- convert.svn.trunk
- مشخص کردن نام شاخهٔ اصلی (trunk). پیشفرض trunk است.
- convert.localtimezone
- استفاده از زمان محلی (همانطور که توسط متغیر محیطی TZ مشخص شده است) برای تاریخ/زمان مجموعهتغییرها (changeset). پیشفرض False است (استفاده از UTC).
تاریخچهٔ منبع میتواند بهجای اینکه بهطور کامل تبدیل شود، از یک بازبینی (revision) مشخص شروع و دریافت گردد. فقط تبدیلهای تکشاخه پشتیبانی میشوند.
- convert.svn.startrev
- مشخص کردن شمارهٔ بازبینی آغازین Subversion. پیشفرض 0 است.
منبع Git
واردکنندهٔ Git کامیتها را از تمام شاخههای دردسترس (ارجاعات در refs/heads) و مخازن دوردست (ارجاعات در refs/remotes) به Mercurial تبدیل میکند. شاخهها با حذف پیشوند 'refs/heads' به بوکمارکهایی (bookmarks) با همان نام تبدیل میشوند. زیرماژولهای (submodules) گیت به مخازن فرعی (subrepos) گیت در Mercurial تبدیل میشوند.
گزینههای زیر را میتوان با --config تنظیم کرد:
- convert.git.similarity
- مشخص میکند که فایلهای تغییریافته در یک کامیت چقدر باید شبیه باشند تا بهعنوان تغییرنام یا رونوشت وارد شوند، بهصورت درصدی بین 0 (غیرفعال) و 100 (فایلها باید یکسان باشند). برای مثال، 90 بدین معناست که یک جفت حذف/افزودن درصورتیکه بیش از ۹۰٪ فایل تغییر نکرده باشد، بهعنوان تغییرنام در نظر گرفته خواهد شد. پیشفرض 50 است.
- convert.git.findcopiesharder
- هنگام تشخیص رونوشتها، بهجای بررسی فقط فایلهای تغییریافته، تمام فایلهای موجود در رونوشت کاری (working copy) را بررسی میکند. این کار برای پروژههای بزرگ بسیار سنگین است و تنها زمانی کارآمد خواهد بود که convert.git.similarity بزرگتر از 0 باشد. پیشفرض False است.
- convert.git.renamelimit
- تشخیص تغییرنام و رونوشت را تا این تعداد فایل تغییریافته در یک کامیت انجام میدهد. افزایش این مقدار تشخیص تغییرنام و رونوشت را دقیقتر میکند اما محاسبات را در پروژههای بزرگ بهشدت کُند خواهد کرد. این گزینه تنها زمانی کارآمد است که convert.git.similarity بزرگتر از 0 باشد. پیشفرض 400 است.
- convert.git.committeractions
- فهرست
اقداماتی
که هنگام
پردازش
مقادیر
پدیدآورنده
(author) و
ثبتکننده
(committer) باید
انجام شود.
کامیتهای Git دارای فیلدهای مجزای پدیدآورنده (کسی که کامیت را نوشته) و ثبتکننده (کسی که کامیت را اعمال کرده) هستند. همهٔ مقاصد از فیلدهای مجزای پدیدآورنده و ثبتکننده پشتیبانی نمیکنند (از جمله Mercurial). این گزینهٔ پیکربندی مشخص میکند که هنگام تبدیل با این فیلدهای پدیدآورنده و ثبتکننده چه کاری انجام شود.
مقدار messagedifferent درصورتیکه ثبتکنندهٔ Git با پدیدآورنده متفاوت باشد، یک خط committer: ... را به پیام کامیت الحاق میکند. پیشوند آن خط را میتوان با استفاده از نحو messagedifferent=<prefix> مشخص کرد؛ مانند messagedifferent=git-committer:. هنگامی که یک پیشوند مشخص شده باشد، همیشه یک فاصله بین پیشوند و مقدار درج خواهد شد.
messagealways مانند messagedifferent عمل میکند، با این تفاوت که همیشه منجر به الحاق یک خط committer: ... به پیام کامیت میشود. این مقدار مانعةالجمع با messagedifferent است.
dropcommitter ارجاعات به ثبتکننده را حذف خواهد کرد. فقط ارجاعات به پدیدآورنده باقی خواهند ماند. اقداماتی که ارجاعاتی به ثبتکننده اضافه میکنند، با فعال بودن این گزینه بیاثر خواهند بود.
replaceauthor مقدار فیلد پدیدآورنده را با ثبتکننده جایگزین خواهد کرد. سایر اقداماتی که ارجاعاتی به ثبتکننده اضافه میکنند، با فعال بودن این گزینه همچنان اعمال خواهند شد.
پیشفرض messagedifferent است.
- convert.git.extrakeys
- فهرست کلیدهای اضافی از فرادادههای کامیت برای رونوشت در مقصد. برخی از مخازن Git فرادادههای اضافی را در کامیتها ذخیره میکنند. بهطور پیشفرض، این فرادادههای غیرپیشفرض در طول تبدیل از دست خواهند رفت. تنظیم این گزینهٔ پیکربندی میتواند این فرادادهها را حفظ کند. برخی از کلیدهای توکار مانند parent و branch مجاز به رونوشت شدن نیستند.
- convert.git.remoteprefix
- ارجاعات دوردست (remote refs) بهعنوان بوکمارکهایی با convert.git.remoteprefix بهعنوان پیشوند و بهدنبال آن یک / تبدیل میشوند. پیشفرض 'remote' است.
- convert.git.saverev
- اینکه آیا شناسهٔ کامیت اصلی Git در فرادادههای کامیت مقصد ذخیره شود یا خیر. پیشفرض True است.
- convert.git.skipsubmodules
- فایلهای
.gitmodules در سطح
ریشه یا
فایلهای
با حالت 160000 را
که
نشاندهندهٔ
یک
زیرماژول
است، تبدیل
نمیکند.
پیشفرض False
است.
واردکنندهٔ Perforce (P4) میتواند یک مسیر depot در p4 یا مشخصات یک کلاینت (client specification) را به عنوان مبدأ دریافت کند. این ابزار تمام فایلهای موجود در مبدأ را به یک مخزن مسطح (flat) مرکوریال تبدیل میکند و برچسبها (labels)، شاخهها (branches) و یکپارچهسازیها (integrations) را نادیده میگیرد. توجه داشته باشید هنگامی که یک مسیر depot داده میشود، معمولاً باید یک دایرکتوری مقصد مشخص کنید، زیرا در غیر این صورت ممکن است نام مقصد به صورت ...-hg تعیین شود.
گزینههای زیر را میتوان با --config تنظیم کرد:
- convert.p4.encoding
- کدگذاری مورد استفاده هنگام رمزگشایی خروجی استاندارد ابزار خط فرمان Perforce را مشخص میکند. پیشفرض، کدگذاری پیشفرض سیستم است.
- convert.p4.startrev
- نسخهٔ (revision) اولیهٔ Perforce را مشخص میکند (شمارهٔ changelist در Perforce).
مقصد Mercurial
مقصد Mercurial زیرمخزنهای مرکوریال را در دایرکتوری مقصد تشخیص داده و در صورتی که زیرمخزنهای مقصد حاوی فایل <dest>/<sub>/.hg/shamap باشند، فایل .hgsubstate را بهطور خودکار بهروزرسانی میکند. تبدیل یک مخزن دارای زیرمخزن، مستلزم تبدیل یک مخزن در هر نوبت و از پایین به بالا است.
مثالی که نحوهٔ تبدیل یک مخزن با زیرمخزنها را نشان میدهد:
# تا convert هنگام مواجهه با یک مقصد غیرخالی نوع را تشخیص دهد $ hg init converted $ hg convert orig/sub1 converted/sub1 $ hg convert orig/sub2 converted/sub2 $ hg convert orig converted
گزینههای زیر پشتیبانی میشوند:
- convert.hg.clonebranches
- شاخههای مبدأ را در کلونهای جداگانه توزیع میکند. پیشفرض False است.
- نام شاخه برای نسخههای تگ، که پیشفرض آن default است.
- convert.hg.usebranchnames
- نام شاخهها را حفظ میکند. پیشفرض True است.
- convert.hg.sourcename
- رشتهٔ دادهشده را به عنوان مقدار اضافی 'convert_source' در هر کامیت ایجاد شده در مخزن مقصد ثبت میکند. پیشفرض None است.
- convert.hg.preserve-hash
- فقط با مبدأهای mercurial کار میکند. باعث میشود convert از بهبود کارایی در فهرست فایلهای تغییریافته در کامیتها جلوگیری کند، در صورتی که چنین بهبودی باعث تغییر هش (hash) یک کامیت شود. پیشفرض False است.
تمام مقصدها
تمام انواع مقصد گزینههای زیر را میپذیرند:
- تگها را از
مخزن مبدأ
به مخزن
مقصد تبدیل
نمیکند.
پیشفرض False
است.
تاریخهای کامیت اصلی بهطور پیشفرض حفظ نمیشوند.
- convert.svn.dangerous-set-commit-dates
- تاریخهای کامیت اصلی را با تنظیم اجباری مشخصههای بازبینی svn:date حفظ میکند. این گزینه خطرناک (DANGEROUS) است و ممکن است برخی از عملکردهای subversion را برای مخزن حاصل مختل کند (مانند پالایش بازبینیها با محدودههای زمانی در svn log)، زیرا هیچ تضمینی وجود ندارد که تاریخهای کامیت اصلی بهصورت اکیداً صعودی باشند.
برای کارکرد تنظیم تاریخهای کامیت، مخزن مقصد باید دارای قلاب pre-revprop-change پیکربندیشده باشد تا اجازهٔ تنظیم مشخصههای بازبینی svn:date را بدهد. برای جزئیات بیشتر به مستندات Subversion مراجعه کنید.
گزینهها:
- نام فایل نگاشت نامهای کاربری (منسوخشده) (بهجای آن از --authormap استفاده کنید)
- -s,--source-type <TYPE>
- نوع مخزن مبدأ
- -d,--dest-type <TYPE>
- نوع مخزن مقصد
- -r,--rev <REV[+]>
- وارد کردن تا بازبینی مبدأ REV
- -A,--authormap <FILE>
- نگاشت مجدد نامهای کاربری با استفاده از این فایل
- --filemap <FILE>
- نگاشت مجدد نام فایلها با استفاده از محتویات فایل
- --full
- اعمال تغییرات filemap با تبدیل مجدد همهٔ فایلها
- --splicemap <FILE>
- پیوند زدن تاریخچهٔ ساختهشده در جای خود
- --branchmap <FILE>
- تغییر نام شاخهها هنگام تبدیل
- --branchsort
- تلاش برای مرتبسازی مجموعهتغییرها بر اساس شاخهها
- --datesort
- تلاش برای مرتبسازی مجموعهتغییرها بر اساس تاریخ
- --sourcesort
- حفظ ترتیب مجموعهتغییرهای مبدأ
- --closesort
- تلاش برای بازآرایی بازبینیهای بستهشده
گزینهٔ علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
eol
مدیریت خودکار خطهای جدید در فایلهای مخزن
این افزونه به شما امکان میدهد نوع پایان خطها (CRLF یا LF) مورد استفاده در مخزن و پوشهٔ کاری محلی را مدیریت کنید. از این طریق میتوانید پایان خطهای CRLF را در Windows و LF را در Unix/Mac داشته باشید، و به این ترتیب به همه اجازه دهید از پایان خطهای بومی سیستمعامل خود استفاده کنند.
این افزونه پیکربندی خود را از یک فایل پیکربندی نسخهبندیشدهٔ .hgeol واقع در ریشهٔ پوشهٔ کاری میخواند. فایل .hgeol از همان نحو دیگر فایلهای پیکربندی Mercurial استفاده میکند. این فایل دارای دو بخش [patterns] و [repository] است.
بخش [patterns] مشخص میکند که پایان خطها چگونه باید بین پوشهٔ کاری و مخزن تبدیل شوند. قالب توسط یک الگوی فایل مشخص میشود. نخستین تطابق استفاده میشود، بنابراین الگوهای خاصتر را در ابتدا قرار دهید. پایان خطهای موجود عبارتند از LF، CRLF و BIN.
فایلهایی با قالب اعلامشدهٔ CRLF یا LF همواره با همان قالب واکشی (checkout) و در مخزن ذخیره میشوند، و فایلهایی که دودویی (BIN) اعلام شدهاند بدون تغییر باقی میمانند. افزون بر این، native نامی مستعار برای واکشی با پایان خط پیشفرض پلتفرم است: LF در Unix (شامل Mac OS X) و CRLF در Windows. توجه داشته باشید که BIN (عدم تغییر در پایان خطها) رفتار پیشفرض Mercurial است؛ این مقدار تنها در صورتی نیاز است که بخواهید یک الگوی عمومیتر بعدی را بازنویسی کنید.
بخش اختیاری [repository] پایان خطهای مورد استفاده برای فایلهای ذخیرهشده در مخزن را مشخص میکند. این بخش یک تنظیم منفرد دارد، native، که پایان خط ذخیرهسازی را برای فایلهایی که در بخش [patterns] بهصورت native اعلام شدهاند، تعیین میکند. این تنظیم میتواند روی LF یا CRLF تنظیم شود. مقدار پیشفرض LF است. برای نمونه، این بدان معناست که در Windows، فایلهایی که بهعنوان native پیکربندی شدهاند (بهطور پیشفرض CRLF) هنگام ذخیره در مخزن به LF تبدیل خواهند شد. فایلهایی که در بخش [patterns] بهصورت LF، CRLF یا BIN اعلام شدهاند، همواره همانگونه که هستند در مخزن ذخیره میشوند.
نمونه فایل نسخهبندیشدهٔ .hgeol:
[patterns] **.py = native **.vcproj = CRLF **.txt = native Makefile = LF **.jpg = BIN [repository] native = LF
- نکته
- قوانین نخستین بار زمانی اعمال میشوند که فایلها در پوشهٔ کاری دستکاری (touch) شوند، برای نمونه با بهروزرسانی به null و بازگشت به tip جهت دستکاری تمام فایلها.
این افزونه از یک بخش اختیاری [eol] استفاده میکند که هم از فایلهای پیکربندی معمول Mercurial و هم از فایل .hgeol خوانده میشود، که دومی اولویت بالاتری نسبت به اولی دارد. میتوانید از این بخش برای واپایش رفتار کلی استفاده کنید. سه تنظیم وجود دارد:
- eol.native (پیشفرض os.linesep) را میتوان روی LF یا CRLF تنظیم کرد تا تفسیر پیشفرض native برای واکشی بازنویسی شود. این میتواند مثلاً با hg archive در Unix استفاده شود تا بایگانیای ایجاد شود که در آن فایلها پایان خطهای مخصوص Windows داشته باشند.
- eol.only-consistent (پیشفرض True) را میتوان روی False تنظیم کرد تا افزونه فایلهای با EOLهای ناهمخوان را تبدیل کند. ناهمخوان به این معنی است که هر دو پایان خط CRLF و LF در فایل وجود دارند. با چنین فایلهایی معمولاً با این فرض که پایان خطهای ترکیبی عمدی هستند دستکاری صورت نمیگیرد.
- eol.fix-trailing-newline (پیشفرض False) را میتوان روی True تنظیم کرد تا اطمینان حاصل شود که فایلهای تبدیلشده با یک نویسهٔ EOL پایان مییابند (بسته به الگوهای پیکربندیشده یا \n یا \r\n).
این افزونه پالایههای cleverencode: و cleverdecode: را درست همانند افزونهٔ منسوخشدهٔ win32text ارائه میدهد. این بدان معناست که میتوانید win32text را غیرفعال و eol را فعال کنید و پالایههای شما همچنان کار خواهند کرد. تنها تا زمانی که یک فایل .hgeol آماده کنید به این پالایهها نیاز خواهید داشت.
قلابهای win32text.forbid* ارائهشده توسط افزونهٔ win32text در یک قلاب منفرد به نام eol.checkheadshook تجمیع شدهاند. این قلاب پایان خطهای مورد انتظار را از فایل .hgeol جستجو میکند، بدین معنا که قبل از استفاده از قلاب ابتدا باید به یک فایل .hgeol مهاجرت کنید. eol.checkheadshook فقط headها را بررسی میکند؛ بازبینیهای نامعتبر میانی ارسال (push) خواهند شد. برای منع کامل آنها، از قلاب eol.checkallhook استفاده کنید. بهتر است از این قلابها بهعنوان قلابهای pretxnchangegroup استفاده شود.
برای اطلاعات بیشتر در مورد الگوهای glob استفادهشده، hg help patterns را ببینید..SS extdiff
دستوری برای مقایسه نسخهها با استفاده از برنامههای خارجی
افزونهی extdiff در Mercurial به شما امکان میدهد از برنامههای خارجی برای مقایسهی نسخهها، یا مقایسهی یک نسخه با دایرکتوری کاری استفاده کنید. برنامههای diff خارجی با مجموعهای قابلپیکربندی از گزینهها و دو آرگومان غیرگزینهای فراخوانی میشوند: مسیرهایی به دایرکتوریهای حاوی تصویر لحظهای (snapshot) از فایلها برای مقایسه.
اگر بیش از یک فایل در حال مقایسه باشد و نسخه «فرزند» (child) همان دایرکتوری کاری باشد، هر تغییری که در برنامه diff خارجی ایجاد شود، از دایرکتوری موقت به دایرکتوری کاری بازگردانده (کپی) خواهد شد.
افزونهی extdiff همچنین به شما اجازه میدهد دستورهای diff جدیدی را پیکربندی کنید، تا نیازی نباشد همواره hg extdiff -p kdiff3 را تایپ کنید.
[extdiff]
# افزودن دستور جدید که GNU diff(1) را در حالت 'context diff' اجرا میکند
cdiff = gdiff -Nprc5
## یا روش قدیمی:
#cmd.cdiff = gdiff
#opts.cdiff = -Nprc5
# افزودن دستور جدیدی به نام meld، که meld را اجرا میکند (نیازی به ذکر دو باره نیست). اگر
# فایل اجرایی meld در دسترس نباشد، از ابزار meld در [merge-tools]
# در صورت موجود بودن استفاده خواهد شد
meld =
# افزودن دستور جدیدی به نام vimdiff، که gvimdiff را همراه با افزونه DirDiff اجرا میکند
# (ببینید: http://www.vim.org/scripts/script.php?script_id=102). کاربران غیر
# انگلیسیزبان، حتماً عبارت "let g:DirDiffDynamicDiffText = 1" را در فایل
# .vimrc خود قرار دهید
vimdiff = gvim -f "+next" \
"+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))"
آرگومانهای ابزار میتوانند شامل متغیرهایی باشند که در زمان اجرا بسط مییابند:
$parent1, $plabel1 - نام فایل، برچسب توصیفی والد نخست $child, $clabel - نام فایل، برچسب توصیفی نسخه فرزند $parent2, $plabel2 - نام فایل، برچسب توصیفی والد دوم $root - ریشه مخزن $parent نام مستعاری برای $parent1 است.
هنگامی که هیچ آرگومانی در [extdiff] مشخص نشده باشد، افزونهی extdiff بخشهای [diff-tools] و [merge-tools] شما را برای یافتن آرگومانهای ابزار diff بررسی خواهد کرد.
[extdiff] kdiff3 = [diff-tools] kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child
اگر برنامهای دارای یک رابط کاربری گرافیکی باشد، اطلاع دادن آن به Mercurial میتواند سودمند باشد. این کار از اجرای اشتباه برنامه در یک محیط صرفاً متنی ترمینال (مانند یک نشست ترمینال SSH) جلوگیری میکند، و موجب میشود hg extdiff --per-file به جای باز کردن تفاوت فایلها به صورت یکییکی، تفاوت چندین فایل را همزمان باز کند (اگر همچنان میخواهید تفاوت فایلها را تکتک باز کنید، میتوانید از گزینه --confirm استفاده کنید).
اعلام این که یک ابزار دارای رابط گرافیکی است، با قرار دادن پرچم gui در کنار محل تعیین diffargs امکانپذیر است:
[diff-tools] kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child kdiff3.gui = true
شما میتوانید مانند دستور معمول hg diff از گزینههای -I/-X و فهرستی از نامهای فایل یا دایرکتوری استفاده کنید. افزونهی extdiff فقط از فایلهای مورد نیاز تصویر لحظهای میگیرد، بنابراین اجرای برنامه diff خارجی در عمل بسیار سریع خواهد بود (دستکم سریعتر از مقایسهی کل درخت)..SS دستورها
مدیریت محتوای فایل
extdiff
استفاده از برنامهای بیرونی برای مقایسهٔ مخزن (یا فایلهای انتخابشده):
hg extdiff [OPT]... [FILE]...
نمایش تفاوتهای بین بازبینیها برای فایلهای مشخصشده، با استفاده از یک برنامهٔ بیرونی. برنامهٔ پیشفرض مورد استفاده diff با گزینههای پیشفرض «-Npru» است.
برای انتخاب برنامهای دیگر، از گزینهٔ -p/--program استفاده کنید. نام دو دایرکتوری برای مقایسه به این برنامه ارسال خواهد شد، مگر اینکه گزینهٔ --per-file مشخص شده باشد (پایین را ببینید). برای ارسال گزینههای اضافی به برنامه، از -o/--option استفاده کنید. این گزینهها پیش از نام دایرکتوریها یا فایلهای مورد مقایسه فرستاده خواهند شد.
گزینههای --from، --to و --change به همان شیوهای کار میکنند که در hg diff عمل میکنند.
گزینهٔ --per-file برنامهٔ بیرونی را بهجای یک بار روی دو دایرکتوری، بهصورت مکرر روی تکتک فایلها برای مقایسه اجرا میکند. بهطور پیشفرض، این کار یکییکی انجام میشود، بهطوری که مقایسهٔ فایل بعدی در برنامهٔ بیرونی تنها زمانی باز میشود که برنامهٔ بیرونی قبلی (برای مقایسهٔ فایل قبلی) بسته شده باشد. اگر برنامهٔ بیرونی رابط گرافیکی داشته باشد، میتواند همهٔ مقایسههای فایل را بهجای یکی پس از دیگری، همزمان باز کند. برای کسب اطلاعات دربارهٔ چگونگی اعلام داشتن رابط گرافیکی به Mercurial، دستور hg help -e extdiff را ببینید.
گزینهٔ --confirm پیش از هر بار فراخوانی برنامهٔ بیرونی از کاربر تایید میگیرد. اگر --per-file مشخص نشده باشد، این گزینه نادیده گرفته میشود.
گزینهها:
- -p,--program <CMD>
- برنامهٔ مقایسه برای اجرا
- -o,--option <OPT[+]>
- ارسال گزینه به برنامهٔ مقایسه
- -r,--rev <REV[+]>
- بازبینی (منسوخشده)
- --from <REV1>
- بازبینی مبدا برای مقایسه
- --to <REV2>
- بازبینی مقصد برای مقایسه
- -c,--change <REV>
- تغییر ایجادشده توسط بازبینی
- --per-file
- مقایسهٔ هر فایل بهجای تصویر لحظهای بازبینیها
- --confirm
- درخواست تایید از کاربر پیش از هر فراخوانی برنامهٔ بیرونی
- --patch
- مقایسهٔ وصلهها برای دو بازبینی
- -I,--include <PATTERN[+]>
- شاملکردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنیکردن نامهای منطبق با الگوهای دادهشده
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS factotum
احراز هویت HTTP با factotum
این افزونه به ابزار factotum(4) در پلتفرمهای Plan 9 from Bell Labs اجازه میدهد تا اطلاعات احراز هویت را برای دسترسی HTTP فراهم کند. مدخلهای پیکربندی مشخصشده در بخش auth و همچنین اطلاعات احراز هویت ارائهشده در URL مخزن کاملاً پشتیبانی میشوند. اگر هیچ پیشوندی مشخص نشده باشد، مقدار "*" در نظر گرفته خواهد شد.
بهطور پیشفرض، کلیدها به این صورت مشخص میشوند:
proto=pass service=hg prefix=<prefix> user=<username> !password=<password>
اگر افزونه factotum قادر به خواندن کلید لازم نباشد، کلید بهصورت تعاملی درخواست خواهد شد.
یک بخش پیکربندی برای سفارشیسازی رفتار زمان اجرا در دسترس است. بهطور پیشفرض، این مدخلها عبارتند از:
[factotum] executable = /bin/auth/factotum mountpoint = /mnt/factotum service = hg
مدخل executable مسیر کامل فایل باینری factotum را مشخص میکند. مدخل mountpoint مسیر سرویس فایل factotum را تعیین مینماید. در نهایت، مدخل service نام سرویس مورد استفاده هنگام خواندن کلیدها را کنترل میکند.
fastannotate
پیادهسازی دیگری از annotate که ممکن است سریعتر باشد (آزمایشی)
افزونه fastannotate دستور 'fastannotate' را فراهم میکند که از ساختار داده linelog به عنوان یک لایه حافظه موقت (cache) بهره میبرد و انتظار میرود در صورت وجود حافظه موقت، سریعتر از 'annotate' اصلی باشد.
در بیشتر موارد، برای دستیابی به بیشترین کارایی، fastannotate به پیکربندیای نیاز دارد که در آن mainbranch اشارهگری باشد که همیشه رو به جلو حرکت میکند.
استفاده از fastannotate همراه با linkrevcache سرعت ساخت حافظه موقت annotate را بسیار افزایش میدهد. پیش از "debugbuildannotatecache"، دستور "debugbuildlinkrevcache" را اجرا کنید.
[fastannotate] # تعیین سر شاخه اصلی. linelog داخلی فقط شامل «mainbranch» خطی # (با نادیده گرفتن p2) خواهد بود. از آنجا که linelog بدون بازسازی # نمیتواند به عقب برگردد، این مقدار باید چیزی باشد که همیشه به جلو # حرکت میکند؛ معمولاً «master» یا «@». mainbranch = master # fastannotate از حالتهای مختلفی برای ارائه قابلیت خود پشتیبانی میکند. # فهرستی از ترکیبها: # - fastannotate: ارائه قابلیت از طریق دستور "fastannotate" که همه چیز # را به کارآمدترین شکل مدیریت کرده و قابلیتهای اضافهای مانند # --deleted و غیره را ارائه میدهد. # - fctx: جایگزینی پیادهسازی fctx.annotate. توجه: # a. نسبت به دستور "fastannotate" کارایی کمتری دارد # b. دسترسی به پیادهسازی قدیمی annotate (بدون اثرات جانبی # روی دیسک) را عملاً غیرممکن میسازد # c. مستلزم "hgweb" است. # - hgweb: جایگزینی پیادهسازی annotate مربوط به hgweb. در تضاد با "fctx". # (پیشفرض: fastannotate) modes = fastannotate # قالب پیشفرض هنگامی که هیچ پرچم قالبی استفاده نشده است (پیشفرض: number) defaultformat = changeset, user, date # ارائه حافظه موقت annotate از طریق wire protocol (پیشفرض: False) # نکته: دایرکتوری .hg/fastannotate قابلحمل است - میتوان آن را rsync کرد server = True # ساخت حافظه موقت annotate بر حسب تقاضا برای هر درخواست کلاینت (پیشفرض: True) # غیرفعال کردن آن میتواند پاسخ سرور را سریعتر کند؛ مناسب برای زمانی که یک # cronjob حافظه موقت را میسازد. serverbuildondemand = True # بهروزرسانی حافظه موقت محلی annotate از راه دور بر حسب تقاضا client = False # مسیر مورد استفاده هنگام اتصال به سرور دوردست (پیشفرض: default) remotepath = default # حداقل طول تاریخچه یک فایل که برای واکشی linelog از سرور مورد نیاز است (پیشفرض: 10) clientfetchthreshold = 10 # برای حالت "fctx"، صرفنظر از گزینه خط فرمان، همیشه تغییر نامها دنبال شود. # این مورد سازگاری عقبروی (BC) با دستور اصلی است اما فضای مورد نیاز برای # حافظه موقت annotate را کاهش میدهد و برای راهاندازی کلاینت-سرور مفید است زیرا # سرور فقط حافظه موقت annotate را با گزینههای پیشفرض (یعنی همراه با follow) # ارائه میدهد. بر حالت "fastannotate" تأثیری ندارد. (پیشفرض: True) forcefollow = True # برای حالت "fctx"، فایلها همیشه به عنوان فایل متنی در نظر گرفته شوند تا از بررسی # "isbinary" صرفنظر شود. این کار با دستور "fastannotate" سازگار است و در صورت # استفاده از remotefilelog میتواند به جلوگیری از واکشی فایل کمک کند. (پیشفرض: True) forcetext = True # برای کارایی بهتر از مخزن unfiltered استفاده شود. unfilteredrepo = True # فدا کردن درستی در برخی موارد نادر برای کارایی بیشتر. این مورد بر درستی # حافظه موقت annotate در حال ساخت تأثیری ندارد. این گزینه آزمایشی # است و ممکن است در آینده حذف شود (پیشفرض: False) perfhack = True
fastexport
صادر کردن مخازن به صورت جریان git fast-import
دستورها (Commands)
واردسازی/صادرسازی تغییرات (Change import/export)
fastexport
صادر کردن مخزن به صورت جریان git fast-import:
hg fastexport [OPTION]... [REV]...
این دستور به شما امکان میدهد یک مخزن را به عنوان یک جریان متنی خوانا برای انسان برونریزی کنید. این خروجی میتواند از طریق لولهکشی (pipe) به برنامههای واردسازی متناظر مانند “git fast-import” هدایت شود. با استفاده از فایلهای نشانهها (marks) میتوان برونریزیهای افزایشی (incremental dumps) ایجاد کرد.
گزینهها:
- -r,--rev <REV[+]>
- بازبینیها برای صادر کردن
- -i,--import-marks <FILE>
- فایل نشانههای قدیمی جهت خواندن
- -e,--export-marks <FILE>
- فایل نشانههای جدید جهت نوشتن
- -A,--authormap <FILE>
- نگاشت مجدد نامهای کاربری با استفاده از این فایل
[+] گزینههای نشانهگذاریشده را میتوان چندین بار مشخص کرد
fetch
دریافت (pull)، بهروزرسانی و ادغام در یک دستور (منسوخشده)
دستورها (Commands)
مدیریت مخزن دوردست (Remote repository management)
fetch
دریافت تغییرات از یک مخزن دوردست، و در صورت نیاز ادغام تغییرات جدید.:
hg fetch [SOURCE]
این دستور تمام تغییرات را از مخزن موجود در مسیر یا نشانی وب (URL) مشخصشده یافته و آنها را به مخزن محلی اضافه میکند.
اگر تغییرات دریافتشده یک سرشاخه (head) جدید اضافه کنند، آن سرشاخه بهطور خودکار ادغام شده و نتیجه ادغام ثبت (commit) میشود. در غیر این صورت، دایرکتوری کاری بهروزرسانی میشود تا تغییرات جدید را در بر گیرد.
هنگامی که ادغام لازم باشد، دایرکتوری کاری ابتدا با تغییرات تازه دریافتشده بهروزرسانی میشود. سپس تغییرات محلی در تغییرات دریافتشده ادغام میگردند. برای تغییر ترتیب ادغام، از --switch-parent استفاده کنید.
برای فهرستی از قالبهای معتبر برای -d/--date، hg help dates را ببینید.
در صورت موفقیت، مقدار 0 را برمیگرداند.
گزینهها:
- -r,--rev <REV[+]>
- یک بازبینی مشخص که مایل به دریافت (pull) آن هستید
- --edit
- فراخوانی ویرایشگر متن برای پیامهای ثبت (commit)
- --force-editor
- ویرایش پیام ثبت (منسوخشده)
- --switch-parent
- تعویض والدین (parents) هنگام ادغام
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام ثبت
- -l,--logfile <FILE>
- خواندن پیام ثبت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ ثبت (commit)
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان ثبتکننده (committer)
- -e,--ssh <CMD>
- مشخص کردن دستور ssh برای استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم اعتبارسنجی گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
[+] گزینههای نشانهگذاریشده را میتوان چندین بار مشخص کرد.SS fix
بازنویسی محتوای فایل در مجموعهتغییرها یا رونوشت کاری (آزمایشی)
دستوری را فراهم میکند که ابزارهای پیکربندیشده را روی محتوای فایلهای تغییریافته اجرا کرده، و اصلاحات را در رونوشت کاری بازمینویسد یا مجموعهتغییرها را جایگزین میکند.
ابزارهای اصلاحکننده در دایرکتوری ریشهٔ مخزن اجرا میشوند. این امر به آنها اجازه میدهد تا فایلهای پیکربندی را از رونوشت کاری بخوانند، یا حتی در رونوشت کاری بنویسند. رونوشت کاری برای تطابق با بازبینی در حال اصلاح بهروزرسانی نمیشود. در واقع، چندین بازبینی ممکن است به صورت همروند اصلاح شوند. تغییراتِ نوشتهشده در رونوشت کاری به بازبینی در حال اصلاح افزوده (amend) نمیشوند؛ ابزارهای اصلاحکننده همواره باید محتوای نیازمند اصلاح را از stdin خوانده و محتوای اصلاحشدهٔ فایل را به stdout بنویسند.
در اینجا نمونهای از پیکربندی آمده است که موجب میشود hg fix اصلاحات قالببندی خودکار را روی خطوط تغییریافته در کدهای C++ اعمال کند:
[fix]
clang-format:command=clang-format --assume-filename={rootpath}
clang-format:linerange=--lines={first}:{last}
clang-format:pattern=set:**.cpp or **.hpp
زیرگزینهٔ :command بخش نخست دستور شل را که برای اصلاح یک فایل استفاده خواهد شد تشکیل میدهد. محتوای فایل از طریق ورودی استاندارد ارسال میشود و محتوای اصلاحشدهٔ فایل در خروجی استاندارد مورد انتظار است. هرگونه خروجی در خطای استاندارد به عنوان هشدار نمایش داده خواهد شد. اگر وضعیت خروج غیرصفر باشد، فایل دستنخورده باقی میماند. اگر وضعیت خروج غیرصفر باشد اما خروجی خطای استانداردی وجود نداشته باشد، یک هشدار جایگزین نمایش داده میشود. برخی از مقادیر میتوانند در دستور جایگزین شوند:
{rootpath} مسیر فایل در حال اصلاح، نسبت به ریشهٔ مخزن
{basename} نام فایل در حال اصلاح، بدون مسیر دایرکتوری
اگر زیرگزینهٔ :linerange تنظیم شده باشد، ابزار تنها در صورتی اجرا خواهد شد که خطوط تغییریافتهای در یک فایل وجود داشته باشد. مقدار این زیرگزینه به ازای هر محدوده از خطوط تغییریافته در فایل، یکبار به انتهای دستور شل افزوده میشود. برخی از مقادیر میتوانند در دستور جایگزین شوند:
{first} شمارهٔ خط بر مبنای ۱ برای نخستین خط در محدودهٔ تغییریافته
{last} شمارهٔ خط بر مبنای ۱ برای آخرین خط در محدودهٔ تغییریافته
بخشهای حذفشده از یک فایل توسط :linerange نادیده گرفته میشوند، زیرا هیچ محدودهٔ خط متناظری در نسخهای که در حال اصلاح است وجود ندارد.
بهطور پیشفرض، ابزارهایی که :linerange را تعیین کردهاند تنها در صورتی اجرا میشوند که دستکم یک محدوده از خطوط تغییریافته وجود داشته باشد. این رفتار برای جلوگیری از رخدادهای ناخواسته مانند اجرای یک ابزار قالببندی کد است که به طور غیرمنتظره کل فایل را بازقالببندی کند. اگر چنین ابزاری نیاز به اجرا روی فایلهای بدون تغییر داشته باشد، باید زیرگزینهٔ :skipclean را برابر با false قرار دهد.
زیرگزینهٔ :pattern مشخص میکند کدام فایلها به هر ابزار پیکربندیشده فرستاده شوند. برای مقادیر ممکن، hg help patterns را ببینید. با این حال، همهٔ الگوها نسبت به ریشهٔ مخزن هستند، حتی اگر آن متن بگوید نسبت به دایرکتوری کاری جاری میباشند. اگر آرگومانهای فایلی به hg fix داده شود، اشتراک این الگوها به کار گرفته میشود.
همچنین یک محدودیت قابلپیکربندی برای بیشینهٔ اندازهٔ فایلی که توسط hg fix پردازش میشود وجود دارد:
[fix] maxfilesize = 2MB
در حالت عادی، اجرای ابزارهای پیکربندیشده پس از یک شکست (که با وضعیت خروج غیرصفر مشخص میشود) ادامه مییابد. همچنین میتوان آن را بهگونهای پیکربندی کرد که پس از نخستین شکست متوقف (abort) شود، به طوری که اگر ابزاری با شکست مواجه شد هیچ فایلی تحت تأثیر قرار نگیرد. این توقف همچنین موجب خروج hg fix با وضعیتی غیرصفر خواهد شد:
[fix] failure = abort
هنگامی که چندین ابزار برای تأثیرگذاری روی یک فایل پیکربندی شده باشند، آنها با ترتیبی که توسط زیرگزینهٔ :priority تعیین شده است اجرا میشوند. زیرگزینهٔ priority برای هر ابزار یک مقدار پیشفرض صفر دارد. ابزارها به ترتیب اولویت نزولی اجرا میشوند. ترتیب اجرای ابزارهایی با اولویت یکسان نامشخص است. برای نمونه، میتوانید از ابزارهای 'sort' و 'head' برای نگهداشتن تنها ۱۰ عدد کوچکتر در یک فایل متنی استفاده کنید و اطمینان یابید که 'sort' پیش از 'head' اجرا میشود:
[fix] sort:command = sort -n head:command = head -n 10 sort:pattern = numbers.txt head:pattern = numbers.txt sort:priority = 2 head:priority = 1
برای در نظر گرفتن تغییرات اعمالشده توسط هر ابزار، شمارهٔ خطوطی که برای قالببندی افزایشی استفاده میشوند، پیش از اجرای ابزار بعدی مجدداً محاسبه میگردند. بنابراین، هر ابزار ممکن است مقادیر متفاوتی برای آرگومانهای افزودهشده توسط زیرگزینهٔ :linerange دریافت کند.
هر ابزار اصلاحکننده مجاز است علاوه بر محتوای اصلاحشدهٔ فایل، مقداری متاداده نیز برگرداند. متاداده باید پیش از محتوای فایل در stdout قرار گیرد و با یک بایت صفر از محتوای فایل جدا شود. متاداده به عنوان یک مقدار JSON تجزیه میشود (بنابراین باید با کدگذاری UTF-8 بوده و شامل هیچ بایت صفری نباشد). از ابزار اصلاحکننده انتظار میرود این کدگذاری متاداده را تنها در صورتی تولید کند که زیرگزینهٔ :metadata روی true تنظیم شده باشد:
[fix] tool:command = tool --prepend-json-metadata tool:metadata = true
مقادیر متاداده به قلابها فرستاده میشوند که میتوانند برای چاپ خلاصهها یا انجام کارهای دیگر پس از اصلاح به کار روند. قلابهای پشتیبانیشده عبارتند از:
"postfixfile" یکبار برای هر فایل در هر بازبینی که ابزارهای اصلاحکننده تغییری در محتوای فایل ایجاد کرده باشند اجرا میشود. "$HG_REV" و "$HG_PATH" را برای شناسایی فایل، و "$HG_METADATA" را با نگاشتی از نامهای ابزارها به مقادیر متاداده از ابزارهای اصلاحکنندهای که بر فایل تأثیر گذاشتهاند ارائه میدهد. ابزارهای اصلاحکنندهای که بر فایل تأثیر نگذاشتهاند مقدار None دارند. تنها ابزارهای اجراشده در متاداده حضور دارند. "postfix" یکبار پس از رسیدگی به تمام فایلها و بازبینیها اجرا میشود. "$HG_REPLACEMENTS" را همراه با اطلاعاتی دربارهٔ اینکه چه بازبینیهایی ایجاد و منسوخ شدهاند ارائه میدهد. مقدار بولی "$HG_WDIRWRITTEN" را برای مشخص کردن اینکه آیا فایلی در رونوشت کاری بهروزرسانی شده است یا خیر فراهم میکند. فهرست "$HG_METADATA" را برای نگاشت نامهای ابزارهای اصلاحکننده به فهرستی از مقادیر متادادهٔ بازگرداندهشده از اجراهایی که فایلی را تغییر دادهاند، ارائه میدهد. این مقدار، همان متادادههایی را که پیشتر به قلاب "postfixfile" فرستاده شده بودند تجمیع میکند.
میتوانید با استفاده از پیکربندی fix.extra-bin-paths فهرستی از دایرکتوریها را برای جستجوی دستور ابزار مشخص کنید..SS دستورها
مدیریت محتوای فایل
fix
بازنویسی محتوای فایل در مجموعهتغییرها یا دایرکتوری کاری:
hg fix [OPTION]... [FILE]...
ابزارهای پیکربندیشده را برای اصلاح محتوای فایلها اجرا میکند. (برای جزئیات درباره پیکربندی ابزارها، hg help -e fix را ببینید.) تنها بر فایلهای دارای تغییر اثر میگذارد، مگر آنکه آرگومانهای فایل مشخص شده باشند. تنها بر خطوط تغییریافته فایلها اثر میگذارد، مگر آنکه از پرچم --whole استفاده شود. برخی ابزارها ممکن است بدون توجه به --whole همواره بر کل فایل اثر بگذارند.
اگر --working-dir استفاده شود، فایلهای دارای تغییرات ثبتنشده در رونوشت کاری اصلاح خواهند شد. توجه داشته باشید که هیچ پشتیبانیای تهیه نمیشود.
اگر بازبینیها با --source مشخص شوند، آن بازبینیها و نوادگان آنها بررسی میشوند و ممکن است با بازبینیهای جدیدی که محتوای فایل اصلاحشده دارند جایگزین گردند. با گنجاندن خودکار نوادگان، نیازی به ادغام، پایهریزی مجدد یا فرگشت نخواهد بود. اگر یکی از نیاکانِ رونوشت کاری گنجانده شده باشد، خود رونوشت کاری نیز اصلاح خواهد شد و به والد اصلاحشده بهروزرسانی میشود.
هنگام تعیین اینکه کدام خطوط از هر فایل در هر بازبینی اصلاح شوند، کل مجموعه بازبینیهای در حال اصلاح در نظر گرفته میشود تا اصلاحات اعمالشده در بازبینیهای پیشین در بازبینیهای بعدی فراموش نشوند. میتوان از پرچم --base برای نادیده گرفتن این رفتار پیشفرض استفاده کرد، هرچند معمولاً انجام این کار مطلوب نیست.
گزینهها:
- --all
- اصلاح تمام بازبینیهای غیرعمومی و غیرمنسوخ
- --base <REV[+]>
- بازبینیها برای مقایسه (diff) در برابر آنها (انتخاب خودکار را لغو میکند و بر هر بازبینی در حال اصلاح اعمال میشود)
- -r,--rev <REV[+]>
- بازبینیها برای اصلاح (پیشرفته)
- -s,--source <REV[+]>
- اصلاح بازبینیهای مشخصشده و نوادگان آنها
- -w, --working-dir
- اصلاح دایرکتوری کاری
- --whole
- همیشه تمام خطوط یک فایل اصلاح شود
گزینه مشخصشده با [+] را میتوان چندین بار مشخص کرد
fsmonitor
عملیات وضعیت (status) سریعتر با پایشگر فایل Watchman (آزمایشی)
برنامه نظارت بر فایل Watchman را با Mercurial ادغام میکند تا نتایج وضعیت سریعتری تولید کند.
در یک سیستم لینوکس مشخص، برای یک مخزن واقعی با بیش از 400,000 فایل میزبانیشده روی ext4، دستور عادی hg status حدود 1.3 ثانیه طول میکشد. در همان سیستم، با fsmonitor حدود 0.3 ثانیه زمان میبرد.
پایشگر fsmonitor نیازی به پیکربندی ندارد -- در صورت لزوم Watchman را از مخزن شما مطلع خواهد کرد. شما باید Watchman را از https://facebook.github.io/watchman نصب کرده و اطمینان حاصل کنید که در PATH شما قرار دارد.
پایشگر fsmonitor با افزونههای largefiles و eol ناسازگار است، و در صورت فعال بودن هر یک از آنها خود را غیرفعال خواهد کرد.
گزینههای پیکربندی زیر وجود دارند:
[fsmonitor]
mode = {off, on, paranoid}
هنگامی که mode = off باشد، fsmonitor خود را غیرفعال خواهد کرد (مشابه حالتی که افزونه اصلاً بارگذاری نشده است). هنگامی که mode = on باشد، fsmonitor فعال خواهد بود (پیشفرض). هنگامی که mode = paranoid باشد، fsmonitor هم از Watchman و هم از سامانه فایل استعلام میگیرد و اطمینان حاصل میکند که نتایج همخوانی دارند.
[fsmonitor] timeout = (float)
مقداری بر حسب ثانیه که مشخص میکند fsmonitor چه مدت منتظر بازگرداندن نتایج توسط Watchman بماند. مقدار پیشفرض 2.0 است.
[fsmonitor] blacklistusers = (list of userids)
فهرستی از نامهای کاربری که fsmonitor برای آنها خود را بهطور کامل غیرفعال خواهد کرد.
[fsmonitor] walk_on_invalidate = (boolean)
اینکه آیا در زمان باطل شدن وضعیت حافظه موقت (مانند زمانی که Watchman بازراهاندازی شده یا قوانین .hgignore تغییر یافتهاند)، کل مخزن توسط خودمان پیمایش شود یا خیر. پیمایش مخزن در این حالت میتواند منجر به رقابت بر سر I/O با Watchman شود. برای مخازن بزرگ توصیه میشود این مقدار روی false تنظیم شود. در صورتی که سامانه فایل بسیار سریعی دارید که میتواند از سربار IPC برای دریافت دادههای نتایج کل مخزن از Watchman پیشی بگیرد، ممکن است تمایل داشته باشید این مقدار را روی true تنظیم کنید. مقدار پیشفرض false است.
[fsmonitor] warn_when_unused = (boolean)
اینکه آیا در طول عملیاتهای خاصی که در آنها fsmonitor برای کارایی سودمند خواهد بود اما فعال نشده است، هشداری چاپ شود یا خیر.
[fsmonitor] warn_update_file_count = (integer) # or when mercurial is built with rust support warn_update_file_count_rust = (integer)
اگر warn_when_unused تنظیم شده باشد و fsmonitor فعال نباشد، در صورتی که این تعداد فایل ایجاد شود، در حین بهروزرسانیهای دایرکتوری کاری هشداری چاپ خواهد شد..SS git
اعطای قابلیت کار با مخازن Git به Mercurial. (آزمایشی)
این قابلیت در حال حاضر بهشدت آزمایشی است. احتمالاً مانند رامپلاستیلتاسکین فرزند ارشد شما را خواهد بلعید و غیره.
githelp
تلاش برای نگاشت دستورات git به دستورات Mercurial
تلاش میکند تا یک دستور دادهشدهی git را به یک دستور Mercurial نگاشت کند:
$ hg githelp -- git checkout master hg update master
اگر یک دستور ناشناخته یا ترکیب پارامترهای نامعتبر شناسایی شود، خطایی ایجاد میشود.
دستورها (Commands)
راهنما (Help)
githelp
معادل Mercurial دستورِ git دادهشده را پیشنهاد میدهد:
hg githelp
کاربرد: hg githelp -- <git command>
نامهای مستعار: git
gpg
دستورهایی برای امضا و بررسی صحت مجموعهتغییرها (changesets)
دستورها (Commands)
امضای تغییرات (GPG)
sigcheck
بررسی صحت تمامی امضاهای موجود برای یک بازنگری (revision) خاص:
hg sigcheck REV
بررسی صحت تمامی امضاهایی که ممکن است برای یک بازنگری خاص وجود داشته باشد
sign
افزودن یک امضا برای بازنگری فعلی یا مشخصشده:
hg sign [OPTION]... [REV]...
اگر هیچ بازنگریای مشخص نشود، والد دایرکتوری کاری استفاده میشود، یا در صورتی که هیچ بازنگریای دریافت (checkout) نشده باشد، از tip استفاده خواهد شد.
از تنظیمات پیکربندی gpg.cmd میتوان برای مشخص کردن دستور اجرایی استفاده کرد. یک کلید پیشفرض را میتوان با gpg.key مشخص نمود.
برای دیدن فهرستی از قالبهای معتبر برای -d/--date، hg help dates را ببینید.
گزینهها:
- -l, --local
- محلی کردن امضا
- -f, --force
- امضا کردن حتی اگر sigfile تغییر یافته باشد
- --no-commit
- عدم ثبت (commit) فایل sigfile پس از امضا
- -k,--key <ID>
- شناسه کلید برای امضا کردن با آن
- -m,--message <TEXT>
- استفاده از متن مشخصشده بهعنوان پیام ثبت (commit message)
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای ثبت
- -d,--date <DATE>
- ثبت تاریخ مشخصشده بهعنوان تاریخ ثبت
- -u,--user <USER>
- ثبت کاربر
مشخصشده
بهعنوان
ثبتکننده
(committer)
فهرستکردن changesetهای امضاشده:
hg sigs
فهرستکردن changesetهای امضاشده
graphlog
دستوری برای مشاهدهٔ نمودارهای ویرایش از درون پوسته (منسوخشده)
قابلیتهای این افزونه از نگارش 2.3 به هستهٔ اصلی Mercurial افزوده شده است. لطفاً بهجای آن از hg log -G ... استفاده کنید.
این افزونه گزینهٔ --graph را به دستورهای incoming، outgoing و log اضافه میکند. هنگامی که این گزینه مشخص شود، نمایشی اسکی (ASCII) از نمودار ویرایشها نیز نشان داده میشود.
دستورها (Commands)
پیمایش تغییرات (Change navigation)
glog
نمایش تاریخچهٔ ویرایشها در کنار نمودار ویرایشی بر پایهٔ ASCII:
hg glog [OPTION]... [FILE]
چاپ تاریخچهٔ ویرایشها در کنار نمودار ویرایشی رسمشده با نویسههای ASCII.
گرههایی که با نویسهٔ @ چاپ میشوند، والدهای دایرکتوری کاری هستند.
این یک نام مستعار برای hg log -G است.
گزینهها:
- -f, --follow
- دنبالکردن تاریخچهٔ changeset یا تاریخچهٔ فایل از میان رونوشتها و تغییرنامها
- --follow-first
- تنها دنبالکردن والد نخست در changesetهای ادغام (منسوخشده)
- -d,--date <DATE>
- نمایش ویرایشهای منطبق بر مشخصات تاریخ
- -C, --copies
- نمایش فایلهای رونوشتشده
- -k,--keyword <TEXT[+]>
- انجام جستوجوی بدون توجه به بزرگی و کوچکی حروف برای متن دادهشده
- -r,--rev <REV[+]>
- نمایش ویرایش یا revset مشخصشده
- --removed
- شاملکردن ویرایشهایی که در آنها فایلها حذف شدهاند
- -m, --only-merges
- تنها نمایش ادغامها (منسوخشده)
- -u,--user <USER[+]>
- ویرایشهای ثبتشده توسط کاربر
- --only-branch <BRANCH[+]>
- تنها نمایش changesetهای درون شاخهٔ نامگذاریشدهٔ مشخص (منسوخشده)
- -b,--branch <BRANCH[+]>
- نمایش changesetهای درون شاخهٔ نامگذاریشدهٔ مشخص
- -P,--prune <REV[+]>
- عدم نمایش ویرایش یا هر یک از نیاکان آن
- -p, --patch
- نمایش وصله (patch)
- -g, --git
- استفاده از قالب گسترشیافتهٔ diff در git
- -l,--limit <NUM>
- محدودکردن تعداد تغییرات نمایشدادهشده
- -M, --no-merges
- عدم نمایش ادغامها
- --stat
- خروجی خلاصهٔ تغییرات به سبک diffstat
- -G, --graph
- نمایش DAG (گراف جهتدار بدون دور) ویرایشها
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت الگو (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با استفاده از الگو
- -I,--include <PATTERN[+]>
- شاملکردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنیکردن نامهای منطبق با الگوهای دادهشده
گزینهٔ علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS hgk
مرور مخزن به صورت گرافیکی
افزونهٔ hgk امکان مرور تاریخچهٔ یک مخزن را به صورت گرافیکی فراهم میکند. این افزونه به Tcl/Tk نسخهٔ 8.4 یا بالاتر نیاز دارد. (Tcl/Tk به همراه Mercurial توزیع نمیشود.)
برنامهٔ hgk از دو بخش تشکیل شده است: یک اسکریپت Tcl که وظیفهٔ نمایش و پرسوجوی اطلاعات را بر عهده دارد، و یک افزونه برای Mercurial به نام hgk.py که قلابهایی (hooks) را برای دریافت اطلاعات در اختیار hgk میگذارد. hgk در پوشهٔ contrib یافت میشود، و افزونه در مخزن hgext عرضه شده است و باید فعال شود.
دستور hg view اسکریپت Tcl مربوط به hgk را اجرا خواهد کرد. برای کارکرد صحیح این دستور، hgk باید در مسیر جستجوی شما باشد. در غیر این صورت، میتوانید مسیر منتهی به hgk را در فایل پیکربندی خود مشخص کنید:
[hgk] path = /location/of/hgk
برنامهٔ hgk میتواند از افزونهٔ extdiff برای مصورسازی بازبینیها استفاده کند. با فرض اینکه قبلاً دستور vdiff افزونهٔ extdiff را پیکربندی کردهاید، فقط کافی است خطوط زیر را اضافه کنید:
[hgk] vdiff=vdiff
اکنون منوی زمینهایِ بازبینیها، ورودیهای اضافهای را برای اجرای vdiff روی بازبینیهای اشارهشده یا انتخابشده نمایش میدهد.
دستورها (Commands)
پیمایش تغییرات (Change navigation)
view
اجرای نمایشگر تعاملی تاریخچه:
hg view [-l LIMIT] [REVRANGE]
اجرای نمایشگر تعاملی تاریخچه
گزینهها:
- -l,--limit <NUM>
- محدود کردن تعداد تغییرات نمایشدادهشده
highlight
برجستهسازی نحو برای hgweb (نیازمند Pygments)
این افزونه به کتابخانهٔ برجستهسازی نحو Pygments وابسته است: http://pygments.org
گزینههای پیکربندی زیر وجود دارند:
[web]
pygments_style = <style> (default: colorful)
highlightfiles = <fileset> (default: size('<5M'))
highlightonlymatchfilename = <bool> (default False)
گزینهٔ highlightonlymatchfilename فایلها را فقط در صورتی برجسته میکند که نوع آنها از روی نام فایل قابل شناسایی باشد. زمانی که این گزینه فعال نباشد (پیشفرض)، Pygments تلاش زیادی برای تشخیص نوع فایل از روی محتوای آن میکند و از هر تطابقی (حتی تطابقهایی با امتیاز اطمینان پایین) استفاده خواهد شد..SS histedit
ویرایش تعاملی تاریخچه
با نصب این افزونه، Mercurial یک دستور جدید دریافت میکند: histedit. نحوه استفاده با فرض تاریخچه زیر به شرح زیر است:
@ 3[tip] 7c2fd3b9020c 2009-04-27 18:04 -0500 durin42
| Add delta
|
o 2 030b686bedc4 2009-04-27 18:04 -0500 durin42
| Add gamma
|
o 1 c561b4e977df 2009-04-27 18:04 -0500 durin42
| Add beta
|
o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42
Add alpha
اگر دستور hg histedit c561b4e977df را اجرا کنید، باز شدن فایل زیر را در ویرایشگر خود خواهید دید:
pick c561b4e977df Add beta pick 030b686bedc4 Add gamma pick 7c2fd3b9020c Add delta # Edit history between c561b4e977df and 7c2fd3b9020c # # Commits are listed from least to most recent # # Commands: # p, pick = use commit # e, edit = use commit, but allow edits before making new commit # f, fold = use commit, but combine it with the one above # r, roll = like fold, but discard this commit's description and date # d, drop = remove commit from history # m, mess = edit commit message without changing commit content # b, base = checkout changeset and apply further changesets from there #
در این فایل، خطوطی که با # شروع میشوند نادیده گرفته خواهند شد. شما باید برای هر بازبینی (revision) در تاریخچه خود یک قاعده تعیین کنید. برای مثال، اگر قصد داشتید gamma را پیش از beta اضافه کنید و سپس میخواستید delta را در همان بازبینی beta قرار دهید، فایل را مجدداً به این شکل سازماندهی میکردید:
pick 030b686bedc4 Add gamma pick c561b4e977df Add beta fold 7c2fd3b9020c Add delta # Edit history between c561b4e977df and 7c2fd3b9020c # # Commits are listed from least to most recent # # Commands: # p, pick = use commit # e, edit = use commit, but allow edits before making new commit # f, fold = use commit, but combine it with the one above # r, roll = like fold, but discard this commit's description and date # d, drop = remove commit from history # m, mess = edit commit message without changing commit content # b, base = checkout changeset and apply further changesets from there #
در این مرحله ویرایشگر را میبندید و histedit شروع به کار میکند. هنگامی که یک عملیات fold تعیین میکنید، histedit هنگام ادغام آن بازبینیها یک ویرایشگر باز میکند و به شما امکان میدهد تا پیام کامیت را مرتب و ویرایش کنید:
Add beta *** Add delta
پیام کامیت را مطابق میل خود ویرایش کنید، سپس ویرایشگر را ببندید. تاریخ استفادهشده برای کامیت، تاریخ متأخرتر میان این دو کامیت خواهد بود. برای این مثال، فرض کنیم پیام کامیت به Add beta and delta. تغییر یافته است. پس از اجرای histedit و فرصت یافتن آن برای حذف بازبینیهای قدیمی یا موقت مورد نیازش، تاریخچه به شکل زیر درمیآید:
@ 2[tip] 989b4d060121 2009-04-27 18:04 -0500 durin42
| Add beta and delta.
|
o 1 081603921c3f 2009-04-27 18:04 -0500 durin42
| Add gamma
|
o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42
Add alpha
توجه داشته باشید که histedit تا زمانی که تمام عملیات ویرایش کامل نشده باشد، هیچ بازبینیای را (حتی موارد موقت خود را) حذف نمیکند، بنابراین احتمالاً پس از اتمام کار، چندین عملیات strip انجام خواهد داد. برای مثال بالا، مجبور شد دو بار strip را اجرا کند. عملیات strip بسته به عوامل مختلف میتواند کند باشد، بنابراین ممکن است لازم باشد کمی صبور باشید. میتوانید با دادن پرچم --keep بازبینیهای اصلی را حفظ کنید.
عملیات edit شما را به خط فرمان بازمیگرداند و امکان میدهد آزادانه فایلها را ویرایش کنید، یا حتی با استفاده از hg record برخی تغییرات را به عنوان یک کامیت مجزا ثبت کنید. پس از پایان کار، هر تغییر اعمالنشده (uncommitted) باقیمانده نیز کامیت خواهد شد. پس از اتمام، دستور hg histedit --continue را برای تکمیل این مرحله اجرا کنید. اگر تغییرات کامیتنشده وجود داشته باشد، پیام کامیت جدید از شما خواسته خواهد شد، اما پیام کامیت پیشفرض همان پیام اصلی بازبینی ویرایششده (edit) خواهد بود و تاریخ کامیت اصلی نیز حفظ خواهد شد.
عملیات message به شما این امکان را میدهد که پیام کامیت را بدون تغییر محتوای آن بازنگری کنید. این یک میانبر برای انجام edit و بلافاصله پس از آن hg histedit --continue` است.
اگر histedit هنگام جابهجایی یک بازبینی (در حین مدیریت pick یا fold) با یک تداخل (conflict) مواجه شود، به شکلی مشابه با edit متوقف خواهد شد با این تفاوت که پس از اتمام کار، از شما پیامی برای کامیت درخواست نخواهد کرد. اگر در این نقطه به این نتیجه رسیدید که سازماندهی مجدد تاریخچه کار بسیار زیادی میبرد، یا اشتباهی مرتکب شدهاید، میتوانید از hg histedit --abort استفاده کنید تا تغییرات جدید ایجادشده لغو شوند و به وضعیت پیش از اقدام به ویرایش تاریخچه بازگردید.
اگر از مخزن نمونه ویرایششده با histedit در بالا یک کلون تهیه کنیم و چهار تغییر دیگر به آن بیفزاییم، به طوری که تاریخچه زیر حاصل شود:
@ 6[tip] 038383181893 2009-04-27 18:04 -0500 stefan
| Add theta
|
o 5 140988835471 2009-04-27 18:04 -0500 stefan
| Add eta
|
o 4 122930637314 2009-04-27 18:04 -0500 stefan
| Add zeta
|
o 3 836302820282 2009-04-27 18:04 -0500 stefan
| Add epsilon
|
o 2 989b4d060121 2009-04-27 18:04 -0500 durin42
| Add beta and delta.
|
o 1 081603921c3f 2009-04-27 18:04 -0500 durin42
| Add gamma
|
o 0 d8d2fcd0e319 2009-04-27 18:04 -0500 durin42
Add alpha
اگر hg histedit --outgoing را روی مخزن کلونشده اجرا کنید، معادل اجرای hg histedit 836302820282 خواهد بود. اگر قصد ارسال (push) به مخزنی را دارید که Mercurial مرتبط بودن آن با مخزن مبدأ را تشخیص نمیدهد، میتوانید گزینه --force را اضافه کنید..SS پیکربندی (Config)
خطوط قواعد histedit بهطور پیشفرض به ۸۰ نویسه کوتاه میشوند. شما میتوانید با تنظیم طولی متفاوت در فایل پیکربندی خود، این رفتار را سفارشیسازی کنید:
[histedit] linelen = 120 # truncate rule lines at 120 characters
خلاصه یک تغییر نیز میتواند سفارشیسازی شود:
[histedit]
summary-template = '{rev} {bookmarks} {desc|firstline}'
خلاصه سفارشیسازیشده باید به اندازه کافی کوتاه نگه داشته شود تا خطوط قاعده در طول خطِ پیکربندیشده جا شوند. اگر این مورد نیاز به سفارشیسازی دارد، بخش بالا را ببینید.
دستور hg histedit تلاش میکند بهطور خودکار یک بازنگری (revision) پایه مناسب را برای استفاده انتخاب کند. برای تغییر اینکه از کدام بازنگری پایه استفاده شود، یک revset در فایل پیکربندی خود تعریف کنید:
[histedit] defaultrev = only(.) & draft()
بهطور پیشفرض هر بازنگری ویرایششده باید در دستورات histedit وجود داشته باشد. برای حذف بازنگری، باید از عملیات drop استفاده کنید. شما میتوانید با افزودن تنظیمات زیر، حذف (drop) را برای کامیتهای ناموجود بهصورت ضمنی پیکربندی کنید:
[histedit] dropmissing = True
بهطور پیشفرض، histedit پس از هر اقدام (action) تراکنش را میبندد. برای اهداف کارایی و عملکرد، میتوانید histedit را طوری پیکربندی کنید که در کل فرایند histedit از یک تراکنش واحد استفاده کند. هشدار: اگر histedit بهطور غیرمنتظره متوقف شود، این تنظیم خطر از دست رفتن کارهایی که در histedit انجام دادهاید را بهطور چشمگیری افزایش میدهد:
[histedit] singletransaction = True
دستورها (Commands)
دستکاری تغییرات (Change manipulation)
histedit
ویرایش تعاملی تاریخچه مجموعهتغییرات (changeset):
hg histedit [OPTIONS] ([ANCESTOR] | --outgoing [URL])
این دستور به شما امکان میدهد یک سری خطی از changesetها را ویرایش کنید (تا و شامل دایرکتوری کاری که باید تمیز باشد). شما میتوانید:
- pick برای مرتبسازی [مجدد] یک changeset
- drop برای کنار گذاشتن changeset
- mess برای بازنویسی پیام کامیت changeset
- fold برای ترکیب آن با changeset قبلی (با استفاده از تاریخ متأخرتر)
- roll شبیه به fold، اما با نادیدهگرفتن توضیحات و تاریخ این کامیت
- edit برای ویرایش این changeset (با حفظ تاریخ)
- base برای وارسی (checkout) changeset و اعمال مجموعهتغییرات بعدی از آنجا
روشهای متعددی برای انتخاب changeset ریشه وجود دارد:
- مشخص کردن مستقیم ANCESTOR
- استفاده از --outgoing -- که اولین changeset خطی خواهد بود که در مقصد گنجانده نشده است. (نگاه کنید به hg help config.paths.default-push)
- در غیر این صورت، مقدار گزینه پیکربندی "histedit.defaultrev" به عنوان یک revset برای انتخاب بازنگری پایه در زمانی که ANCESTOR مشخص نشده است، استفاده میشود. اولین بازنگری برگرداندهشده توسط revset استفاده میشود. بهطور پیشفرض، این کار تاریخچه قابل ویرایشی را انتخاب میکند که مختص نیاکان دایرکتوری کاری است.
اگر از --outgoing استفاده کنید، در صورتی که بازنگریهای ارسالی (outgoing) مبهم باشند، این دستور متوقف (abort) خواهد شد؛ برای نمونه، اگر چندین شاخه شامل بازنگریهای ارسالی وجود داشته باشد.
در چنین شرایط مبهمی، به جای --outgoing از "min(outgoing() and ::.)" یا مشخصات revset مشابه استفاده کنید تا بازنگری هدفِ ویرایش دقیقاً مشخص شود. برای جزئیات بیشتر درباره انتخاب بازنگریها، hg help revsets را ببینید.
مثالها:
- تعدادی
تغییر
اعمال شده
است.
بازنگری ۳
دیگر مورد
نیاز نیست.
شروع ویرایش تاریخچه از بازنگری ۳:
hg histedit -r 3
یک ویرایشگر باز میشود که شامل فهرست بازنگریها همراه با اقدامات مشخصشده است:
pick 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 0a9639fcda9d 5 Morgify the cromulancy
اطلاعات اضافی درباره اقدامات قابل انجام در زیر فهرست بازنگریها نمایش داده میشود.
برای حذف بازنگری ۳ از تاریخچه، اقدام مربوط به آن (در ابتدای خط مربوطه) به 'drop' تغییر داده میشود:
drop 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 0a9639fcda9d 5 Morgify the cromulancy
- تعدادی
تغییر
اعمال شده
است.
بازنگریهای
۲ و ۴ باید
با هم
جابهجا
شوند.
شروع ویرایش تاریخچه از بازنگری ۲:
hg histedit -r 2 ویرایشگری باز میشود که حاوی فهرست بازبینیها همراه با اقدامات مشخصشده است: pick 252a1af424ad 2 Blorb a morgwazzle pick 5339bf82f0ca 3 Zworgle the foobar pick 8ef592ce7cc4 4 Bedazzle the zerlog
برای جابهجایی بازبینیهای ۲ و ۴، خطوط مربوط به آنها در ویرایشگر جابهجا میشوند:
pick 8ef592ce7cc4 4 Bedazzle the zerlog pick 5339bf82f0ca 3 Zworgle the foobar pick 252a1af424ad 2 Blorb a morgwazzle
در صورت موفقیت مقدار 0، و در صورتی که مداخله کاربر لازم باشد (نه تنها برای دستور عمدی “edit”، بلکه برای حل تعارضهای پیشبینینشده) مقدار 1 بازگردانده میشود.
گزینهها:
- --commands <FILE>
- خواندن ویرایشهای تاریخچه از فایل مشخصشده
- -c, --continue
- ادامه دادن ویرایشی که هماکنون در جریان است
- --edit-plan
- ویرایش فهرست اقدامات باقیمانده
- -k, --keep
- پس از تکمیل ویرایش، گرههای قدیمی حذف (strip) نشوند
- --abort
- لغو ویرایشِ در حال انجام
- -o, --outgoing
- مجموعهتغییرهایی که در مقصد یافت نمیشوند
- -f, --force
- اجبار به بررسی موارد ارسالی (outgoing) حتی برای مخازن نامرتبط
- -r,--rev <REV[+]>
- نخستین بازبینی جهت ویرایش
- -T,--template <TEMPLATE>
- نمایش با استفاده از الگو
گزینههای علامتگذاریشده با [+] میتوانند چندین بار مشخص شوند
hooklib
مجموعهای از قلابهای ساده برای کارهای متداول (آزمایشی)
این افزونه تعدادی قلاب ساده را برای مدیریت مسائلی که معمولاً در مخازنی با مشارکتکنندگان بسیار رخ میدهد، ارائه میدهد: - اطلاعرسانی از طریق ایمیل هنگام انتقال مجموعهتغییرها از فاز draft به public - اطلاعرسانی از طریق ایمیل هنگام منسوخ شدن مجموعهتغییرها - اعمال اجباری فاز draft برای تمام مجموعهتغییرهای ورودی - اعمال سیاست عدم ادغام شاخهها (no-branch-merge) - اعمال سیاست جلوگیری از چندسر بودن شاخهها (no-multiple-heads)
پیادهسازی این قلابها ممکن است تغییر کند؛ برای نمونه، اینکه بهصورت قلابهای جداگانه پیاده شوند یا بهعنوان گزینه در افزونه notify ادغام گردند. با این حال، برنامهریزی شده است که خود قابلیت بهصورت بلندمدت پشتیبانی شود..SS journal
ردیابی موقعیتهای پیشین بوکمارکها (آزمایشی)
این افزونه دستور جدیدی اضافه میکند: hg journal، که نشان میدهد بوکمارکها قبلاً در کجا قرار داشتهاند.
دستورها (Commands)
سازماندهی تغییرات (Change organization)
journal
نمایش موقعیت پیشین بوکمارکها و رونوشت کاری:
hg journal [OPTION]... [BOOKMARKNAME]
از journal برای مشاهده کامیتهای پیشینی که بوکمارکها و رونوشت کاری به آنها اشاره میکردند استفاده میشود. بهطور پیشفرض، موقعیتهای پیشین برای رونوشت کاری نمایش داده میشوند. مشخص کردن نام یک بوکمارک، تمام موقعیتهای پیشین آن بوکمارک را نشان خواهد داد. از سوییچ --all برای نمایش موقعیتهای پیشین همه بوکمارکها و رونوشت کاری استفاده کنید؛ در این صورت هر سطر شامل نام بوکمارک، یا '.' برای رونوشت کاری نیز خواهد بود.
اگر name با re: آغاز شود، باقیمانده نام به عنوان یک عبارت منظم (regular expression) در نظر گرفته میشود. برای تطبیق نامی که واقعاً با re: آغاز میشود، از پیشوند literal: استفاده کنید.
بهطور پیشفرض، hg journal تنها هش کامیت و دستوری را که در آن زمان در حال اجرا بوده است نمایش میدهد. گزینه -v/--verbose هش قبلی، کاربر و زمانی را که این اتفاق رخ داده است نشان میدهد.
از -c/--commits برای خروجی دادن اطلاعات گزارش (log) مربوط به هر هش کامیت استفاده کنید؛ در این مرحله میتوانید از سوییچهای معمول --patch، --git، --stat و --template برای تغییر خروجی گزارش آنها استفاده نمایید.
از دستور hg journal -T json میتوان برای تولید خروجی ماشینخوان استفاده کرد.
گزینهها:
- --all
- نمایش تاریخچه برای تمام نامها
- -c, --commits
- نمایش فرادادههای کامیت
- -p, --patch
- نمایش وصله (patch)
- -g, --git
- استفاده از قالب diff گسترشیافته git
- -l,--limit <NUM>
- محدود کردن تعداد تغییرات نمایشدادهشده
- --stat
- خروجی خلاصهای از تغییرات به سبک diffstat
- --style <STYLE>
- نمایش با استفاده از فایل نگاشت الگو (منسوخشده)
- -T,--template <TEMPLATE>
- نمایش با الگو
keyword
گسترش کلیدواژهها در فایلهای ردیابیشده
این افزونه کلیدواژههای $Keywords$ مشابه RCS/CVS یا سفارشیسازیشده را در فایلهای متنی ردیابیشده که توسط پیکربندی شما انتخاب شدهاند، گسترش میدهد.
کلیدواژهها تنها در مخازن محلی گسترش مییابند و در تاریخچه تغییرات ذخیره نمیشوند. این سازوکار میتواند به عنوان یک قابلیت رفاهی برای کاربر فعلی یا برای توزیع آرشیو در نظر گرفته شود.
کلیدواژهها به دادههای مجموعه تغییرات (changeset) مربوط به آخرین تغییر نسبت به والد پوشه کاری هر فایل گسترش مییابند.
پیکربندی در بخشهای [keyword]، [keywordset] و [keywordmaps] از فایلهای hgrc انجام میشود.
مثال:
[keyword] # expand keywords in every python file except those matching "x*" **.py = x* = ignore [keywordset] # prefer svn- over cvs-like default keywordmaps svn = True
- نکته
- هر چه در الگوهای نام فایل خود دقیقتر باشید، در مخازن بزرگ افت سرعت کمتری خواهید داشت.
برای بررسی و نمایش نگاشت الگوها و گسترش [keywordmaps]، دستور hg kwdemo را اجرا کنید. برای فهرستی از الگوها و فیلترهای موجود، hg help templates را ببینید.
سه فیلتر الگوی تاریخ دیگر نیز ارائه شده است:
- utcdate
-
"2006/09/18 15:13:13"
- svnutcdate
-
"2006-09-18 15:13:13Z"
- svnisodate
-
"2006-09-18 08:13:13 -700 (Mon, 18 Sep 2006)"
نگاشتهای پیشفرض الگو (قابل مشاهده با hg kwdemo -d) را میتوان با کلیدواژهها و الگوهای سفارشی جایگزین کرد. مجدداً، hg kwdemo را برای کنترل نتایج تغییرات پیکربندی خود اجرا کنید.
پیش از تغییر یا غیرفعالسازی کلیدواژههای فعال، باید hg kwshrink را اجرا کنید تا از ذخیره شدن کلیدواژههای گسترشیافته در تاریخچه تغییرات جلوگیری شود.
برای اجبار به گسترش پس از فعالسازی آن، یا اعمال تغییر در پیکربندی، دستور hg kwexpand را اجرا کنید.
گسترشهایی که بیش از یک خط را در بر میگیرند و گسترشهای افزایشی، مانند $Log$ در CVS، پشتیبانی نمیشوند. نگاشت الگوی کلیدواژه "Log = {desc}" به اولین سطر شرح مجموعه تغییرات (changeset) گسترش مییابد..SS دستورها (Commands)
دستورهای دستهبندینشده (Uncategorized commands)
kwdemo
چاپ پیکربندی [keywordmaps] و یک نمونه بسط:
hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]...
نمایش نگاشتهای قالب کلیدواژه فعلی، سفارشی یا پیشفرض و بسطهای آنها.
گسترش پیکربندی فعلی با مشخص کردن نگاشتها به عنوان آرگومان و استفاده از -f/--rcfile برای خواندن یک فایل hgrc خارجی.
برای غیرفعال کردن پیکربندی فعلی از -d/--default استفاده کنید.
برای اطلاعات درباره قالبها و فیلترها به hg help templates مراجعه کنید.
گزینهها:
- -d, --default
- نمایش نگاشتهای قالب کلیدواژه پیشفرض
- -f,--rcfile <FILE>
- خواندن نگاشتها از rcfile
kwexpand
بسط کلیدواژهها در دایرکتوری کاری:
hg kwexpand [OPTION]... [FILE]...
پس از فعالسازی (یا فعالسازی مجدد) بسط کلیدواژه اجرا شود.
اگر فایلهای دادهشده حاوی تغییرات محلی باشند، kwexpand از اجرا خودداری میکند.
گزینهها:
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینه با علامت [+] را میتوان چندین بار مشخص کرد
kwfiles
نمایش فایلهای پیکربندیشده برای بسط کلیدواژه:
hg kwfiles [OPTION]... [FILE]...
فهرست کردن فایلهایی در دایرکتوری کاری که با الگوهای پیکربندی [keyword] مطابقت دارند.
مفید برای جلوگیری از بسط ناخواسته کلیدواژه و افزایش سرعت اجرا تنها با در بر گرفتن فایلهایی که نامزد واقعی بسط هستند.
برای چگونگی ساخت الگوها هم جهت در بر گرفتن و هم مستثنی کردن فایلها، به hg help keyword مراجعه کنید.
به همراه -A/--all و -v/--verbose، کدهای مورد استفاده برای نمایش وضعیت فایلها عبارتند از:
K = نامزد بسط کلیدواژه k = نامزد بسط کلیدواژه (ردیابینشده) I = نادیدهگرفتهشده i = نادیدهگرفتهشده (ردیابینشده)
گزینهها:
- -A, --all
- نمایش پرچمهای وضعیت کلیدواژه برای همه فایلها
- -i, --ignore
- نمایش فایلهای مستثنیشده از بسط
- -u, --unknown
- فقط نمایش فایلهای ناشناخته (ردیابینشده)
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینه با علامت [+] را میتوان چندین بار مشخص کرد.SS kwshrink
بازگرداندن کلیدواژههای گسترشیافته در دایرکتوری کاری:
hg kwshrink [OPTION]... [FILE]...
باید پیش از تغییر دادن/غیرفعال کردن کلیدواژههای فعال اجرا شود.
اگر فایلهای ارائهشده حاوی تغییرات محلی باشند، kwshrink از اجرا خودداری میکند.
گزینهها:
- -I,--include <PATTERN[+]>
- شامل کردن نامهای مطابق با الگوهای ارائهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای مطابق با الگوهای ارائهشده
گزینهای که با [+] علامتگذاری شده را میتوان چند بار مشخص کرد
largefiles
ردگیری فایلهای باینری بزرگ
فایلهای باینری بزرگ معمولاً چندان فشردهپذیر نیستند، مقایسه تفاضلی (diff) روی آنها کارآمد نیست و اصلاً امکان ادغام (merge) ندارند. اینگونه فایلها توسط ساختار ذخیرهسازی Mercurial (موسوم به revlog) که بر اساس دلتاهای باینری فشردهشده کار میکند، بهطور کارآمد مدیریت نمیشوند؛ ذخیره فایلهای باینری بزرگ بهصورت فایلهای عادی Mercurial موجب هدررفت پهنای باند و فضای دیسک شده و مصرف حافظه Mercurial را افزایش میدهد. افزونه largefiles با افزودن یک لایه متمرکز کلاینت-سرور بر روی Mercurial این مشکلات را حل میکند: فایلهای بزرگ در یک مخزن متمرکز (central store) در جایی درون شبکه نگهداری میشوند و شما تنها بازبینیهایی (revisions) را واکشی میکنید که در زمان لازم به آنها نیاز دارید.
عملکرد largefiles به این صورت است که برای هر فایل بزرگ، یک «فایل جانشین» (standin file) در دایرکتوری .hglf/ نگهداری میکند. جانشینها حجم کمی دارند (۴۱ بایت: یک هش SHA-1 به همراه نویسه خط جدید) و توسط Mercurial ردگیری میشوند. بازبینیهای فایل بزرگ با هش SHA-1 محتوایشان شناسایی میشوند که درون فایل جانشین نوشته میشود. افزونه largefiles از این شناسه بازبینی برای دریافت/ارسال (get/put) بازبینیهای فایل بزرگ از/به مخزن متمرکز استفاده میکند. این امر هم در فضای دیسک و هم در پهنای باند صرفهجویی میکند، چرا که هنگام clone یا pull کردن نیازی به دریافت تمام تاریخچه بازبینیهای فایلهای بزرگ ندارید.
برای شروع یک مخزن جدید یا افزودن فایلهای باینری بزرگ تازه، کافی است گزینه --large را به دستور hg add خود اضافه کنید. برای نمونه:
$ dd if=/dev/urandom of=randomdata count=2000 $ hg add --large randomdata $ hg commit -m "add randomdata as a largefile"
هنگامی که مجموعهتغییری (changeset) را که باعث افزودن/تغییر دادن فایلهای بزرگ میشود به یک مخزن راه دور push میکنید، بازبینیهای فایل بزرگ آن نیز به همراهش بارگذاری خواهند شد. توجه داشته باشید که برای کارکرد این قابلیت، Mercurial سمت سرور یا راه دور نیز باید افزونه largefiles را فعال داشته باشد.
هنگامی که مجموعهتغییری موثر بر فایلهای بزرگ را از یک مخزن راه دور pull میکنید، فایلهای بزرگ مربوط به آن مجموعهتغییر بهطور پیشفرض دریافت نخواهند شد. با این حال، وقتی به چنین بازبینیای update میکنید، هر فایل بزرگی که مورد نیاز آن بازبینی باشد دانلود و کش میشود (در صورتی که قبلاً هرگز دانلود نشده باشد). بنابراین یک راه برای دریافت فایلهای بزرگ هنگام pull، استفاده از گزینه --update است که رونوشت کاری (working copy) شما را به آخرین بازبینی دریافتشده بهروزرسانی میکند (و در نتیجه فایلهای بزرگ جدید را دانلود مینماید).
اگر میخواهید فایلهای بزرگی را دریافت کنید که فعلاً برای update به آنها نیازی ندارید، میتوانید از pull با گزینه --lfrev یا دستور hg lfpull استفاده کنید.
اگر میدانید که در حال pull کردن از مکانی غیرپیشفرض هستید و میخواهید تمام فایلهای بزرگ متناظر با مجموعهتغییرهای جدید را بهطور همزمان دانلود کنید، میتوانید عملیات pull را با --lfrev "pulled()" انجام دهید.
اگر تنها میخواهید مطمئن شوید که فایلهای بزرگ مورد نیاز برای merge یا rebase با سرشاخههای (heads) جدیدی را که در حال pull کردن آنها هستید در اختیار خواهید داشت، میتوانید با پرچم --lfrev "head(pulled())" عملیات pull را اجرا کنید تا پیشاپیش هر فایل بزرگی را که در سرشاخههای دریافتی جدید است دانلود نمایید.
به خاطر داشته باشید که اکنون ممکن است برای update کردن به مجموعهتغییرهایی که قبلاً به آنها بهروزرسانی نکردهاید، دسترسی به شبکه الزامی باشد. ماهیت افزونه largefiles ایجاب میکند که دیگر تضمینی برای محلی بودن صرف عملیات بهروزرسانی (updating) وجود نداشته باشد.
اگر از قبل فایلهای بزرگی دارید که بدون افزونه largefiles توسط Mercurial ردگیری میشوند، برای بهرهمندی از مزایای largefiles باید مخزن خود را تبدیل کنید. این کار با دستور hg lfconvert انجام میشود:
$ hg lfconvert --size 10 oldrepo newrepo
در مخازنی که از قبل حاوی largefile هستند، هر فایل جدیدی با حجم بیشتر از 10MB بهطور خودکار بهعنوان یک largefile اضافه میشود. برای تغییر دادن این آستانه، مقدار largefiles.minsize را در فایل پیکربندی Mercurial خود روی حداقل اندازه بر حسب مگابایت برای ردگیری بهعنوان largefile تنظیم کنید، یا از گزینه --lfsize در دستور add استفاده نمایید (این گزینه نیز بر حسب مگابایت است):
[largefiles] minsize = 2 $ hg add --lfsize 2
گزینه پیکربندی largefiles.patterns به شما اجازه میدهد فهرستی از الگوهای نام فایل را مشخص کنید (نگاه کنید به hg help patterns) که باید همواره بهعنوان largefile ردگیری شوند:
[largefiles] patterns = *.jpg re:.*\.(png|bmp)$ library.zip content/audio/*
فایلهایی که با یکی از این الگوها مطابقت داشته باشند، صرفنظر از اندازهشان، بهعنوان largefile اضافه خواهند شد.
گزینههای پیکربندی largefiles.minsize و largefiles.patterns برای مخازنی که هنوز حاوی هیچ largefile نیستند نادیده گرفته میشوند. برای افزودن نخستین largefile به یک مخزن، باید صریحاً این کار را با ارسال پرچم --large به دستور hg add انجام دهید..SS دستورها (Commands)
دستورهای دستهبندینشده (Uncategorized commands)
lfconvert
تبدیل یک مخزن عادی به یک مخزن largefiles:
hg lfconvert SOURCE DEST [FILE ...]
مخزن SOURCE را به یک مخزن جدید DEST تبدیل میکند که کاملاً مشابه SOURCE است، با این تفاوت که برخی فایلها به عنوان largefiles تبدیل میشوند: به طور مشخص، هر فایلی که با هر PATTERN مطابقت داشته باشد یا اندازهاش بالاتر از آستانهٔ حداقل اندازه باشد، به صورت largefile تبدیل خواهد شد. اندازهای که برای تعیین ردگیری یا عدم ردگیری یک فایل به عنوان largefile استفاده میشود، اندازهٔ نخستین نسخه از آن فایل است. حداقل اندازه میتواند با --size یا در پیکربندی به صورت largefiles.size مشخص شود.
پس از اجرای این دستور، باید مطمئن شوید که largefiles در هر جایی که قصد ارسال (push) مخزن جدید به آن را دارید، فعال باشد.
از --to-normal برای تبدیل دوبارهٔ largefiles به فایلهای عادی استفاده کنید؛ پس از این کار، مخزن DEST را میتوان به کلی بدون largefiles استفاده کرد.
گزینهها:
- -s,--size <SIZE>
- حداقل اندازه (به مگابایت) برای تبدیل فایلها به largefiles
- --to-normal
- تبدیل از یک مخزن largefiles به یک مخزن عادی
lfpull
دریافت (pull) فایلهای largefiles برای بازبینیهای مشخصشده از مبدأ مشخص:
hg lfpull -r REV... [-e CMD] [--remotecmd CMD] [SOURCE]
فایلهای largefiles که در دستهتغییرات (changeset) محلی به آنها ارجاع داده شده اما در سطح محلی موجود نیستند را دریافت کرده و از مخزن دوردست به حافظهٔ موقت (cache) محلی میآورد.
اگر SOURCE مشخص نشود، مسیر 'default' استفاده خواهد شد. برای اطلاعات بیشتر hg help urls را ببینید.
چند مثال:
- دریافت largefiles
برای تمام
سرشاخهها
(branch heads):
hg lfpull -r "head() and not closed()"
- دریافت largefiles
در شاخهٔ
پیشفرض:
hg lfpull -r "branch(default)"
گزینهها:
- -r,--rev <VALUE[+]>
- دریافت largefiles برای این بازبینیها
- -e,--ssh <CMD>
- مشخص کردن دستور ssh جهت استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم اعتبارسنجی گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
گزینهٔ دارای علامت [+] را میتوان چندین بار مشخص کرد.SS lfs
lfs - پشتیبانی از فایلهای حجیم (آزمایشی)
این افزونه امکان ردیابی فایلهای حجیم در خارج از فضای ذخیرهسازی عادی مخزن و نگهداری آنها بر روی یک سرور متمرکز را، مشابه افزونهٔ largefiles، فراهم میکند. هنگام برقراری ارتباط با سرور از پروتکل git-lfs استفاده میشود، بنابراین میتوان از زیرساختهای موجود git بهره برد. اگرچه فایلها در خارج از مخزن ذخیره میشوند، یکپارچگی آنها همچنان به همان شیوهٔ فایلهای عادی بررسی و اعتبارسنجی میشود.
فایلهای ذخیرهشده در خارج از مخزن بنا بر نیاز (on demand) بارگیری میشوند که این امر زمان clone کردن و احتمالاً مصرف دیسک محلی را کاهش میدهد. این قابلیت گردشکارهای بنیادین را در یک DVCS تغییر میدهد، بنابراین پیش از بهکارگیری آن باید بررسی دقیق صورت گیرد. میتوان از hg convert برای تبدیل مخازن LFS به مخازن معمولی که دیگر نیازی به این افزونه ندارند، بدون تغییر دادن شناسههای کامیت (commit hashes)، استفاده کرد. این ویژگی اجازه میدهد در صورتی که گردشکار متمرکز دستوپاگیر شود، افزونه غیرفعال گردد. با این حال، نسخههای clone پیش و پس از تبدیل نمیتوانند با یکدیگر ارتباط برقرار کنند، مگر اینکه این افزونه روی هر دو فعال باشد.
برای شروع یک مخزن جدید، یا افزودن فایلهای LFS به یک مخزن موجود، کافی است همانطور که در ادامه توضیح داده شده، یک فایل .hglfs در دایرکتوری ریشهٔ مخزن ایجاد کنید. معمولاً این فایل باید تحت کنترل نسخه قرار گیرد تا تنظیمات با دستورهای push و pull به مخازن دیگر منتقل شوند. در طول هر کامیت، Mercurial به این فایل رجوع میکند تا مشخص کند آیا یک فایلِ اضافهشده یا تغییریافته باید در خارج از مخزن ذخیره شود یا خیر. نوع ذخیرهسازی به مشخصات فایل در هر کامیت بستگی دارد. فایلی که در نزدیکی آستانهٔ اندازه قرار دارد، ممکن است بنا به نیاز بین LFS و ذخیرهسازی معمولی جابهجا شود.
علاوه بر این، میتوان هر دو نوع مخازن معمولی و مخازن تحت کنترل largefile را با استفاده از hg convert و گزینهٔ پیکربندی lfs.track که در ادامه شرح داده شده به LFS تبدیل کرد. سپس باید فایل .hglfs ایجاد و اضافه شود تا گزینشهای بعدی LFS را کنترل کند. در این حالت نیز شناسههای هش بدون تغییر باقی میمانند. مخازن LFS و غیر-LFS از این رو قابل تشخیص هستند که در صورت غیرفعال بودن این افزونه، مخزن LFS اجرای هر فرمانی را متوقف (abort) خواهد کرد.
فایلهای LFS کامیتشده بهصورت محلی نگهداری میشوند تا زمانی که مخزن push شود. پیش از push کردن دادههای عادی مخزن، فایلهای LFS که توسط کامیتهای خروجی ردیابی شدهاند، بهطور خودکار روی سرور مرکزی پیکربندیشده بارگذاری میشوند. هنگام اجرای hg pull یا hg clone هیچ فایل LFSی منتقل نمیشود. در عوض، در صورتی که نسخهٔ میانحافظهشده (cached) بهصورت محلی یافت نشود، فایلها بنا بر نیاز و به محض نیاز به خوانده شدن بارگیری میشوند. هم کامیت کردن و هم بارگیری یک فایل LFS، فایل را به یک usercache پیوند میدهد تا دسترسیهای بعدی سریعتر شود. تنظیمات پیکربندی usercache که در ادامه آمده را ببینید.
این افزونه پیکربندی خود را از فایل پیکربندی نسخهبندیشدهٔ .hglfs واقع در ریشهٔ دایرکتوری کاری میخواند. فایل .hglfs از همان نحو (syntax) سایر فایلهای پیکربندی Mercurial استفاده میکند و دارای یک بخش واحد، یعنی [track] است.
بخش [track] مشخص میکند چه فایلهایی بهصورت LFS ذخیره شوند (یا نشوند). هر خط با یک الگوی فایل به عنوان کلید، همراه با یک مقدار گزاره (predicate) مشخص میشود. نخستین تطبیق الگوی فایل اعمال میشود، بنابراین الگوهای خاصتر را در ابتدا قرار دهید. گزارههای موجود عبارتند از all()، none() و size(). برای مورد آخر راهنمای «hg help filesets.size» را ببینید.
نمونه فایل نسخهبندیشدهٔ .hglfs:
[track]
# هیچ Makefile یا فایل پایتونی، در هیچ کجا، LFS نخواهد بود
**Makefile = none()
**.py = none()
**.zip = all()
**.exe = size(">1MB")
# قاعدهٔ فراگیر برای هر چیزی که در بالا مطابقت نیافته است
** = size(">10MB")
پیکربندیها:
[lfs]
# نقطه پایانی دوردست. چندین پروتکل پشتیبانی میشوند:
# - http(s)://user:pass@example.com/path
# نقطه پایانی git-lfs
# - file:///tmp/path
# سامانه فایل محلی، معمولاً برای آزمایش
# در صورت تنظیم نشدن، lfs فرض میکند مخزن دوردست ذخیرهسازی اشیای بزرگ (blob)
# را نیز برای آدرسهای http(s) مدیریت میکند. در غیر این صورت، lfs هنگامی که ملزم به
# استفاده از این مقدار باشد، اعلان تعیین آن را میدهد.
# (پیشفرض: تنظیمنشده)
url = https://example.com/repo.git/info/lfs
# فایلهایی که باید در LFS ردیابی شوند. آزمونهای مسیر عبارتند از "**.extname" برای
# پسوند فایلها، و "path:under/some/directory" برای پیشوند مسیر. هر دو
# نسبت به ریشهٔ مخزن سنجیده میشوند.
# اندازهٔ فایل را میتوان با مجموعه فایلهای "size()" آزمود، و آزمونها را میتوان
# با عملگرهای fileset ترکیب کرد. (ببینید: "hg help filesets.operators".)
#
# چند مثال:
# - all() # همهچیز
# - none() # هیچچیز
# - size(">20MB") # بزرگتر از 20MB
# - !**.txt # هر چیزی غیر از فایلهای *.txt
# - **.zip | **.tar.gz | **.7z # برخی انواع فایلهای فشرده
# - path:bin # فایلهای زیرمسیر "bin" در ریشهٔ پروژه
# - (**.php & size(">2MB")) | (**.js & size(">5MB")) | **.tar.gz
# | (path:bin & !path:/bin/README) | size(">1GB")
# (پیشفرض: none())
#
# در صورت وجود یک فایل ردیابیشدهٔ '.hglfs' این مورد نادیده گرفته میشود، و این تنظیم
# در نهایت منسوخ و حذف خواهد شد.
track = size(">10M")
# تعداد دفعات تلاش مجدد قبل از انصراف از انتقال یک شیء
retry = 5
# دایرکتوری محلی برای ذخیره فایلهای lfs جهت اشتراکگذاری در cloneهای محلی.
# در صورت تنظیم نشدن، میانحافظه در مکانی وابسته به سیستمعامل قرار میگیرد.
usercache = /path/to/global/cache
logtoprocess
ارسال دادههای ui.log() به یک زیرپردازش (آزمایشی)
این افزونه به شما امکان میدهد برای هر رویداد ui.log() یک دستور شل تعیین کنید و تمام آرگومانهای باقیمانده را بهعنوان متغیرهای محیطی به آن دستور بفرستید.
آرگومانهای مکانی یک پیام لاگ میسازند که در متغیر محیطی MSG1 ارسال میشود. هر آرگومان کلیدواژهای بهصورت یک متغیر OPT_UPPERCASE_KEY تنظیم میشود (بنابراین کلید با حروف بزرگ نوشته شده و پیشوند OPT_ به آن اضافه میشود). نام رویداد اصلی در متغیر محیطی EVENT ارسال شده و شناسه فرایند برنامه mercurial در HGPID قرار میگیرد.
بنابراین با فرض فراخوانی ui.log('foo', 'bar %s ', 'baz', spam='eggs')، اسکریپتی که برای رویداد `foo پیکربندی شده است میتواند انتظار محیطی با MSG1=bar baz و OPT_SPAM=eggs را داشته باشد.
اسکریپتها در بخش [logtoprocess] پیکربندی میشوند و هر کلید، نام یک رویداد است. برای مثال:
[logtoprocess] commandexception = echo "$MSG1" > /var/log/mercurial_exceptions.log
پیام هشدار و traceback هر فراخوانی ناموفق دستور را ثبت خواهد کرد.
اسکریپتها بهصورت ناهمگام بهعنوان پردازشهای دیمن (daemon) مستقل اجرا میشوند؛ mercurial تضمین نمیکند که آنها بهطور تمیز خارج شوند.
mq
مدیریت پشتهای از وصلهها
این افزونه به شما امکان میدهد با پشتهای از وصلهها در یک مخزن Mercurial کار کنید. این افزونه دو پشته از وصلهها را مدیریت میکند - تمام وصلههای شناختهشده، و وصلههای اعمالشده (زیرمجموعهای از وصلههای شناختهشده).
وصلههای شناختهشده بهصورت فایلهای وصله در دایرکتوری .hg/patches نمایش داده میشوند. وصلههای اعمالشده هم فایلهای وصله و هم changeset هستند.
وظایف رایج (برای جزئیات بیشتر از hg help COMMAND استفاده کنید):
create new patch qnew import existing patch qimport print patch series qseries print applied patches qapplied add known patch to applied stack qpush remove patch from applied stack qpop refresh contents of top applied patch qrefresh
بهطور پیشفرض، mq در صورت لزوم بهطور خودکار از وصلههای git استفاده میکند تا از دست رفتن تغییرات حالت فایل، سوابق رونوشت، فایلهای باینری یا ایجاد و حذف فایلهای خالی جلوگیری شود. این رفتار را میتوان با تنظیم زیر پیکربندی کرد:
[mq] git = auto/keep/yes/no
اگر روی 'keep' تنظیم شود، mq از پیکربندی بخش [diff] پیروی کرده در حالی که وصلههای git موجود را هنگام qrefresh حفظ میکند. اگر روی 'yes' یا 'no' تنظیم شود، mq بخش [diff] را نادیده گرفته و همیشه وصلههای git یا معمولی تولید میکند که در حالت دوم ممکن است دادهها از دست بروند.
ممکن است مطلوب باشد که changesetهای mq در فاز secret نگه داشته شوند (ببینید: hg help phases)، که میتوان آن را با تنظیم زیر فعال کرد:
[mq] secret = True
شما بهطور پیشفرض یک صف وصله به نام «patches» را مدیریت خواهید کرد. میتوانید با دستور hg qqueue صفهای وصله مستقل دیگری ایجاد کنید.
اگر دایرکتوری کاری حاوی فایلهای کامیتنشده باشد، qpush ،qpop و qgoto فوراً لغو میشوند. اگر از -f/--force استفاده شود، تغییرات نادیده گرفته میشوند. تنظیم:
[mq] keepchanges = True
باعث میشود آنها طوری رفتار کنند که گویی --keep-changes ارسال شده است، و تغییرات محلی بدون تداخل حفظ خواهند شد. در صورت ارسال گزینههای ناسازگار مانند -f/--force یا --exact، این تنظیم نادیده گرفته میشود.
این افزونه در گذشته دستور strip را ارائه میداد. این دستور اکنون در افزونه strip قرار دارد..SS دستورها (Commands)
ایجاد مخزن (Repository creation)
qclone
کلون کردن همزمان مخزن اصلی و مخزن وصله:
hg qclone [OPTION]... SOURCE [DEST]
اگر مبدأ محلی باشد، در مقصد هیچ وصلهای اعمال نخواهد شد. اگر مبدأ دوردست باشد، این دستور نمیتواند اعمال شدن وصلهها در مبدأ را بررسی کند، بنابراین نمیتواند تضمین کند که در مقصد هیچ وصلهای اعمال نشده باشد. اگر مخزن دوردستی را کلون میکنید، از پیش مطمئن شوید که هیچ وصلهای بر روی آن اعمال نشده است.
مخزن وصلهٔ مبدأ بهطور پیشفرض در <src>/.hg/patches جستجو میشود. برای تغییر آن از -p <url> استفاده کنید.
دایرکتوری وصله باید یک مخزن تودرتوی Mercurial باشد، همانطور که توسط hg init --mq ایجاد میشود.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- --pull
- استفاده از پروتکل pull برای کپی کردن فراداده
- -U, --noupdate
- دایرکتوریهای کاری جدید بهروزرسانی نشوند
- --uncompressed
- استفاده از انتقال فشردهنشده (سریع در شبکه محلی / LAN)
- -p,--patches <REPO>
- مکان مخزن وصلهٔ مبدأ
- -e,--ssh <CMD>
- مشخص کردن دستور ssh مورد استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم تأیید گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
qinit
راهاندازی یک مخزن صف جدید (منسوخشده):
hg qinit [-c]
مخزن صف بهطور پیشفرض نسخهبندینشده است. اگر -c/--create-repo مشخص شود، qinit یک مخزن تودرتوی جداگانه برای وصلهها ایجاد خواهد کرد (همچنین qinit -c میتواند بعداً برای تبدیل یک مخزن وصلهٔ نسخهبندینشده به یک مخزن نسخهبندیشده اجرا شود). میتوانید از qcommit برای ثبت تغییرات در این مخزن صف استفاده کنید.
این دستور منسوخ شده است. بدون -c، عملکرد آن بهطور ضمنی توسط سایر دستورهای مربوطه انجام میشود. با -c، بهجای آن از hg init --mq استفاده کنید.
گزینهها:
- -c, --create-repo
- ایجاد مخزن صف
qcommit
ثبت تغییرات در مخزن صف (منسوخشده):
hg qcommit [OPTION]... [FILE]...
این دستور منسوخ شده است؛ به جای آن از hg commit --mq استفاده کنید.
گزینهها:
- -A, --addremove
- علامتگذاری فایلهای جدید/ناموجود به عنوان اضافهشده/حذفشده پیش از ثبت
- --close-branch
- علامتگذاری سرشاخه به عنوان بستهشده
- --amend
- اصلاح والد دایرکتوری کاری
- -s, --secret
- استفاده از فاز محرمانه برای ثبت
- --draft
- استفاده از فاز پیشنویس برای ثبت
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای ثبت
- --force-close-branch
- بستن اجباری شاخه از یک مجموعه تغییرات (changeset) غیر سرشاخه (پیشرفته)
- -i, --interactive
- استفاده از حالت تعاملی
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام ثبت
- -l,--logfile <FILE>
- خواندن پیام ثبت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ ثبت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان ثبتکننده
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
نامهای مستعار: qci
ایجاد یک وصله جدید:
hg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...
دستور qnew یک وصله جدید در بالای وصلهای که در حال حاضر اعمال شده است (در صورت وجود) ایجاد میکند. وصله با تمام تغییرات ثبتنشده در دایرکتوری کاری مقداردهی اولیه میشود. همچنین میتوانید از -I/--include، -X/--exclude و/یا فهرستی از فایلها پس از نام وصله استفاده کنید تا تنها تغییرات فایلهای منطبق به وصله جدید افزوده شوند و باقی موارد به عنوان تغییرات اعمالنشده باقی بمانند.
گزینههای -u/--user و -d/--date میتوانند به ترتیب برای تنظیم کاربر و تاریخ (مشخصشده) استفاده شوند. گزینههای -U/--currentuser و -D/--currentdate کاربر را روی کاربر فعلی و تاریخ را روی تاریخ فعلی تنظیم میکنند.
گزینههای -e/--edit، -m/--message یا -l/--logfile سرآیند وصله و همچنین پیام کامیت را مشخص میکنند. اگر هیچکدام تعیین نشوند، سرآیند خالی بوده و پیام کامیت '[mq]: PATCH' خواهد بود.
از گزینه -g/--git برای نگهداشتن وصله در قالب تفاضل گسترشیافته گیت (git extended diff) استفاده کنید. برای اطلاعات بیشتر در مورد دلیل اهمیت این موضوع جهت حفظ تغییرات مجوزها و اطلاعات رونوشت/تغییر نام، مبحث راهنمای diffs را مطالعه کنید.
در صورت ایجاد موفقیتآمیز وصله جدید، مقدار 0 بازگردانده میشود.
گزینهها:
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای کامیت
- -f, --force
- وارد کردن تغییرات کامیتنشده (منسوخشده)
- -g, --git
- استفاده از قالب تفاضل گسترشیافته گیت (git extended diff)
- -U, --currentuser
- افزودن "From: <current user>" به وصله
- -u,--user <USER>
- افزودن "From: <USER>" به وصله
- -D, --currentdate
- افزودن "Date: <current date>" به وصله
- -d,--date <DATE>
- افزودن "Date: <DATE>" به وصله
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام کامیت
- -l,--logfile <FILE>
- خواندن پیام کامیت از فایل
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS qrefresh
بهروزرسانی وصله فعلی:
hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...
اگر هرگونه الگوی فایل ارائه شود، وصله تازهسازیشده تنها شامل تغییراتی خواهد بود که با آن الگوها مطابقت دارند؛ باقی تغییرات در دایرکتوری کاری باقی خواهند ماند.
اگر -s/--short مشخص شود، فایلهایی که هماکنون در وصله قرار دارند دقیقاً مانند فایلهای منطبق تازهسازی میشوند و در وصله باقی میمانند.
اگر -e/--edit مشخص شود، Mercurial ویرایشگر پیکربندیشده شما را باز خواهد کرد تا پیامی وارد کنید. در صورتی که qrefresh ناموفق باشد، نسخه پشتیبانی از پیام خود را در .hg/last-message.txt خواهید یافت.
دستورهای hg add/remove/copy/rename طبق معمول کار میکنند، با این حال ممکن است بخواهید برای ردگیری رونوشتها و تغییر نامها از وصلههای سبک git (-g/--git یا [diff] git=1) استفاده کنید. برای اطلاعات بیشتر درباره قالب git diff، موضوع راهنمای diffs را ببینید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای کامیت
- -g, --git
- استفاده از قالب diff گسترشیافته git
- -s, --short
- تازهسازی تنها فایلهایی که از قبل در وصله هستند و فایلهای مشخصشده
- -U, --currentuser
- افزودن/بهروزرسانی فیلد نویسنده در وصله با کاربر فعلی
- -u,--user <USER>
- افزودن/بهروزرسانی فیلد نویسنده در وصله با کاربر دادهشده
- -D, --currentdate
- افزودن/بهروزرسانی فیلد تاریخ در وصله با تاریخ فعلی
- -d,--date <DATE>
- افزودن/بهروزرسانی فیلد تاریخ در وصله با تاریخ دادهشده
- -I,--include <PATTERN[+]>
- شاملکردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنیکردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام کامیت
- -l,--logfile <FILE>
- خواندن پیام کامیت از فایل
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
دستکاری تغییرات (Change manipulation)
qfold
ادغام وصلههای نامبرده در وصله فعلی:
hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...
وصلهها نباید هنوز اعمال شده باشند. هر وصله به ترتیبی که ارائه شده به صورت متوالی روی وصله فعلی اعمال خواهد شد. اگر همه وصلهها با موفقیت اعمال شوند، وصله فعلی با وصله تجمیعی جدید تازهسازی میشود و وصلههای ادغامشده حذف خواهند شد. با -k/--keep، فایلهای وصله ادغامشده پس از آن حذف نمیشوند.
سرآیند هر وصله ادغامشده به سرآیند وصله فعلی الحاق میشود و با یک سطر شامل * * * جدا خواهد شد.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای کامیت
- -k, --keep
- نگهداشتن فایلهای وصله ادغامشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام کامیت
- -l,--logfile <FILE>
- خواندن پیام کامیت از فایل
qapplied
نمایش وصلههای از قبل اعمالشده:
hg qapplied [-1] [-s] [PATCH]
در صورت موفقیت 0 بازمیگرداند.
گزینهها:
- -1, --last
- تنها وصله اعمالشده قبلی را نشان میدهد
- -s, --summary
- چاپ خط اول سرآیند وصله
qdelete
حذف وصلهها از صف:
hg qdelete [-k] [PATCH]...
وصلهها نباید اعمال شده باشند، و مشخص کردن دستکم یک وصله الزامی است. شناسههای دقیق وصلهها باید ارائه شوند. با گزینه -k/--keep، فایلهای وصله در دایرکتوری وصله نگهداری میشوند.
برای متوقف کردن مدیریت یک وصله و انتقال آن به تاریخچه دائمی، از دستور hg qfinish استفاده کنید.
گزینهها:
- -k, --keep
- نگهداشتن فایل وصله
- -r,--rev <REV[+]>
- توقف مدیریت یک بازبینی (منسوخشده)
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
نامهای مستعار: qremove qrm
qfinish
انتقال وصلههای اعمالشده به تاریخچه مخزن:
hg qfinish [-a] [REV]...
با خارج کردن بازبینیهای مشخصشده (متناظر با وصلههای اعمالشده) از کنترل mq و انتقال آنها به تاریخچه عادی مخزن، کار آنها را نهایی میکند.
یک محدوده بازبینی یا گزینه -a/--applied را میپذیرد. اگر --applied مشخص شده باشد، تمام بازبینیهای اعمالشده mq از کنترل mq خارج میشوند. در غیر این صورت، بازبینیهای دادهشده باید در ابتدای پشته وصلههای اعمالشده باشند.
این دستور بهویژه زمانی مفید است که تغییرات شما در یک مخزن بالادستی (upstream) اعمال شده باشند، یا قصد ارسال (push) تغییرات خود را به بالادست داشته باشید.
در صورت موفقیت 0 بازمیگرداند.
گزینهها:
- -a, --applied
- نهایی کردن
تمام
مجموعهتغییرهای
(changesets)
اعمالشده
اعمال (push) یا واگردانی (pop) وصلهها تا قرار گرفتن وصلهٔ مشخصشده در بالای پشته:
hg qgoto [OPTION]... PATCH
در صورت موفقیت ۰ بازمیگرداند.
گزینهها:
- --keep-changes
- تحمل تغییرات محلیِ غیرمتداخل
- -f, --force
- رونویسی روی تمام تغییرات محلی
- --no-backup
- عدم ذخیرهٔ نسخههای پشتیبان فایلها
qguard
تنظیم یا نمایش نگهبانها (guards) برای یک وصله:
hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]
نگهبانها مشخص میکنند که آیا یک وصله میتواند اعمال شود یا خیر. یک وصلهٔ بدون نگهبان همیشه اعمال میشود. یک وصله با یک نگهبان مثبت ("+foo") تنها در صورتی اعمال میشود که دستور hg qselect آن را فعال کرده باشد. یک وصله با یک نگهبان منفی ("-foo") در صورتی که دستور hg qselect آن را فعال کرده باشد، هرگز اعمال نمیشود.
بدون آرگومان، نگهبانهای فعال کنونی را چاپ میکند. با آرگومان، نگهبانها را برای وصلهٔ مشخصشده تنظیم میکند.
- نکته
- مشخص کردن نگهبانهای منفی اکنون به '--' نیاز دارد.
برای تنظیم نگهبانها روی وصلهای دیگر:
hg qguard other.patch -- +2.6.17 -stable
در صورت موفقیت ۰ بازمیگرداند.
گزینهها:
- -l, --list
- فهرست کردن تمام وصلهها و نگهبانها
- -n, --none
- حذف تمام نگهبانها
qheader
چاپ سرآیند بالاترین وصله یا وصلهٔ مشخصشده:
hg qheader [PATCH]
در صورت موفقیت ۰ بازمیگرداند..SS qnext
چاپ نام وصلهٔ بعدی قابل اِعمال:
hg qnext [-s]
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -s, --summary
- چاپ خط نخست سرآیند وصله
qpop
برداشتن وصلهٔ جاری از پشته:
hg qpop [-a] [-f] [PATCH | INDEX]
بدون آرگومان، بالاترین وصله را از پشته برمیدارد. اگر نام یک وصله داده شود، تا زمانی که وصلهٔ نامبرده در بالای پشته قرار گیرد، به برداشتن وصلهها ادامه میدهد.
بهطور پیشفرض، اگر دایرکتوری کاری حاوی تغییرات ثبتنشده باشد، عملیات لغو میشود. با --keep-changes، تنها در صورتی عملیات لغو میشود که فایلهای ثبتنشده با فایلهای وصلهشده همپوشانی داشته باشند. با -f/--force، از تغییرات ایجادشده در چنین فایلهایی نسخهٔ پشتیبان تهیه شده و تغییرات نادیده گرفته میشوند.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -a, --all
- برداشتن تمام وصلهها
- -n,--name <NAME>
- نام صف برای برداشتن وصله (منسوخشده)
- --keep-changes
- تحمل تغییرات محلی بدون تداخل
- -f, --force
- نادیده گرفتن هرگونه تغییر محلی در فایلهای وصلهشده
- --no-backup
- عدم ذخیرهٔ نسخههای پشتیبان فایلها
qprev
چاپ نام وصلهٔ اِعمالشدهٔ قبلی:
hg qprev [-s]
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -s, --summary
- چاپ خط نخست
سرآیند
وصله
اعمال وصلهٔ بعدی بر روی پشته:
hg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]
بهطور پیشفرض، اگر دایرکتوری کاری حاوی تغییرات ثبتنشده باشد، عملیات لغو میشود. با --keep-changes، تنها در صورتی لغو میشود که فایلهای ثبتنشده با فایلهای وصلهشده همپوشانی داشته باشند. با -f/--force، از تغییرات ثبتنشده نسخهٔ پشتیبان تهیه شده و وصله روی آنها اعمال میشود.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- --keep-changes
- تحمل تغییرات محلیِ بدون تعارض
- -f, --force
- اعمال بر روی تغییرات محلی
- -e, --exact
- اعمال وصلهٔ هدف روی والد ثبتشدهاش
- -l, --list
- درج نام وصله در متن کامیت
- -a, --all
- اعمال تمام وصلهها
- -m, --merge
- ادغام از صفی دیگر (منسوخشده)
- -n,--name <NAME>
- نام صف ادغام (منسوخشده)
- --move
- تغییر ترتیب سری وصلهها و اعمال تنها همین وصله
- --no-backup
- ذخیره نکردن نسخههای پشتیبان فایلها
qqueue
مدیریت چندین صف وصله:
hg qqueue [OPTION] [QUEUE]
از جابهجایی بین صفهای وصلهٔ مختلف، و همچنین ایجاد صفهای وصلهٔ جدید و حذف صفهای موجود پشتیبانی میکند.
حذف نام صف یا مشخص کردن -l/--list، صفهای ثبتشده را نمایش میدهد - بهطور پیشفرض صف وصلههای «normal» ثبت شده است. صف فعال کنونی با «(active)» مشخص خواهد شد. مشخص کردن --active تنها نام صف فعال را چاپ میکند.
برای ایجاد یک صف جدید، از -c/--create استفاده کنید. صف بهطور خودکار فعال میشود، مگر در حالتی که وصلههایی از صف فعال کنونی روی مخزن اعمال شده باشد؛ در این حالت، صف تنها ایجاد شده و تغییر صف با شکست مواجه خواهد شد.
برای حذف یک صف موجود، از --delete استفاده کنید. شما نمیتوانید صف فعال کنونی را حذف کنید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -l, --list
- فهرست کردن تمام صفهای موجود
- --active
- چاپ نام صف فعال
- -c, --create
- ایجاد صف جدید
- --rename
- تغییر نام صف فعال
- --delete
- حذف ارجاع به صف
- --purge
- حذف صف، و
پاک کردن
دایرکتوری
وصله
تغییر نام یک وصله:
hg qrename PATCH1 [PATCH2]
با یک آرگومان، نام وصلهٔ فعلی را به PATCH1 تغییر میدهد. با دو آرگومان، نام PATCH1 را به PATCH2 تغییر میدهد.
در صورت موفقیت 0 بازمیگرداند.
نامهای مستعار: qmv
qrestore
بازیابی وضعیت صف ذخیرهشده توسط یک بازبینی (منسوخشده):
hg qrestore [-d] [-u] REV
این دستور منسوخ شده است، بهجای آن از hg rebase استفاده کنید.
گزینهها:
- -d, --delete
- حذف مدخل ذخیرهسازی
- -u, --update
- بهروزرسانی دایرکتوری کاری صف
qsave
ذخیرهٔ وضعیت فعلی صف (منسوخشده):
hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]
این دستور منسوخ شده است، بهجای آن از hg rebase استفاده کنید.
گزینهها:
- -c, --copy
- کپی کردن دایرکتوری وصله
- -n,--name <NAME>
- نام دایرکتوری کپی
- -e, --empty
- پاک کردن فایل وضعیت صف
- -f, --force
- اجبار در کپی
- -m,--message <TEXT>
- استفاده از متن بهعنوان پیام ثبت
- -l,--logfile <FILE>
- خواندن
پیام ثبت از
فایل
تنظیم یا چاپ وصلههای دارای محافظ برای اعمال (push):
hg qselect [OPTION]... [GUARD]...
از دستور hg qguard برای تنظیم یا چاپ محافظها (guards) روی وصله استفاده کنید، سپس با استفاده از qselect مشخص کنید که mq از کدام محافظها استفاده کند. یک وصله در صورتی اعمال (push) خواهد شد که هیچ محافظی نداشته باشد یا یکی از محافظهای مثبت آن با محافظ انتخابشدهٔ فعلی مطابقت داشته باشد، اما اگر هر یک از محافظهای منفی با محافظ فعلی تطابق داشته باشد اعمال نخواهد شد. برای مثال:
qguard foo.patch -- -stable (negative guard) qguard bar.patch +stable (positive guard) qselect stable
این دستور محافظ «stable» را فعال میکند. mq وصلهٔ foo.patch را نادیده میگیرد (زیرا تطابق منفی دارد) اما bar.patch را اعمال میکند (زیرا تطابق مثبت دارد).
بدون آرگومان، محافظهای فعال فعلی را چاپ میکند. با یک آرگومان، محافظ فعال را تنظیم میکند.
برای غیرفعالکردن محافظها از -n/--none استفاده کنید (به آرگومان دیگری نیاز نیست). هنگامی که هیچ محافظی فعال نباشد، وصلههای دارای محافظ مثبت نادیده گرفته میشوند و وصلههای دارای محافظ منفی اعمال میگردند.
دستور qselect میتواند محافظهای روی وصلههای اعمالشده را تغییر دهد. این دستور بهطور پیشفرض وصلههای محافظتشده را واگردانی (pop) نمیکند. از --pop برای واگردانی تا پیش از نخستین وصلهٔ اعمالشدهای که محافظت نشده است استفاده کنید. از --reapply (که متضمن --pop است) برای اعمال مجدد بعدی تا وصلهٔ کنونی استفاده کنید، اما وصلههای دارای محافظ نادیده گرفته میشوند.
از -s/--series برای چاپ فهرستی از تمام محافظهای موجود در فایل series استفاده کنید (به آرگومان دیگری نیاز نیست). برای اطلاعات بیشتر از -v استفاده کنید.
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
qseries
چاپ کامل فایل series:
hg qseries [-ms]
در صورت موفقیت 0 را برمیگرداند.
گزینهها:
- -m, --missing
- چاپ وصلههایی که در series نیستند
- -s, --summary
- چاپ سطر
نخست
سرآیند (header)
وصله
چاپ نام وصلهٔ فعلی:
hg qtop [-s]
در صورت موفقیت ۰ برمیگرداند.
گزینهها:
- -s, --summary
- چاپ اولین خط سرآیند وصله
qunapplied
چاپ وصلههایی که هنوز اعمال نشدهاند:
hg qunapplied [-1] [-s] [PATCH]
در صورت موفقیت ۰ برمیگرداند.
گزینهها:
- -1, --first
- تنها نمایش اولین وصله
- -s, --summary
- چاپ اولین خط سرآیند وصله
مدیریت محتوای فایل
qdiff
تفاضل (diff) وصلهٔ فعلی و تغییرات پس از آن:
hg qdiff [OPTION]... [FILE]...
یک تفاضل (diff) را نمایش میدهد که شامل وصلهٔ فعلی و همچنین هرگونه تغییری است که از زمان آخرین بازآوری (refresh) در دایرکتوری کاری ایجاد شده است (در نتیجه نشان میدهد که وصلهٔ فعلی پس از یک qrefresh به چه شکل در خواهد آمد).
اگر فقط میخواهید تغییرات اعمالشده از آخرین qrefresh را ببینید، از hg diff استفاده کنید، یا اگر میخواهید تغییرات ایجاد شده توسط وصلهٔ فعلی را بدون احتساب تغییرات پس از qrefresh مشاهده کنید، از hg export qtip استفاده نمایید.
در صورت موفقیت ۰ برمیگرداند.
گزینهها:
- -a, --text
- رفتار با تمام فایلها به عنوان فایل متنی
- -g, --git
- استفاده از قالب تفاضل گسترشیافتهٔ git (پیشفرض: diff.git)
- --binary
- تولید تفاضلهای باینری در حالت git (پیشفرض)
- --nodates
- حذف تاریخها از سرآیندهای diff
- --noprefix
- حذف پیشوندهای a/ و b/ از نام فایلها
- -p, --show-function
- نمایش تابعی که هر تغییر در آن واقع شده است (پیشفرض: diff.showfunc)
- --reverse
- تولید تفاضلی که تغییرات را خنثی (undo) میکند
- -w, --ignore-all-space
- نادیده گرفتن فاصلههای خالی هنگام مقایسهٔ خطوط
- -b, --ignore-space-change
- نادیده گرفتن تغییرات در تعداد فاصلههای خالی
- -B, --ignore-blank-lines
- نادیده گرفتن تغییراتی که تمامی خطوط آنها خالی است
- -Z, --ignore-space-at-eol
- نادیده گرفتن فاصلههای خالی در انتهای خط (EOL)
- -U,--unified <NUM>
- تعداد خطوط متنی پیرامون (context) برای نمایش
- --stat
- خروجی خلاصهای از تغییرات به سبک diffstat
- --root <DIR>
- تولید تفاضلها به صورت نسبی با زیردایرکتوری
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینههای نشاندار با [+] را میتوان چندین بار مشخص کرد.SS وارد کردن/صادر کردن تغییرات (Change import/export)
qimport
وارد کردن یک وصله یا changeset موجود:
hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...
وصله بعد از آخرین وصله اعمالشده در سری (series) درج میشود. اگر هیچ وصلهای اعمال نشده باشد، qimport وصله را به ابتدای سری اضافه میکند.
وصله همان نام فایل منبع خود را خواهد داشت، مگر اینکه با -n/--name نام جدیدی به آن بدهید.
میتوانید یک وصله موجود در دایرکتوری وصله را با پرچم -e/--existing ثبت کنید.
با استفاده از -f/--force، وصله موجود با همان نام بازنویسی خواهد شد.
یک changeset موجود میتواند با -r/--rev تحت کنترل mq قرار گیرد (برای نمونه، qimport --rev . -n patch بازبینی فعلی را تحت کنترل mq قرار میدهد). با -g/--git، وصلههای واردشده با --rev از قالب git diff استفاده خواهند کرد. برای کسب اطلاعات درباره اینکه چرا این موضوع برای حفظ اطلاعات تغییر نام/رونوشت و تغییرات مجوزها اهمیت دارد، به مبحث راهنمای diffs مراجعه کنید. از hg qfinish برای حذف changesetها از کنترل mq استفاده کنید.
برای وارد کردن یک وصله از ورودی استاندارد، علامت - را به عنوان فایل وصله ارسال کنید. هنگام وارد کردن از ورودی استاندارد، نام وصله باید با استفاده از پرچم --name مشخص شود.
برای وارد کردن یک وصله موجود همزمان با تغییر نام آن:
hg qimport -e existing-patch -n new-name
در صورت موفقیتآمیز بودن وارد کردن، مقدار 0 را برمیگرداند.
گزینهها:
- -e, --existing
- وارد کردن فایل موجود در دایرکتوری وصله
- -n,--name <NAME>
- نام فایل وصله
- -f, --force
- بازنویسی فایلهای موجود
- -r,--rev <REV[+]>
- قرار دادن بازبینیهای موجود تحت کنترل mq
- -g, --git
- استفاده از قالب diff گسترشیافته git
- -P, --push
- اجرای qpush پس از وارد کردن
گزینه مشخصشده با [+] را میتوان چندین بار مشخص کرد
narrow
ایجاد کلونهایی که دادههای تاریخچه را برای زیرمجموعهای از فایلها دریافت میکنند (آزمایشی)
تنها سرور کل مخزن را نگهداری میکند: کلونهای narrow تاریخچه کامل تعداد کمتری از فایلها را در مخزن خود خواهند داشت..SS مفاهیم (Concepts)
افزونهٔ narrow تعدادی از مفاهیم را معرفی میکند که در ادامه به تفصیل شرح داده شدهاند.
شکل (Shape) (آزمایشی)
یک شکل (shape) برای تعریف مجموعهای از مسیرها جهت در نظر گرفتن برای کلاینتهای سرور narrow استفاده میشود؛ و این کار را در تمام طول تاریخچه انجام میدهد، صرفنظر از وضعیت این فایلها در سرشاخههای (heads) مخزن (برای مثال حذف شده باشند).
تا نسخهٔ Mercurial 7.2، تنها دامنهٔ محدودی از تمامی ویژگیهای برنامهریزیشدهٔ مرتبط با شکل پیادهسازی شده است. ارتباط مستقیم با شکلها تنها توسط مدیران سرور انجام میگیرد. از آنها میتوان برای تولید narrowspecها (که توسط کلاینتها استفاده میشوند) و ساخت clonebundleهای جریانی narrow استفاده کرد.
این بدان معناست که تا نسخهٔ Mercurial 7.2، کلاینتها هیچ شناختی از شکلها ندارند و برای استفاده از یک clonebundle جریانی برای شکلی مشخص، باید مجموعه الگوهای narrow توسط مدیران سرور در اختیار آنها قرار گیرد:
$ hg clone server --narrow --narrowspec NARROW_SPEC_FILE
اثر انگشت (Fingerprint)
هر شکل با یک مجموعهٔ نرمالسازیشده و کمینه از مسیرهای گنجاندهشده (included) و مستثنیشده (excluded) در store مخزن مطابقت دارد. این نرمالسازی تضمین میکند که بتوانیم یک اثر انگشت (fingerprint) استخراج کنیم؛ به این معنی که دو شکل با اثر انگشت یکسان، با مجموعه مسیرهای یکسانی مطابقت دارند.
بررسی اثر انگشت یک کلون narrow را میتوان با اجرای دستور زیر انجام داد:
$ hg admin::narrow-client --store-fingerprint
در حال حاضر، ما پایداری اثر انگشتها را تضمین نمیکنیم. پیش از آنکه شکلها را از حالت آزمایشی خارج کنیم، طرحی برای نسخهبندی اثر انگشت خواهیم داشت تا امکان تغییرات در آینده بدون ایجاد سردرگمی فراهم شود.
شاردها (Shards)
شاردها در سمت سرور برای تکهتکه کردن store به کار میروند. هر شارد بهصورت مجموعهای از مسیرهایی که شامل میشود تعریف میشود: فایلها یا دایرکتوریهایی که با هر مسیر مطابقت داشته باشند، در آن شارد گنجانده خواهند شد. علاوه بر این، شاردها مانعةالجمع (mutually exclusive) هستند، بدین معنی که یک فایل مشخص در هر لحظه تنها میتواند در یک شارد و فقط در یک شارد قرار گیرد. هنگامی که مسیر یک شارد با یک دایرکتوری مطابقت دارد، آن شارد شامل تمام فایلهای موجود در درخت آن دایرکتوری خواهد بود، به جز فایلهایی که با یک شارد تو در توی عمیقتر مطابقت داشته باشند.
مثال (Example)
با فرض store زیر، که تمامی فایلهای شناختهشده در طول تاریخچهٔ مخزن را نشان میدهد:
.
├── file1
├── file2
└── foo
└── bar
├── baz
│ ├── file1
│ └── file2
└── confidential
├── confidential-file1
└── confidential-file2
میتوان شاردهای زیر را تعریف کرد:
* ``foo``، که شامل ``foo`` است * ``foo.confidential``، که شامل ``foo/bar/confidential`` است
این بدان معنا خواهد بود که شارد foo شامل موارد زیر است:
* ``foo/bar/baz/file1`` * ``foo/bar/baz/file2``
و شارد foo.confidential شامل موارد زیر است:
* ``foo/bar/confidential/confidential-file1`` * ``foo/bar/confidential/confidential-file2``
در این مثال، file1 و file2 در هیچ شارد تعریفشدهٔ صریحی قرار ندارند. در نتیجه، آنها در شارد ضمنی base قرار میگیرند.
توجه به این نکته مهم است که افزودن یک شارد جدید (برای مثال شاردی که شامل file1 و file2 باشد)، مسیرهای آن را از هر شاردی که پیشتر شامل آنها بوده است حذف میکند (در این مورد، تنها base).
در سمت سرور، شاردها برای تعریف شکلها استفاده میشوند که مجموعههایی از شاردها هستند. هر شکل، شاردهایی را که شامل میشود تعریف میکند و در نتیجه محتویات تمامی شاردهای دیگر را مستثنی میسازد.
برای سادهسازی ایجاد شکلها، میتوانیم با تعریف وابستگیهای صریح بین شاردها، آنها را با یکدیگر ترکیب کنیم. در مثال بالا، میتوانیم یک foo.full تعریف کنیم (که خودش نیازی به تعریف هیچ مسیری ندارد)، اما به هر دوی foo و foo.confidential نیاز دارد، که در نتیجه شاردی با زیردرخت کامل store مربوط به foo در اختیار ما میگذارد.
توجه داشته باشید که مجموعه مسیرها در رونوشت کاری (working copy) فعلی ممکن است تنها زیرمجموعهای از store باشد. در این مثال، میتوان تصور کرد که foo/bar/confidential-module به فایلهای موجود در foo/bar/confidential تقسیم شده و از رونوشت کاری حذف شده است.
علاوه بر شارد ضمنی base، شارد ضمنی .hg-files نیز وجود دارد که شامل مسیرهای ویژهای است که توسط Mercurial استفاده میشوند:
* ``.hgignore`` * ``.hgtags`` * ``.hgsub`` * ``.hgsubstate``
این شارد بهطور خودکار در هر Shape گنجانده میشود تا اطمینان حاصل شود که Mercurial دادههای لازم برای کار روی هر بازبینی (revision) را در اختیار دارد..SS "Narrowspec (قدیمی)"
نکته: narrowspec در شکل فعلی خود، از Mercurial 7.2، طی چند نسخه آینده Mercurial به نفع سامانه Shape به تدریج کنار گذاشته خواهد شد. بخش Shapes در برابر narrowspec در ادامه را ببینید.
narrowspec یک پیکربندی سمت کلاینت است که از عبارتهایی برای مطابقت با فایلها و/یا پوشههای راهدور که باید به کلاینت واکشی (pull) شوند تشکیل شده است. narrowspec دارای عبارتهای include و exclude است که در آن موارد exclude همواره بر include اولویت دارند: بدین معنی که اگر فایلی با یک عبارت exclude مطابقت داشته باشد، حتی در صورت مطابقت با یک عبارت include نیز مستثنی خواهد شد. مستثنی کردن فایلهایی که هرگز شامل نشده بودند هیچ تأثیری ندارد.
هر مدخل شاملشده یا مستثنیشده در قالب شرح دادهشده در hg help patterns است، اما فقط میتواند از path: یا rootfilesin: استفاده کند، مگر هنگام استفاده از Shard و Shape که تنها میتوانید از path: استفاده کنید.
Shapes در برابر narrowspec
narrowspec در سال ۲۰۱۸ در کنار افزونه آزمایشی narrow معرفی شد. این قابلیت به کلاینت امکان میداد دقیقاً آنچه را که از سرور میخواهد انتخاب کند، و سرور صرفاً با الگوهایی که کلاینت درخواست میکرد همراهی مینمود.
مگر اینکه این انعطافپذیری در آینده برای کسی واقعاً مهم شود، رویکرد فعلی به سمت منسوخ کردن استفاده از narrowspec و حذف کامل پشتیبانی از آن در نسخههای بعدی به نفع store shapes است.
در اینجا مزایای store shapes آمده است:
* امکان تعریف clonebundles برای الگوهای معمول * امکان تو در تو کردن و ترکیب کلی includeها و excludeها * امکان تولید اثرانگشت (fingerprint) برای الگوهای معادل * امکان الزام توافق سرور و کلاینت روی الگوها * کلاینتها از تغییرات روی سرور آگاه شده و الگوهایشان نامعتبر میشود * امکان ساخت یک سامانه دسترسی قوی بر روی store shapes * حل برخی از مشکلات قدیمی (مانند تجزیه CLI)
برخی از این موارد میتوانستند (و قبلاً نیز شدهاند) بر روی پیادهسازی اولیه سوار شوند، اما به دستاورد چندانی نمیرسیدیم.
نحوه استفاده
پیکربندی سرور
در Mercurial 7.2، فایل .hg/store/server-shapes یک فایل TOML است که باید مستقیماً توسط مدیران سرور narrow ایجاد و ویرایش شود.
هشدار: استفاده از دستور اختصاصی hg برای ویرایش پیکربندی shapes در نسخههای آتی، به محض اینکه چنین دستوری وجود داشته باشد، اجباری خواهد شد؛ زیرا تغییر shapes میتواند منجر به خرابی (گاهی غافلگیرکننده) کلاینت شود.
قالب فعلی (آزمایشی!) به شرح زیر است:
* ``version`` (الزامی): مقدار آن باید ``0`` باشد
* ``shards`` (الزامی): فهرستی از <shardconfig>
* <shardconfig>:
* ``name`` (الزامی): نام رسمی (canonical) برای این shard.
* ``paths`` (اختیاری): فهرستی از مسیرهای UTF8 مرتبط با این shard،
نسبت به ریشه مخزن.
* ``requires`` (اختیاری): فهرستی از نامهای shardهایی که این
shard به آنها وابسته است.
* ``shape`` (اختیاری): اگر ``true`` باشد، این یک shape قابل دسترسی برای کاربر است.
محدودیتها:
* نامهای shard باید درون پیکربندی یکتا باشند * نامهای shard تنها باید شامل بایتهایی باشند که حروف و ارقام کوچک ascii، نقطه یا خط پیوند هستند * ``full``، ``base`` و ``.hg-files`` نامهای رزروشده shard هستند * هر <shardconfig> باید یکی از ``requires`` یا ``paths``، یا هر دو را تعریف کند * وابستگیهای shard نمیتوانند یک چرخه تشکیل دهند * یک مسیر معین نمیتواند در بیش از یک shard قرار گیرد * ``paths`` باید فهرستی از مسیرهای UTF8 باشد. پشتیبانی از مسیرهای غیر UTF8 در نسخههای آتی از طریق فیلد ``encoded_paths`` اضافه خواهد شد * ``paths`` باید فهرستی از مسیرهای معتبر از نظر نحو نسبت به ریشه مخزن باشد (بدون ``\n``، ``\r`` یا ``\x00``، بدون اسلشهای متوالی، بدون اسلش در ابتدا یا انتها، و غیره)
مثال:
version = 0 [[shards]] name = "foo" paths = ["foo", "bar.txt", "baz/nested"] shape = true [[shards]] name = "subproject1" paths = ["subproject1", "utils/only-this-dir"] [[shards]] name = "backend" paths = ["subproject2"] requires = ["subproject1"] shape = true [[shards]] name = "full-stack" requires = ["backend", "foo"] shape = true مدیران سرور بهصورت دستی (و احتمالاً مکرر) clonebundleهای جریانی (streaming) را برای هر shape ایجاد کرده و آنها را همراه با اثر انگشتشان (fingerprint) در مانیفست clonebundle سرور قرار میدهند. در نسخههای آینده، clonebundleهای غیرجریانی نیز پشتیبانی خواهند شد و فرایند تولید آنها خودکارتر خواهد شد. میتوانید بستهها را به روش زیر تولید کنید: $ hg bundle --all --type"none-v2;stream-v2;shape=my-shape" ../bundle.hg $ bundlespec="$(hg debugbundle --spec ../bundle.hg)" $ # [move bundle to static server or to `.hg/bundle-cache` for inline serving] $ bundleentry="https://static.com/bundle.hg BUNDLESPEC=$bundlespec" $ # [or use inline SSH clonebundles] $ bundleentry="peer-bundle-cache://bundle.hg BUNDLESPEC=$bundlespec" $ echo $bundleentry >> .hg/clonebundles.manifest
میتوانید الگوهای include و exclude را برای هر shape استخراج کرده و آنها را بهصورت دستی به کلاینتها بدهید:
$ hg admin::narrow-server --shape-narrow-patterns my-shape [exclude] path:foo path:bar
کلاینتها سپس میتوانند هنگام انجام یک کلون جریانی باریک (narrow stream clone) از الگوهای مذکور استفاده کنند، که اثر انگشت حاصل از الگوها را با اثر انگشت clonebundleهای سرور تطبیق میدهد:
$ hg clone --narrow --narrowspec $NARROWSPECFILE
کلاینت (Client)
TODO: توضیح پیکربندی فعلی سمت کلاینت و چگونگی تکامل احتمالی آن (ذخیره shape، اثر انگشت و غیره).
دستورها (Commands)
نگهداری مخزن (Repository maintenance)
tracked
نمایش یا تغییر narrowspec جاری:
hg tracked [OPTIONS]... [REMOTE]
بدون آرگومان، ورودیهای narrowspec جاری را خط به خط نمایش میدهد. هر خط بهترتیب با پیشوند 'I' یا 'X' برای الگوهای گنجاندهشده (included) یا مستثنیشده (excluded) مشخص میشود.
مشخصهٔ narrowspec شامل عبارتهایی برای تطبیق با فایلها و/یا دایرکتوریهای دوردست است که باید به کلاینت شما pull شوند. مشخصهٔ narrowspec دارای عبارتهای include و exclude است، بهطوری که exclude همیشه بر include اولویت دارد: بدین معنا که اگر فایلی با یک عبارت exclude تطبیق یابد، حتی در صورت تطبیق با یک عبارت include نیز کنار گذاشته خواهد شد. مستثنی کردن فایلهایی که هرگز include نشده بودند، هیچ اثری ندارد.
هر ورودی include یا exclude به قالبی است که در 'hg help patterns' شرح داده شده است.
گزینهها به شما امکان میدهند عبارتهای گنجاندهشده و مستثنیشده را اضافه یا حذف کنید.
در صورت تعیین --clear، تمام includeها و excludeهای قبلی نادیده گرفته شده (DROPPED) و با موارد جدید مشخصشده در --addinclude و --addexclude جایگزین میشوند. اگر --clear بدون هیچ گزینهٔ دیگری مشخص شود، narrowspec خالی خواهد بود و با هیچ فایلی تطبیق نخواهد یافت.
در صورت تعیین --auto-remove-includes، آن دسته از includeهایی که با هیچیک از فایلهای تغییریافته توسط کامیتهای محلی قابل مشاهده فعلی (مواردی که با مخزن دوردست به اشتراک گذاشته نشدهاند) تطبیق ندارند، به مجموعه includeهای مشخصشده صریح برای حذف اضافه خواهند شد.
گزینهٔ --import-rules مسیر فایلی حاوی قوانین را میپذیرد که به شما امکان میدهد قوانین --addinclude و --addexclude را بهصورت دستهجمعی اضافه کنید. همانند سایر سوئیچهای include و exclude، تغییرات بلافاصله اعمال میشوند.
گزینهها:
- --addinclude <VALUE[+]>
- مسیرهای جدید برای گنجاندن (include)
- --removeinclude <VALUE[+]>
- مسیرهای قدیمی که دیگر نباید شامل شوند
- --auto-remove-includes
- انتخاب خودکار includeهای استفادهنشده برای حذف
- --addexclude <VALUE[+]>
- مسیرهای جدید برای مستثنی کردن (exclude)
- --import-rules <VALUE>
- وارد کردن narrowspecها از یک فایل
- --removeexclude <VALUE[+]>
- مسیرهای قدیمی که دیگر نباید مستثنی شوند
- --clear
- تعیین جایگزینی narrowspec موجود
- --force-delete-local-changes
- اجبار به حذف تغییرات محلی هنگام محدودسازی (narrowing)
- --backup
- پشتیبانگیری از تغییرات محلی هنگام محدودسازی (پیشفرض: True)
- --update-working-copy
- بهروزرسانی نسخه کاری (working copy) در صورت تغییر مخزن ذخیرهسازی
- -e,--ssh <CMD>
- مشخص کردن دستور ssh برای استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم بررسی اعتبار گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
گزینههای نشانهگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS notify
قلابهایی برای ارسال اعلانهای پوش (push) ایمیلی
این افزونه قلابهایی را برای ارسال اعلانهای ایمیلی هنگام ارسال یا دریافت مجموعهتغییرها (changesets) توسط مخزن محلی پیادهسازی میکند.
ابتدا افزونه را همانطور که در hg help extensions توضیح داده شده است فعال کنید، و قلابی را که میخواهید اجرا شود ثبت نمایید. قلابهای incoming و changegroup هنگام دریافت مجموعهتغییرها اجرا میشوند، در حالی که قلابهای outgoing برای مجموعهتغییرهای ارسالشده به مخزنی دیگر هستند:
[hooks] # یک ایمیل برای هر مجموعهتغییر دریافتی incoming.notify = python:hgext.notify.hook # یک ایمیل برای تمام مجموعهتغییرهای دریافتی changegroup.notify = python:hgext.notify.hook # یک ایمیل برای تمام مجموعهتغییرهای ارسالی outgoing.notify = python:hgext.notify.hook
این کار قلابها را ثبت میکند. برای فعالسازی اعلانها، مشترکان باید به مخازن اختصاص داده شوند. بخش [usersubs] چندین مخزن را به یک دریافتکنندهٔ مشخص نگاشت میکند. بخش [reposubs] چندین دریافتکننده را به یک مخزن منفرد نگاشت میکند:
[usersubs] # کلید ایمیل مشترک است، مقدار فهرستی از الگوهای مخزن است که با کاما جدا شدهاند user@host = pattern [reposubs] # کلید الگوی مخزن است، مقدار فهرستی از ایمیلهای مشترکان است که با کاما جدا شدهاند pattern = user@host
یک pattern (الگو) یک glob است که مسیر مطلق یک مخزن را مطابقت میدهد، و میتواند بهطور اختیاری با یک عبارت revset ترکیب شود. عبارت revset، در صورت وجود، با یک علامت هش (#) از glob جدا میشود. مثال:
[reposubs] */widgets#branch(release) = qa-team@example.com
این پیکربندی هر زمان که یک مجموعهتغییر روی شاخهٔ release اعلانی را در هر مخزنی که نام آن به widgets ختم میشود فعال کند، پیامی به qa-team@example.com ارسال میکند.
به منظور قرار دادن آنها تحت مدیریت مستقیم کاربر، بخشهای [usersubs] و [reposubs] میتوانند در یک فایل hgrc جداگانه قرار گرفته و با ارجاع گنجانده شوند:
[notify] config = /path/to/subscriptionsfile
اعلانها تا زمانی که مقدار notify.test بر روی False تنظیم نشود ارسال نخواهند شد؛ بخش زیر را ببینید.
محتوای اعلانها را میتوان با مدخلهای پیکربندی زیر تنظیم کرد:
- notify.test
- اگر برابر با True باشد، پیامها به جای ارسال، در stdout چاپ میشوند. پیشفرض: True.
- notify.sources
- فهرستی جداشده با فاصله از منابع تغییرات. اعلانها تنها زمانی فعال میشوند که منبع یک مجموعهتغییر در این فهرست باشد. منابع میتوانند این موارد باشند:
- serve
-
مجموعهتغییرهای دریافتشده از طریق http یا ssh
- pull
-
مجموعهتغییرهای دریافتشده از طریق hg pull
- unbundle
-
مجموعهتغییرهای دریافتشده از طریق hg unbundle
- push
-
مجموعهتغییرهای ارسالی یا دریافتی از طریق hg push
- bundle
-
مجموعهتغییرهای ارسالی از طریق hg unbundle
پیشفرض: serve.
- notify.strip
- تعداد اسلشهای ابتدایی برای حذف از مسیرهای url. بهطور پیشفرض، اعلانها با مسیر مطلق خود به مخازن ارجاع میدهند. notify.strip به شما امکان میدهد آنها را به مسیرهای نسبی تبدیل کنید. برای مثال، notify.strip=3 مسیر /long/path/repository را به repository تبدیل میکند. پیشفرض: 0.
- notify.domain
- دامنهٔ پیشفرض ایمیل برای فرستنده یا دریافتکنندگانی که دامنهٔ صریحی ندارند. همچنین هنگام استفاده از notify.messageidseed برای بخش دامنهٔ Message-Id استفاده میشود.
- notify.messageidseed
- ایجاد سرایندهای (headers) تعینی و یکتای Message-Id برای نامهها بر اساس seed و شناسهٔ بازنگری نخستین کامیت در مجموعهتغییر.
- notify.style
- فایل استایل (style) مورد استفاده هنگام قالببندی ایمیلها.
- notify.template
- قالب (template) مورد استفاده هنگام قالببندی ایمیلها.
- notify.incoming
- قالب مورد استفاده هنگام اجرا بهعنوان قلاب incoming، که اولویت بالاتری نسبت به notify.template دارد.
- notify.outgoing
- قالب مورد استفاده هنگام اجرا بهعنوان قلاب outgoing، که اولویت بالاتری نسبت به notify.template دارد.
- notify.changegroup
- قالب مورد استفاده هنگام اجرا بهعنوان قلاب changegroup، که اولویت بالاتری نسبت به notify.template دارد.
- notify.maxdiff
- حداکثر تعداد خطوط تفاوت (diff) برای درج در ایمیل اعلان. مقدار را 0 بگذارید تا diff غیرفعال شود، یا -1 تا کل آن درج گردد. پیشفرض: 300.
- notify.maxdiffstat
- حداکثر تعداد خطوط diffstat برای درج در ایمیل اعلان. مقدار را -1 بگذارید تا کل آن درج گردد. پیشفرض: -1.
- notify.maxsubject
- حداکثر تعداد نویسهها در خط موضوع (subject) ایمیل. پیشفرض: 67.
- notify.diffstat
- تنظیم روی True برای گنجاندن diffstat پیش از محتوای diff. پیشفرض: True.
- notify.showfunc
- در صورت تنظیم، مقدار diff.showfunc را برای محتوای diff نادیده میگیرد. پیشفرض: None.
- notify.merge
- اگر True باشد، اعلانها برای مجموعهتغییرهای ادغام (merge) ارسال میشوند. پیشفرض: True.
- notify.mbox
- در صورت تنظیم، نامهها به جای ارسال، به این فایل mbox الحاق میشوند. پیشفرض: None.
- در صورت
تنظیم، از
ثبتکنندهٔ
(committer) نخستین
مجموعهتغییر
در یک changegroup
برای فیلد
"From" ایمیل
اعلان
استفاده
میکند. اگر
تنظیم نشده
باشد،
کاربر را از
مخزن
ارسالکننده
(pushing repo)
برمیدارد.
پیشفرض: False..TP
notify.reply-to-predecessor
(آزمایشی)
در صورت
تنظیم و
چنانچه changeset
دارای یک
سلف (predecessor) در
مخزن باشد،
تلاش
میکند
ایمیل
اعلان را در
یک رشته (thread)
با سلف
پیوند دهد.
این کار
سرآیند "In-Reply-To"
را با ارجاع
به سلف
دارای
کوچکترین
شماره
بازبینی به
ایمیل
اعلان
اضافه
میکند.
رشتههای
ایمیل
همچنان
ممکن است
گسسته
شوند،
بهویژه
هنگامی که
changesetها ادغام
(folded) شوند.
این گزینه باید در ترکیب با notify.messageidseed استفاده شود.
در صورت تنظیم، مدخلهای زیر نیز برای سفارشیسازی اعلانها استفاده خواهند شد:
- email.from
- نشانی ایمیل From که در صورت نیافتن هیچ نشانی در محتوای ایمیل تولیدشده، استفاده میشود.
- web.baseurl
- نشانی وب (URL) ریشه مخزن برای ترکیب با مسیرهای مخزن هنگام ایجاد ارجاعها. همچنین notify.strip را ببینید.
pager
مرور خروجی دستور با یک صفحهبند (pager) خارجی (منسوخشده)
فعالسازی اجباری صفحهبندی برای دستورهای جداگانهای که معمولاً با گزینه attend-<command> درخواست صفحهبندی نمیکنند. این تنظیم بر گزینههای ignore و مقادیر پیشفرض ارجحیت دارد:
[pager] attend-cat = false
patchbomb
دستوری برای ارسال changesetها به صورت (مجموعهای از) ایمیلهای وصله
این مجموعه با یک پیام مقدمه به شکل «[PATCH 0 of N]» آغاز میشود که کل مجموعه را شرح میدهد.
هر ایمیل وصله دارای یک خط موضوع (Subject) به شکل «... [PATCH M of N]» است که از خط اول شرح changeset به عنوان متن موضوع استفاده میکند. پیام شامل دو یا سه بخش در بدنه است:
- شرح changeset.
- [اختیاری] نتیجه اجرای diffstat روی وصله.
- خود وصله، همانطور که توسط hg export تولید شده است.
هر پیام با استفاده از سرآیندهای In-Reply-To و References به اولین پیام در مجموعه ارجاع میدهد، بنابراین در برنامههای ایمیلخوان و خبرخوان رشتهای (threaded) و در بایگانیهای ایمیل به صورت یک توالی نمایش داده میشوند.
برای پیکربندی سایر پیشفرضها، بخشی مانند این را به فایل پیکربندی خود اضافه کنید:
[email] from = My Name <my@email> to = recipient1, recipient2, ... cc = cc1, cc2, ... bcc = bcc1, bcc2, ... reply-to = address1, address2, ...
اگر نیاز به لغو تنظیمات نشانی سراسری [email] دارید، از [patchbomb] به عنوان نام بخش پیکربندی استفاده کنید.
سپس میتوانید از دستور hg email برای ارسال مجموعهای از changesetها در قالب یک patchbomb استفاده کنید.
شما همچنین میتوانید گزینه method را در بخش email طوری پیکربندی کنید که یک ارسالکننده سازگار با sendmail باشد، یا بخش [smtp] را پر کنید تا افزونه patchbomb بتواند patchbombها را مستقیماً از خط فرمان بهطور خودکار ارسال کند. برای جزئیات به بخشهای [email] و [smtp] در hgrc(5) مراجعه کنید.
بهطور پیشفرض، اگر سرآیند To یا CC را از طریق پیکربندی یا خط فرمان تعیین نکنید، hg email برای دریافت آن اعلان درخواست (prompt) نمایش میدهد. میتوانید این رفتار را با تعیین یک مقدار خالی لغو کنید تا هرگز درخواستی مطرح نشود:
[email] cc =
میتوانید درج پیشفرض پیام مقدمه را با گزینه پیکربندی patchbomb.intro کنترل کنید. این پیکربندی همواره توسط پرچمهای خط فرمان مانند --intro و --desc بازنویسی میشود:
[patchbomb] intro=auto # include introduction message if more than 1 patch (default) intro=never # never include an introduction message intro=always # always include an introduction message
میتوانید قالبی برای پرچمهایی که باید به پیشوندهای موضوع اضافه شوند تعیین کنید. پرچمهای تعیینشده با گزینه --flag به صورت کلیدواژه {flags} برونریزی میشوند:
[patchbomb]
flagtemplate = "{separate(' ',
ifeq(branch, 'default', '', branch|upper),
flags)}"
میتوانید با تنظیم patchbomb.confirm روی true، patchbomb را طوری تنظیم کنید که همیشه درخواست تایید کند..SS دستورها (Commands)
وارد/صادر کردن تغییرات (Change import/export)
ارسال مجموعهتغییرها از طریق ایمیل:
hg email [OPTION]... [DEST]...
بهطور پیشفرض، diffها در قالبی که توسط hg export تولید میشود، یکی در هر پیام فرستاده میشوند. این مجموعه با یک پیشگفتار به صورت «[PATCH 0 of N]» آغاز میشود که کل مجموعه را شرح میدهد.
هر ایمیل وصله دارای یک خط موضوع (Subject) به صورت «... [PATCH M of N]» است که از نخستین خط شرح مجموعهتغییر به عنوان متن موضوع استفاده میکند. پیام شامل دو یا سه بخش است. نخست، شرح مجموعهتغییر.
با گزینهٔ -d/--diffstat، در صورت نصب بودن برنامهٔ diffstat، نتیجهٔ اجرای diffstat روی وصله درج میشود.
در پایان، خود وصله، همانطور که توسط hg export تولید شده است.
با گزینههای -d/--diffstat یا --confirm، خلاصهای نهایی از تمام پیامها به شما نمایش داده میشود و پیش از ارسال پیامها، تأییدیه خواسته خواهد شد.
بهطور پیشفرض وصله برای بازبینی آسان بهصورت متن در بدنهٔ ایمیل قرار میگیرد. استفاده از گزینهٔ -a/--attach در عوض یک ضمیمه برای وصله ایجاد میکند. با -i/--inline یک ضمیمهٔ درونخطی ایجاد خواهد شد. با ترکیب گزینههای -a/--attach یا -i/--inline با گزینهٔ --body، میتوانید وصله را هم بهصورت متن در بدنهٔ ایمیل و هم بهصورت یک ضمیمهٔ معمولی یا درونخطی قرار دهید.
با -B/--bookmark مجموعهتغییرهای قابل دسترس توسط نشانک (bookmark) مشخصشده انتخاب میشوند.
با -o/--outgoing، ایمیلها برای وصلههایی تولید میشوند که در مخزن مقصد یافت نمیشوند (یا فقط آنهایی که نیاکان بازبینیهای مشخصشده هستند، در صورتی که بازبینیای ارائه شده باشد).
با -b/--bundle، مجموعهتغییرها همانند --outgoing انتخاب میشوند، اما یک ایمیل واحد حاوی یک بستهٔ (bundle) دودویی Mercurial بهصورت ضمیمه ارسال خواهد شد. از گزینهٔ پیکربندی patchbomb.bundletype برای کنترل نوع بسته، مشابه hg bundle --type استفاده کنید.
با -m/--mbox، بهجای پیشنمایش هر پیام patchbomb در یک صفحهبند (pager) یا ارسال مستقیم پیامها، یک فایل صندوق پستی (mailbox) یونیکس شامل ایمیلهای وصله ایجاد خواهد شد. این فایل صندوق پستی را میتوان با هر کلاینت ایمیلی که از فایلهای mbox یونیکس پشتیبانی میکند، پیشنمایش کرد.
با -n/--test، تمام مراحل اجرا خواهند شد، اما ایمیلی ارسال نمیشود. از شما نشانی ایمیل گیرنده، یک موضوع و یک پیام پیشگفتار در شرح وصلههای patchbomb خواسته میشود. سپس هنگامی که همهچیز انجام شد، پیامهای patchbomb نمایش داده میشوند.
در صورتی که ارسال ایمیل با شکست مواجه شود، یک نسخهٔ پشتیبان از پیام پیشگفتار مجموعهٔ خود را در .hg/last-email.txt خواهید یافت.
رفتار پیشفرض این دستور را میتوان از طریق پیکربندی سفارشیسازی کرد. (برای جزئیات به hg help patchbomb مراجعه کنید)
مثالها:
hg email -r 3000 # send patch 3000 only
hg email -r 3000 -r 3001 # send patches 3000 and 3001
hg email -r 3000:3005 # send patches 3000 through 3005
hg email 3000 # send patch 3000 (deprecated)
hg email -o # send all patches not in default
hg email -o DEST # send all patches not in DEST
hg email -o -r 3000 # send all ancestors of 3000 not in default
hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST
hg email -B feature # send all ancestors of feature bookmark
hg email -b # send bundle of all patches not in default
hg email -b DEST # send bundle of all patches not in DEST
hg email -b -r 3000 # bundle of all ancestors of 3000 not in default
hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in DEST
hg email -o -m mbox && # generate an mbox file...
mutt -R -f mbox # ... and view it with mutt
hg email -o -m mbox && # generate an mbox file ...
formail -s sendmail \ # ... and use formail to send from the mbox
-bm -t < mbox # ... using sendmail
پیش از استفاده از این دستور، باید email را در hgrc خود فعال کنید. برای جزئیات به بخش [email] در hgrc(5) مراجعه کنید.
گزینهها:
- -g, --git
- استفاده از قالب diff گسترشیافتهٔ git
- --plain
- حذف سرآیند وصلهٔ hg
- -o, --outgoing
- ارسال تغییراتی که در مخزن مقصد یافت نمیشوند
- -b, --bundle
- ارسال تغییرات ناموجود در مقصد بهصورت یک بستهٔ دودویی
- -B,--bookmark <BOOKMARK>
- ارسال تغییراتی که تنها از طریق نشانک دادهشده در دسترس هستند
- --bundlename <NAME>
- نام فایل ضمیمهٔ بسته (پیشفرض: bundle)
- -r,--rev <REV[+]>
- یک بازبینی برای ارسال
- --force
- اجرا حتی در صورتی که مخزن دوردست نامرتبط باشد (همراه با -b/--bundle)
- --base <REV[+]>
- تعیین یک مجموعهتغییر پایه بهجای مقصد (همراه با -b/--bundle)
- --intro
- ارسال یک ایمیل پیشگفتار برای یک وصلهٔ تکی
- --body
- ارسال وصلهها بهصورت متن درونخطی پیام (پیشفرض)
- -a, --attach
- ارسال وصلهها بهصورت ضمیمه
- -i, --inline
- ارسال وصلهها بهصورت ضمیمههای درونخطی
- --bcc <EMAIL[+]>
- نشانیهای ایمیل دریافتکنندگان رونوشت پنهان (Bcc)
- -c,--cc <EMAIL[+]>
- نشانیهای ایمیل دریافتکنندگان رونوشت (Cc)
- --confirm
- درخواست تأیید پیش از ارسال
- -d, --diffstat
- افزودن خروجی diffstat به پیامها
- --date <DATE>
- استفاده از تاریخ دادهشده بهعنوان تاریخ ارسال
- --desc <FILE>
- استفاده از فایل دادهشده بهعنوان شرح مجموعه
- -f,--from <EMAIL>
- نشانی ایمیل فرستنده.TP -n, --test چاپ پیامهایی که ارسال خواهند شد
- -m,--mbox <FILE>
- نوشتن پیامها در پرونده mbox بهجای ارسال آنها
- --reply-to <EMAIL[+]>
- نشانیهای رایانامهای که پاسخها باید به آنها ارسال شوند
- -s,--subject <TEXT>
- موضوع نخستین پیام (مقدمه یا تکپچ)
- --in-reply-to <MSGID>
- شناسه پیامی که باید به آن پاسخ داده شود
- --flag <FLAG[+]>
- پرچمهایی برای افزودن به پیشوندهای موضوع
- -t,--to <EMAIL[+]>
- نشانیهای رایانامه گیرندگان
- -e,--ssh <CMD>
- مشخص کردن دستور ssh برای استفاده
- --remotecmd <CMD>
- مشخص کردن دستور hg برای اجرا در سمت دوردست
- --insecure
- عدم اعتبارسنجی گواهی سرور (نادیده گرفتن پیکربندی web.cacerts)
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد
phabricator
یکپارچهسازی ساده با Phabricator (آزمایشی)
این افزونه یک دستور phabsend را برای ارسال پشتهای از مجموعهتغییرها به Phabricator، دستور phabread را برای چاپ پشتهای از بازبینیها در قالبی مناسب برای hg import، و دستور phabupdate را برای بهروزرسانی دستهجمعی وضعیتها ارائه میدهد.
همچنین یک نمای «phabstatus» برای hg show فراهم شده است؛ این نما اطلاعات وضعیت دیفرانسیلهای Phabricator مرتبط با مجموعهتغییرهای ناتمام را نمایش میدهد.
بهطور پیشفرض، Phabricator نیازمند Test Plan است که ممکن است مانع از ارسال برخی مجموعهتغییرها شود. این الزام را میتوان با تغییر دادن پیکربندی differential.require-test-plan-field در سمت سرور غیرفعال کرد.
پیکربندی:
[phabricator] # نشانی وب Phabricator url = https://phab.example.com # شناسه مخزن (callsign). اگر یک مخزن دارای نشانی https://$HOST/diffusion/FOO باشد، آنگاه # شناسه آن "FOO" است. callsign = FOO # دستور curl برای استفاده. در صورت عدم تنظیم (پیشفرض)، از کتابخانه داخلی HTTP برای # برقراری ارتباط استفاده میشود. در صورت تنظیم، از دستور مشخصشده curl استفاده میشود. این گزینه # زمانی مفید است که نیاز به مشخص کردن گزینههای پیشرفتهای داشته باشید که بهسادگی # توسط کتابخانه داخلی پشتیبانی نمیشوند. curlcmd = curl --connect-timeout 2 --retry 3 --silent # تلاش مجدد برای دستور ناموفق به تعداد N بار (پیشفرض 0). برای استفاده از افزونه # بر روی اتصالهای ناپایدار مفید است. # # بین هر تلاش مجدد، به میزان `retry.interval` ثانیه منتظر میمانیم. # (پیشفرض ۱ ثانیه). retry = 3 retry.interval = 10 # گزینه retry میتواند بهخوبی با گزینه http.timeout ترکیب شود. # # برای مثال، جهت صرفنظر کردن از درخواست http پس از ۲۰ ثانیه: [http] timeout=20 [auth] example.schemes = https example.prefix = phab.example.com # توکن API. آن را از https://$HOST/conduit/login دریافت کنید example.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx
وارد/صادر کردن تغییرات (Change import/export)
phabimport
وارد کردن وصلهها از Phabricator برای Differential Revisionهای مشخصشده:
hg phabimport DREVSPEC... [OPTIONS]
وصلهها خوانده شده و با شروع از والد دایرکتوری کاری اعمال میشوند.
برای چگونگی مشخص کردن DREVSPEC به hg help phabread مراجعه کنید.
گزینهها:
- --stack
- وارد کردن وابستگیها نیز
- --test-vcr <VALUE>
- مسیر به یک فایل vcr. اگر وجود نداشته باشد، یک رونوشت vcr جدید ضبط میکند، در غیر این صورت تمام درخواستهای http را با استفاده از فایل vcr مشخصشده شبیهسازی (mock) میکند. (پیشرفته)
phabread
چاپ وصلهها از Phabricator به شکلی مناسب برای وارد کردن:
hg phabread DREVSPEC... [OPTIONS]
شناسه DREVSPEC میتواند هویت یک Differential Revision مانند D123 یا صرفاً عدد 123 باشد. همچنین میتواند شامل عملگرهای رایج مانند +، -، &، (، ) برای پرسوجوهای پیچیده باشد. پیشوند : میتواند برای انتخاب یک پشته استفاده شود. اگر چند مقدار DREVSPEC داده شود، نتیجه اجتماع مقادیر ارزیابیشده بهطور جداگانه خواهد بود. در حال حاضر تلاشی برای مرتبسازی مجدد مقادیر برای اعمال از والد به فرزند انجام نمیشود.
وضعیتهای abandoned، accepted، closed، needsreview و needsrevision میتوانند برای پالایش وصلهها بر اساس وضعیت به کار روند. به دلایل کارایی، آنها فقط زیرمجموعهای از انتخابهای غیر وضعیتی را نشان میدهند و نمیتوانند بهتنهایی استفاده شوند.
برای نمونه، :D6+8-(2+D4) یک پشته تا D6 به علاوه D8 را انتخاب کرده و D2 و D4 را مستثنی میکند. :D9 & needsreview ویرایشهای «Needs Review» را در یک پشته تا D9 انتخاب میکند.
اگر --stack مشخص شود، اطلاعات وابستگیها را دنبال کرده و تمام وصلهها را میخواند. این معادل عملگر : است.
گزینهها:
- --stack
- خواندن وابستگیها
- --test-vcr <VALUE>
- مسیر به یک فایل vcr. اگر وجود نداشته باشد، یک رونوشت vcr جدید ضبط میکند، در غیر این صورت تمام درخواستهای http را با استفاده از فایل vcr مشخصشده شبیهسازی (mock) میکند. (پیشرفته)
phabsend
بارگذاری changesetها در Phabricator:
hg phabsend REV [OPTIONS]
اگر چندین ویرایش مشخص شده باشند، به صورت یک پشته با رابطه وابستگیهای خطی با استفاده از ترتیب تعیینشده توسط revset ارسال خواهند شد.
برای نخستین بار بارگذاری changesetها، برچسبهای محلی برای حفظ این ارتباط ایجاد میشوند. پس از بار نخست، phabsend اطلاعات obsstore و برچسبها را بررسی میکند تا متوجه شود که آیا باید یک Differential Revision موجود را بهروزرسانی کند یا موردی جدید بسازد.
اگر --amend تنظیم شده باشد، پیامهای کامیت را بهروزرسانی میکند تا نشانی URL مربوط به Differential Revision را در بر داشته باشند، و برچسبهای مرتبط را حذف میکند. این مشابه کاری است که arcanist انجام میدهد و در جریانهای کاری ارسال توسط مؤلف (author-push) مطلوبتر است. در غیر این صورت، از برچسبهای محلی برای ثبت ارتباط با Differential Revision استفاده میشود.
گزینه --confirm به شما امکان میدهد تا changesetها را قبل از ارسال تایید کنید. همچنین میتوانید عبارت زیر را به فایل پیکربندی خود اضافه کنید تا به عنوان رفتار پیشفرض در نظر گرفته شود:
[phabsend] confirm = true
بهطور پیشفرض، برای هر کامیت انتخابشده یک بازبینی جداگانه ایجاد میشود و همان رابطه والد/فرزند را در Phabricator خواهد داشت. اگر --fold تنظیم شده باشد، چندین کامیت در یک بازبینی واحد تجمیع میشوند، درست مانند اینکه تغییرات از والد اولین ویرایش تا آخرین ویرایش مقایسه (diff) شده باشد. پیامهای کامیت در فیلد خلاصه (summary) در Phabricator به یکدیگر متصل میشوند.
دستور phabsend بخش obsstore و ارتباط فوق را بررسی میکند تا تصمیم بگیرد آیا یک Differential Revision موجود را بهروزرسانی کند یا مورد جدیدی ایجاد نماید.
گزینهها:
- -r,--rev <REV[+]>
- ویرایشها برای ارسال
- --amend
- بهروزرسانی پیامهای کامیت (پیشفرض: True)
- --reviewer <VALUE[+]>
- مشخص کردن بازبینها
- --blocker <VALUE[+]>
- مشخص کردن بازبینهای مسدودکننده
- -m,--comment <VALUE>
- افزودن یک دیدگاه به ویرایشهایی با Diffهای جدید/بهروزشده
- --confirm
- درخواست تایید پیش از ارسال
- --fold
- ترکیب ویرایشها در یک بازبینی واحد
- --test-vcr <VALUE>
- مسیر به یک فایل vcr. اگر وجود نداشته باشد، یک رونوشت vcr جدید ضبط میکند، در غیر این صورت تمام درخواستهای http را با استفاده از فایل vcr مشخصشده شبیهسازی (mock) میکند. (پیشرفته)
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS phabupdate
بهروزرسانی دستهای Differential Revision:
hg phabupdate [DREVSPEC...| -r REV...] [OPTIONS]
DREVSPEC بازبینیها را انتخاب میکند. برای نحوه استفاده، hg help phabread را ببینید.
گزینهها:
- --accept
- پذیرش بازبینیها
- --reject
- رد بازبینیها
- --request-review
- درخواست بازبینی برای بازبینیها
- --abandon
- رها کردن بازبینیها
- --reclaim
- بازپسگیری بازبینیها
- --close
- بستن بازبینیها
- --reopen
- بازگشایی مجدد بازبینیها
- --plan-changes
- برنامهریزی تغییرات برای بازبینیها
- --resign
- انصراف از بازبینیکننده بودن برای بازبینیها
- --commandeer
- تصاحب بازبینیها
- -m,--comment <VALUE>
- ثبت نظر بر روی آخرین بازبینی
- -r,--rev <REV>
- بازبینی محلی جهت بهروزرسانی
- --test-vcr <VALUE>
- مسیر یک فایل vcr. در صورت عدم وجود، یک رونوشت vcr جدید ضبط خواهد شد؛ در غیر این صورت، تمامی درخواستهای http با استفاده از فایل vcr مشخصشده شبیهسازی خواهند شد. (پیشرفته)
purge
دستوری برای حذف فایلهای ردگیرینشده از دایرکتوری کاری (منسوخشده)
قابلیت این افزونه از نسخه 5.7 در هسته اصلی Mercurial گنجانده شده است. لطفاً به جای آن از hg purge ... استفاده کنید. اکنون hg purge --confirm پیشفرض است، مگر اینکه افزونه برای سازگاری عقبرو فعال شده باشد.
rebase
دستوری برای انتقال مجموعهای از بازبینیها به یک نیای متفاوت
این افزونه به شما امکان میدهد مجموعهتغییرات را در یک مخزن موجود Mercurial بازپایهریزی (rebase) کنید.
برای اطلاعات بیشتر: https://mercurial-scm.org/wiki/RebaseExtension.SS "دستورها (Commands)"
دستکاری تغییرات (Change manipulation)
rebase
انتقال مجموعهتغییر (و نوادگان آن) به شاخهای دیگر:
hg rebase [[-s REV]... | [-b REV]... | [-r REV]...] [-d REV] [OPTION]...
دستور rebase از ادغامهای مکرر برای پیوند زدن مجموعهتغییرها از بخشی از تاریخچه (مبدأ) به بخشی دیگر (مقصد) استفاده میکند. این کار میتواند برای خطیسازی تغییرات محلی نسبت به درخت اصلی توسعه مفید باشد.
کامیتهای منتشرشده را نمیتوان rebase کرد (ببینید: hg help phases). برای رونوشت گرفتن از کامیتها، ببینید: hg help graft.
اگر مجموعهتغییر مقصد را مشخص نکنید (-d/--dest)، دستور rebase از همان منطق hg merge برای گزینش مقصد استفاده خواهد کرد. اگر شاخهٔ فعلی دقیقاً شامل یک سرشاخه (head) دیگر باشد، بهطور پیشفرض با آن سرشاخه ادغام میشود. در غیر این صورت، باید یک نسخهٔ بازنگری صریح که باید با آن ادغام صورت گیرد مشخص شود. (مجموعهتغییر مقصد با rebase تغییر نمیکند، بلکه مجموعهتغییرهای جدید به عنوان نوادگان آن افزوده میشوند.)
روشهای انتخاب مجموعهتغییرها به شرح زیر است:
- 1.
- انتخاب صریح آنها با استفاده از --rev.
- 2.
- استفاده از --source برای انتخاب یک مجموعهتغییر ریشه و دربرگرفتن همهٔ نوادگان آن.
- 3.
- استفاده از --base برای انتخاب یک مجموعهتغییر؛ دستور rebase نیاکان و نوادگان آنها را که جزو نیاکان مقصد نیستند، پیدا خواهد کرد.
- 4.
- اگر هیچیک از گزینههای --rev، --source یا --base را مشخص نکنید، دستور rebase مانند حالت بالا از --base . استفاده خواهد کرد.
اگر از --source یا --rev استفاده شود، میتوان از نامهای ویژهٔ SRC و ALLSRC در --dest استفاده کرد. مقصد به ازای هر نسخهٔ بازنگری مبدأ محاسبه میشود؛ به طوری که SRC با آن نسخهٔ بازنگری مبدأ تکی و ALLSRC با تمام نسخههای بازنگری مبدأ جایگزین خواهد شد.
دستور rebase مجموعهتغییرهای اصلی را از بین خواهد برد، مگر اینکه از --keep استفاده کنید. همچنین نشانکهای شما را جابهجا خواهد کرد (حتی اگر از این گزینه استفاده کنید).
برخی مجموعهتغییرها در صورتی که تغییری ایجاد نکنند (برای مثال ادغامها از شاخهٔ مقصد) ممکن است کنار گذاشته شوند.
برخلاف merge، اگر در نوک شاخهٔ یک شاخهٔ نامگذاریشده با دو سرشاخه (head) باشید، rebase کاری انجام نخواهد داد. باید مبدأ و/یا مقصد را بهطور صریح مشخص کنید.
اگر برای خودکارسازی تصمیمگیریهای ادغام/تداخل نیاز به استفاده از یک ابزار دارید، میتوانید آن را با --tool مشخص کنید؛ ببینید: hg help merge-tools. به عنوان یک نکتهٔ هشدار: این ابزار زمانی که فایلی حذف شده باشد برای میانجیگری به کار گرفته نخواهد شد؛ در حال حاضر هیچ قلابی (hook) برای این منظور در دسترس نیست.
اگر یک فرآیند rebase برای حل دستی تداخل متوقف شود، میتوان آن را با --continue/-c ادامه داد، با --abort/-a لغو کرد، یا با --stop متوقف ساخت.
مثالها:
- انتقال
«تغییرات
محلی»
(کامیت جاری
به عقب تا
نقطهٔ
انشعاب) به
نوک شاخهٔ
فعلی پس از
یک pull:
hg rebase
- انتقال یک
مجموعهتغییر
تکی به
شاخهٔ stable:
hg rebase -r 5f493448 -d stable
- پیوند زدن
یک کامیت و
همهٔ
نوادگان آن
به بخشی
دیگر از
تاریخچه:
hg rebase --source c0c3 --dest 4cf9
- انتقال (rebase)
همه چیز در
شاخهای که
با یک نشانک
مشخص شده
روی شاخهٔ default:
hg rebase --base myfeature --dest default
- تجمیع
توالیای
از تغییرات
در یک کامیت
واحد:
hg rebase --collapse -r 1520:1525 -d .
- انتقال یک
شاخهٔ
نامگذاریشده
ضمن حفظ نام
آن:
hg rebase -r "branch(featureX)" -d 1.3 --keepbranches
- تثبیت
مجموعهتغییرهای
یتیم (orphaned) به
منظور خطی
به نظر
رسیدن
تاریخچه:
hg rebase -r 'orphan()-obsolete()' -d 'first(max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::) + max(::((roots(ALLSRC) & ::SRC)^)-obsolete()))'
گزینههای پیکربندی:
اگر گزینهٔ پیکربندی زیر را تنظیم کنید، میتوانید rebase را ملزم به داشتن مقصد کنید:
[commands] rebase.requiredest = True
بهطور پیشفرض، rebase پس از هر کامیت تراکنش را میبندد. برای اهداف مربوط به کارایی، میتوانید rebase را طوری پیکربندی کنید که در تمام طول فرآیند rebase از یک تراکنش واحد استفاده کند. هشدار: این تنظیم در صورت لغو غیرمنتظرهٔ rebase، خطر جدی از دست رفتن کارهایی که در rebase انجام دادهاید را به همراه دارد:
[rebase] singletransaction = True
بهطور پیشفرض، rebase روی رونوشت کاری مینویسد، اما میتوانید آن را برای کارایی بهتر طوری پیکربندی کنید که در حافظه اجرا شود. هنگامی که rebase والد(های) رونوشت کاری (همان «مجموعهتغییرهای در حال حاضر بررسیشده») را جابهجا نمیکند، این حالت حتی در صورت تغییریافته (dirty) بودن رونوشت کاری نیز ممکن است اجازهٔ اجرای آن را بدهد:
[rebase] experimental.inmemory = True مقادیر بازگشتی: در صورت موفقیت 0، و اگر موردی برای rebase وجود نداشته باشد یا تداخلهای حلنشدهای باقی مانده باشند، مقدار 1 بازگردانده میشود. گزینهها:
- -s,--source <REV[+]>
-
انتقال (rebase) مجموعه تغییرات (changeset) مشخصشده و نوادگان آنها
- -b,--base <REV[+]>
-
انتقال (rebase) همه موارد از نقطه انشعابِ changeset مشخصشده
- -r,--rev <REV[+]>
-
انتقال (rebase) این بازبینیها (revision)
- -d,--dest <REV>
-
انتقال (rebase) بر روی changeset مشخصشده
- --collapse
-
ادغام (collapse) مجموعه تغییراتِ rebase شده
- -m,--message <TEXT>
-
استفاده از متن به عنوان پیام کامیتِ ادغام (collapse)
- -e, --edit
-
فراخوانی ویرایشگر برای پیامهای کامیت
- -l,--logfile <FILE>
-
خواندن پیام کامیت ادغام (collapse) از فایل
- -k, --keep
-
نگهداشتن مجموعه تغییرات (changeset) اصلی
- --keepbranches
-
نگهداشتن نامهای اصلی شاخهها
- -D, --detach
-
(منسوخشده)
- -i, --interactive
-
(منسوخشده)
- -t,--tool <VALUE>
-
مشخص کردن ابزار ادغام (merge tool)
- --stop
-
توقف rebase دچار وقفه شده
- -c, --continue
-
ادامه دادن یک rebase دچار وقفه شده
- -a, --abort
-
لغو یک rebase دچار وقفه شده
- --auto-orphans <VALUE>
-
انجام خودکار rebase برای بازبینیهای یتیم در revset مشخصشده (آزمایشی)
- -n, --dry-run
-
اقدامات را انجام نده، فقط خروجی را چاپ کن
- -T,--template <TEMPLATE>
-
نمایش با استفاده از الگو (template)
- --confirm
-
پرسش برای تایید پیش از اعمال اقدامات
گزینههای دارای علامت [+] را میتوان چندین بار مشخص کرد.SS record دستورهایی برای انتخاب تعاملی تغییرات جهت commit/qrefresh (منسوخشده) قابلیت ارائهشده توسط این افزونه به هسته اصلی Mercurial به عنوان hg commit --interactive منتقل شده است.
دستورها (Commands)
ایجاد تغییرات
qrecord
ثبت تعاملی یک وصله (patch) جدید:
hg qrecord [OPTION]... PATCH [FILE]...
برای اطلاعات بیشتر و نحوه استفاده، hg help qnew و hg help record را ببینید.
record
انتخاب تعاملی تغییرات برای ثبت (commit):
hg record [OPTION]... [FILE]...
اگر فهرستی از فایلها مشخص نشود، تمام تغییرات گزارششده توسط hg status نامزد ثبت خواهند بود.
برای فهرستی از قالبهای معتبر برای -d/--date، hg help dates را ببینید.
در صورت استفاده از رابط متنی (به hg help config مراجعه کنید)، برای هر فایل تغییریافته پرسیده میشود که آیا تغییرات ثبت شوند یا خیر، و برای فایلهایی با چندین تغییر، در مورد اعمال هر تغییر سوال خواهد شد. برای هر پرسش، پاسخهای زیر امکانپذیر است:
y - ثبت این تغییر n - نادیده گرفتن این تغییر e - ویرایش دستی این تغییر s - نادیده گرفتن تغییرات باقیمانده این فایل f - ثبت تغییرات باقیمانده این فایل d - پایان، نادیده گرفتن تغییرات و فایلهای باقیمانده a - ثبت تمام تغییرات در تمام فایلهای باقیمانده q - خروج، بدون ثبت هیچ تغییری ? - نمایش راهنما
این دستور هنگام ثبت یک ادغام (merge) در دسترس نیست.
گزینهها:
- -A, --addremove
- علامتگذاری فایلهای جدید/ناموجود به عنوان اضافهشده/حذفشده پیش از ثبت
- --close-branch
- علامتگذاری یک head شاخه به عنوان بستهشده
- --amend
- اصلاح والد دایرکتوری کاری
- -s, --secret
- استفاده از فاز secret برای ثبت
- --draft
- استفاده از فاز draft برای ثبت
- -e, --edit
- فراخوانی ویرایشگر برای پیامهای ثبت
- --force-close-branch
- بستن اجباری شاخه از یک changeset غیر از سرشاخه (head) (پیشرفته)
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن مشخصشده به عنوان پیام ثبت
- -l,--logfile <FILE>
- خواندن پیام ثبت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ ثبت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان committer
- -S, --subrepos
- پیمایش بازگشتی در زیرمخزنها
- -w, --ignore-all-space
- نادیده گرفتن فاصلههای خالی هنگام مقایسه خطوط
- -b, --ignore-space-change
- نادیده گرفتن تغییرات در میزان فاصلههای خالی
- -B, --ignore-blank-lines
- نادیده گرفتن تغییراتی که تمام خطوط آنها خالی است
- -Z, --ignore-space-at-eol
- نادیده گرفتن تغییرات در فاصلههای خالی انتهای خط (EOL)
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد..SS releasenotes
تولید یادداشتهای انتشار از پیامهای کامیت (آزمایشی)
نگهداری فایلهایی که جزئیات تغییرات یک پروژه بین انتشارها را مشخص میکنند، امری رایج است. نگهداری این فایلها میتواند دشوار و زمانبر باشد. دستور hg releasenotes ارائهشده توسط این افزونه، با خودکارسازی این فرایند، آن را سادهتر میکند.
دستورها (Commands)
ناوبری تغییرات (Change navigation)
releasenotes
تجزیهٔ یادداشتهای انتشار از پیامهای کامیت و ذخیره در یک فایل خروجی:
hg releasenotes [-r REV] [-c] FILE
با دریافت یک فایل خروجی و مجموعهای از بازبینیها (revisions)، این دستور پیامهای کامیت را برای استخراج یادداشتهای انتشار تجزیه کرده و سپس آنها را به فایل خروجی اضافه میکند.
یادداشتهای انتشار در پیامهای کامیت بهصورت دستورالعملهای (directives) ReStructuredText تعریف میشوند. این دستورالعملها به شکل زیر هستند:
.. directive:: title content
هر directive با یک بخش در فایل خروجی یادداشتهای انتشار (که خود ساختار ReStructuredText دارد) مطابقت داده میشود. برای مثال، دستورالعمل .. feature:: به بخش New Features نگاشت میشود.
دستورالعملهای یادداشت انتشار میتوانند بهصورت کوتاهنوشت (short-form) یا بلندنوشت (long-form) باشند. در حالت کوتاهنوشت، title حذف شده و یادداشت انتشار بهصورت یک فهرست نشانهدار (bullet list) رندر میشود. در حالت بلندنوشت، یک زیربخش با عنوان title به آن بخش اضافه میگردد.
آرگومان FILE فایل خروجی را مشخص میکند که یادداشتهای انتشار جمعآوریشده در آن نوشته شوند. قالب این فایل بدین صورت است:
Section 1 ========= ... Section 2 ========= ...
تنها بخشهایی که دارای یادداشتهای انتشار تعریفشده هستند، در خروجی تولید میشوند.
اگر یک بخش فقط شامل یادداشتهای کوتاهنوشت باشد، از یک فهرست نشانهدار تشکیل خواهد شد:
Section ======= * Release note 1 * Release note 2
اگر یک بخش دارای یادداشتهای بلندنوشت باشد، زیربخشها در خروجی درج میشوند:
Section ======= Note 1 Title ------------ Description of the first long-form note. Note 2 Title ------------ Description of the second long-form note.
اگر آرگومان FILE به یک فایل موجود اشاره کند، آن فایل برای یافتن یادداشتهای انتشاری که قالبی همانند خروجی این دستور دارند تجزیه میشود. یادداشتهای برگرفته از پیامهای کامیت پردازششده، با این مجموعهٔ تجزیهشده ادغام (merged) خواهند شد.
در طول ادغام یادداشتهای انتشار:
- موارد تکراری بهطور خودکار نادیده گرفته میشوند
- مواردی که متفاوت هستند، در صورتی که میزان شباهت آنها فراتر از یک مقدار آستانه (threshold) باشد، بهطور خودکار نادیده گرفته میشوند.
این بدان معناست که فایل یادداشتهای انتشار میتواند مستقل از این دستور بهروزرسانی شود و هنگام اجرای این دستور روی آن فایل، نباید تغییرات از دست بروند. یک کاربرد مشخص برای این قابلیت، بازبینی و اصلاح نگارش یک یادداشت انتشار پس از اضافه شدن آن به فایل یادداشتهای انتشار است.
گزینهٔ -c/--check پیام کامیت را برای admonitionهای نامعتبر بررسی میکند.
گزینهٔ -l/--list فهرستی از admonitionهای موجود و در دسترس را به همراه عنوان آنها به کاربر نمایش میدهد. این فهرست شامل admonitionهای سفارشی (در صورت وجود) نیز میشود.
گزینهها:
- -r,--rev <REV>
- بازبینیها (revisions) جهت پردازش برای یادداشتهای انتشار
- -c, --check
- بررسی اعتبار admonitionها (در صورت وجود)
- -l, --list
- فهرست کردن
admonitionهای
موجود به
همراه
عنوان
آنها
پیوندهای سخت (hardlinks) بین نسخههای شبیهسازیشده مخزن را مجدداً ایجاد میکند
دستورها (Commands)
نگهداری مخزن (Repository maintenance)
relink
ایجاد مجدد پیوندهای سخت بین دو مخزن:
hg relink [ORIGIN]
هنگامی که مخازن بهصورت محلی شبیهسازی میشوند، فایلهای داده آنها پیوند سخت (hardlink) میشوند تا تنها فضای یک مخزن منفرد را اشغال کنند.
متأسفانه، دریافتهای (pull) بعدی در هر یک از مخازن، پیوندهای سخت را برای تمامی فایلهای دستخوش تغییر توسط مجموعهتغییرات (changesets) جدید میشکند، حتی اگر هر دو مخزن در نهایت تغییرات یکسانی را دریافت کرده باشند.
به همین ترتیب، دادن --rev به “hg clone” مانع از استفاده از هرگونه پیوند سخت شده و منجر به تهیه یک نسخه کپی کامل از مخزن مبدأ میشود.
این دستور به شما امکان میدهد آن پیوندهای سخت را مجدداً ایجاد کرده و فضای تلفشده را بازیابی کنید.
این مخزن مجدداً پیوند داده خواهد شد تا فضا را با ORIGIN، که باید روی همان دیسک محلی باشد، به اشتراک بگذارد. در صورت حذف ORIGIN، ابتدا به دنبال “default-relink” و سپس “default” در [paths] میگردد.
در حین اجرای دستور از انجام هرگونه عملیات خواندن روی این مخزن خودداری کنید. (هر دو مخزن در برابر نوشتن قفل خواهند شد.)
remotefilelog
افزونه remotefilelog باعث میشود Mercurial محتویات فایلها را بهصورت تنبلانه (lazy) دریافت کند (آزمایشی)
این افزونه شدیداً آزمایشی (HIGHLY EXPERIMENTAL) است. هیچ ضمانتی برای سازگاری عقبروی (BACKWARDS COMPATIBILITY) وجود ندارد. این بدان معناست که مخازن ایجادشده با این افزونه ممکن است تنها با نسخه دقیق همین افزونه/Mercurial که استفاده شده بود قابل استفاده باشند. این افزونه برای جلوگیری از خراب شدن مخزن تلاش میکند تا این محدودیت را اعمال کند.
افزونه remotefilelog از طریق دریافت تنبلانه محتویات فایلها و ذخیره آنها در یک حافظه موقت (cache) روی کلاینت به جای ذخیره در revlogها کار میکند. این کار اجازه میدهد تا تاریخچههای بسیار حجیم تنها بهصورت جزئی منتقل شوند و کار با آنها آسانتر گردد.
پیکربندیها:
packs.maxchainlen بیشینه طول زنجیره دلتا را در فایلهای pack تعیین میکند
packs.maxpacksize بیشینه اندازه فایل pack را مشخص میکند
- packs.maxpackfilecount بیشینه تعداد بستهها را در حافظه موقت اشتراکی
-
مشخص میکند (فعلاً فقط برای درختها)
remotefilelog.backgroundprefetch در صورت True بودن، پیشواکشی را در پسزمینه اجرا میکند
- remotefilelog.bgprefetchrevs بازبینیهایی که باید هنگام commit و
-
update، و در سایر دستورهای استفادهکننده از آنها دریافت شوند را مشخص میکند. با pullprefetch متفاوت است.
remotefilelog.gcrepack در صورت True بودن، بازیافت حافظه (garbage collection) را هنگام repack انجام میدهد
- remotefilelog.nodettl بیشینه TTL یک گره را به ثانیه پیش از آنکه
-
بازیافت (garbage collected) شود مشخص میکند
remotefilelog.repackonhggc در صورت True بودن، repack را هنگام اجرای hg gc اجرا میکند
- remotefilelog.prefetchdays بیشینه سن یک کامیت را برحسب روز
-
مشخص میکند که پس از آن دیگر پیشواکشی نمیشود.
- remotefilelog.prefetchdelay میزان تأخیر بین پیشواکشیهای پسزمینه را
-
برحسب ثانیه پس از عملیاتی که والد رونوشت کاری (working copy parent) را تغییر میدهد، مشخص میکند
- remotefilelog.data.gencountlimit حداقل تعداد فایلهای بسته داده را
-
برای در نظر گرفته شدن به عنوان بخشی از یک نسل محدود میکند. بهویژه، حداقل تعداد فایلهای بسته > gencountlimit.
- remotefilelog.data.generations فهرستی برای مشخص کردن حد پایین هر
-
نسل از فایلهای بسته داده. برای مثال، فهرست ['100MB','1MB'] یا ['1MB', '100MB'] به سه نسل منجر میشود: [0, 1MB)، [1MB, 100MB) و [100MB, infinity).
- remotefilelog.data.maxrepackpacks بیشینه تعداد فایلهای بسته برای
-
گنجانده شدن در یک repack افزایشی داده.
- remotefilelog.data.repackmaxpacksize بیشینه اندازه یک فایل بسته برای
-
اینکه در یک repack افزایشی داده در نظر گرفته شود.
- remotefilelog.data.repacksizelimit بیشینه اندازه کل فایلهای بسته
-
برای گنجانده شدن در یک repack افزایشی داده.
- remotefilelog.history.gencountlimit حداقل تعداد فایلهای بسته تاریخچه
-
مورد نیاز برای در نظر گرفته شدن به عنوان بخشی از یک نسل را محدود میکند. بهویژه، حداقل تعداد فایلهای بسته > gencountlimit.
- remotefilelog.history.generations فهرستی برای مشخص کردن حد پایین هر
-
نسل از فایلهای بسته تاریخچه. برای مثال، فهرست ['100MB', '1MB'] یا ['1MB', '100MB'] به سه نسل منجر میشود: [0, 1MB)، [1MB, 100MB) و [100MB, infinity).
- remotefilelog.history.maxrepackpacks بیشینه تعداد فایلهای بسته برای
-
گنجانده شدن در یک repack افزایشی تاریخچه.
- remotefilelog.history.repackmaxpacksize بیشینه اندازه یک فایل بسته
-
برای اینکه در یک repack افزایشی تاریخچه در نظر گرفته شود.
- remotefilelog.history.repacksizelimit بیشینه اندازه کل فایلهای
-
بسته برای گنجانده شدن در یک repack افزایشی تاریخچه.
- remotefilelog.backgroundrepack تجمیع خودکار بستهها در
-
پسزمینه
remotefilelog.cachepath مسیر حافظه موقت (cache)
- remotefilelog.cachegroup در صورت تنظیم، پوشه حافظه موقت را به این
-
گروه sgid میکند
remotefilelog.cacheprocess فایل باینری جهت فراخوانی برای دریافت دادههای فایل
remotefilelog.debug فعالسازی خروجی اشکالزدایی (debug) مخصوص remotefilelog
remotefilelog.excludepattern الگوی فایلهایی که باید از دریافتها (pulls) مستثنی شوند
remotefilelog.includepattern الگوی فایلهایی که باید در دریافتها (pulls) گنجانده شوند
- remotefilelog.fetchwarning: پیامی که باید در صورت رخ دادن بیش از حد
-
دریافتهای تکفایلی نمایش داده شود
remotefilelog.getfilesstep تعداد فایلهای درخواستی در یک RPC واحد
- remotefilelog.getfilestype در صورت تنظیم روی 'threaded' برای دریافت
-
فایلها از نخها (threads) استفاده میکند، در غیر این صورت از دریافت خوشبینانه (optimistic) استفاده میکند
- remotefilelog.pullprefetch یک revset برای انتخاب فایلهایی که
-
باید بهجای حالت تنبل (lazy)، مشتاقانه (eagerly) بارگیری شوند
- remotefilelog.reponame نام مخزن. در صورت تنظیم، برای تفکیک
-
دادهها از سایر مخازن در یک ذخیرهساز مشترک استفاده میشود. remotefilelog.server اگر درست (true) باشد، قابلیتهای سمت سرور را فعال میکند
remotefilelog.servercachepath مسیر ذخیرهسازی موقت (کَش) blobها در سرور
- remotefilelog.serverexpiration تعداد روزهایی که blobهای کَششدهی
-
سرور نگهداری میشوند
- remotefilelog.validatecache در صورت تعیین، بررسی سلامت ورودیهای کَش
-
پیش از بازگرداندن blobها
- remotefilelog.validatecachelog در صورت تعیین، بررسی سلامت ورودیهای کَش
-
پیش از بازگرداندن فراداده (metadata)
دستورها (Commands)
نگهداری مخزن (Repository maintenance)
prefetch
پیشواکشی بازبینیهای فایل از سرور:
hg prefetch [OPTIONS] [FILE...]
بازبینیهای فایل را برای revهای مشخصشده پیشواکشی کرده و آنها را در کَش محلی remotefilelog ذخیره میکند. اگر هیچ rev مشخص نشده باشد، بازبینی پیشفرض استفاده میشود که اجتماع dot، draft، pullprefetch و bgprefetchrev است. میتوان از نامها یا الگوهای فایل برای محدود کردن فایلهای بارگیریشده استفاده کرد.
در صورت موفقیت 0 برمیگرداند.
گزینهها:
- -r,--rev <REV[+]>
- پیشواکشی بازبینیهای مشخصشده
- --repack
- اجرای repack پس از prefetch
- -b,--base <VALUE>
- بازبینیای (rev) که فرض میشود از قبل محلی است
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
دستورهای دستهبندینشده (Uncategorized commands)
gc
جمعآوری زباله (garbage collect) در کَشهای filelog کلاینت و سرور:
hg gc [REPO...]
جمعآوری زباله در کَشهای filelog کلاینت و سرور
repack
hg repack [OPTIONS]
گزینهها:
- --background
- اجرا در یک فرایند پسزمینه
- --incremental
- انجام repack افزایشی
- --packsonly
- تنها
بستهها
(packها)
بازبستهبندی
شوند
(صرفنظر از
اشیاء
منفرد)
hg verifyremotefilelogs <directory>
گزینهها:
- -d, --decompress
- ابتدا filelogها را از حالت فشرده خارج میکند
remotenames
نمایش remotebookmarkها و remotebranchها در واسط کاربری (آزمایشی)
بهطور پیشفرض هر دو مورد remotebookmarks و remotebranches فعال هستند. گزینههای پیکربندی برای کنترل جداگانه آنها به شرح زیر است.
گزینههای پیکربندی برای تغییر رفتار پیشفرض:
- remotenames.bookmarks
- مقداری بولی (Boolean) برای فعال یا غیرفعال کردن نمایش remotebookmarkها (پیشفرض: True)
- remotenames.branches
- مقداری بولی (Boolean) برای فعال یا غیرفعال کردن نمایش remotebranchها (پیشفرض: True)
- remotenames.hoistedpeer
- نام همتایی (peer) که remotebookmarkهای آن باید به فضای نام سطح بالا (top-level) منتقل شوند (پیشفرض: 'default')
schemes
گسترش طرحوارهها (schemes) با میانبرهایی برای مجموعههای مخازن (repository swarms)
این افزونه به شما اجازه میدهد میانبرهایی را برای URLهای والد با تعداد زیادی مخزن تعیین کنید تا مانند یک طرحواره عمل کنند؛ برای مثال:
[schemes] py = http://code.python.org/hg
پس از آن میتوانید به این صورت از آن استفاده کنید:
hg clone py://trunk/
علاوه بر این، امکان پشتیبانی از طرحوارههای پیچیدهتر نیز وجود دارد، برای مثال طرحوارهای که در Google Code استفاده میشد:
[schemes]
gcode = http://{1}.googlecode.com/hg
ساختار نگارشی (syntax) از قالبهای Mercurial برگرفته شده است، و شما به تعداد نامحدودی متغیر دسترسی دارید که با {1} شروع شده و با {2}، {3} و الی آخر ادامه مییابند. این متغیرها بخشهایی از URL دادهشده را که با / جدا شدهاند دریافت میکنند. هر آنچه بهصورت {part} مشخص نشده باشد، صرفاً به انتهای URL افزوده خواهد شد.
برای راحتی، این افزونه بهطور پیشفرض این طرحوارهها را اضافه میکند:
[schemes]
py = http://hg.python.org
bb = https://bitbucket.org
bb+ssh = ssh://hg@bitbucket.org/
gcode = https://{1}.googlecode.com/hg
kiln = https://{1}.kilnhg.com/Repo
میتوانید با تعریف یک طرحوارهٔ جدید با همان نام، طرحوارههای پیشفرض را بازنویسی (override) کنید..SS دستورها
share
اشتراکگذاری تاریخچهای مشترک میان چندین دایرکتوری کاری
افزونهٔ share دستور جدید hg share را برای ایجاد یک دایرکتوری کاری تازه معرفی میکند. این دستور شبیه به hg clone است، اما شامل کپی کردن یا پیوند دادن فضای ذخیرهسازی مخزن نمیشود. این قابلیت امکان کار موازی روی شاخهها یا تغییرات مختلف را بدون تحمیل هزینه از نظر فضای دیسک فراهم میسازد.
نکته: عملیاتهای مخرب یا افزونههایی مانند hg rollback باید با احتیاط استفاده شوند چرا که میتوانند به مشکلات گیجکنندهای منجر شوند.
ذخیرهسازی تجمیعی خودکار برای کلونها
هنگامی که این افزونه فعال باشد، hg clone میتواند طوری پیکربندی شود که فضای ذخیرهسازی را بهطور خودکار در میان چندین کلون به اشتراک بگذارد/تجمیع کند. این حالت عملاً hg clone را به hg clone + hg share تبدیل میکند. مزیت استفاده از این حالت، مدیریت خودکار مسیرهای ذخیرهسازی و تجمیع هوشمند مخازن مرتبط است.
گزینههای پیکربندی share. زیر بر این ویژگی تأثیر میگذارند:
-
مسیر فایلسیستمی که دادههای مخزن مشترک در آن ذخیره میشوند. در صورت تعریف شدن، hg clone بهجای ایجاد یک فضای ذخیرهسازی در داخل هر کلون، بهطور خودکار از ذخیرهساز مخزن مشترک استفاده خواهد کرد.
-
نحوهٔ ساخته شدن نام دایرکتوریها در share.pool.
مقدار «identity» به این معنی است که نام از نخستین مجموعه تغییرات (changeset) در مخزن مشتق میشود. در این حالت، ریموتهای مختلف در صورتی که مجموعه تغییرات اولیه/ریشهٔ یکسان داشته باشند، فضای ذخیرهسازی را به اشتراک میگذارند. در این حالت، مخزن مشترک محلی تجمیعی از تمامی مخازن دوردست یافتشده خواهد بود.
مقدار «remote» به این معنی است که نام از مسیر یا نشانی وب (URL) مخزن مبدأ مشتق میشود. در این حالت، فضای ذخیرهسازی تنها زمانی به اشتراک گذاشته میشود که مسیر یا نشانی وب درخواستشده در دستور hg clone دقیقاً با مخزنی که پیشتر کلون شده است مطابقت داشته باشد.
حالت نامگذاری پیشفرض «identity» است.
به اشتراکگذاری پیشنیازها و پیکربندیهای مخزن مبدأ با اشتراکها:
بهطور پیشفرض، ایجاد یک مخزن مشترک تنها به اشتراکگذاری یک تاریخچهٔ مشترک را فعال میکند و پیشنیازها و پیکربندیها را میان آنها به اشتراک نمیگذارد. این امر ممکن است در برخی موارد به مشکلاتی منجر شود؛ برای نمونه زمانی که قالب ذخیرهسازی را در یک مخزن ارتقا میدهید اما پیکربندیهای مربوطه را در اشتراکها تنظیم نمیکنید.
تنظیم format.exp-share-safe = True امکان به اشتراکگذاری پیکربندیها و پیشنیازها را فراهم میکند. این تنظیم تنها بر اشتراکهایی اعمال میشود که پس از فعالسازی این گزینهٔ پیکربندی ایجاد شدهاند.
برای فعالسازی این مورد در اشتراکهای موجود، گزینهٔ پیکربندی را فعال کرده و عمل reshare را انجام دهید.
جهت انجام reshare برای اشتراکهای موجود، اطمینان حاصل کنید که دایرکتوری کاری شما تمیز است و هیچ فایل ردگیرینشدهای (untracked) وجود ندارد، سپس آن share را حذف کرده و یک share جدید بسازید.
دستورها
ایجاد مخزن
share
ایجاد یک مخزن مشترک جدید:
hg share [-U] [-B] SOURCE [DEST]
مقداردهی اولیهٔ یک مخزن و دایرکتوری کاری جدید که تاریخچهٔ خود (و بهطور اختیاری نشانکها/bookmarks) را با مخزن دیگری به اشتراک میگذارد.
- نکته
- استفاده از rollback یا افزونههایی که تاریخچه را تخریب یا دستکاری میکنند (مانند mq، rebase و غیره) میتواند در کلونهای مشترک باعث سردرگمی قابل توجهی شود. بهویژه، اگر دو کلون مشترک هر دو به یک مجموعه تغییرات (changeset) بهروزرسانی شده باشند و یکی از آنها آن مجموعه تغییرات را با rollback از بین ببرد، کلون دیگر ناگهان از کار خواهد افتاد: تمامی عملیاتها با خطای «abort: working directory has unknown parent» متوقف خواهند شد. تنها راهکار شناختهشده، استفاده از debugsetparents روی کلون آسیبدیده است تا آن را به مجموعه تغییراتی که هنوز وجود دارد بازنشانی کند.
گزینهها:
- -U, --noupdate
- دایرکتوری کاری ایجاد نشود
- -B, --bookmarks
- نشانکها (bookmarks) نیز به اشتراک گذاشته شوند
- --relative
- اشاره به مبدأ با استفاده از یک مسیر نسبی
unshare
تبدیل یک مخزن اشتراکی به یک مخزن عادی:
hg unshare
دادههای store را به مخزن رونوشت کرده و دادههای sharedpath را حذف میکند.
show
دستور یکپارچه برای نمایش اطلاعات گوناگون مخزن (آزمایشی)
این افزونه دستور hg show را ارائه میدهد، که دستوری متمرکز برای نمایش دادههای پرکاربرد مخزن و نماهای مختلف آن دادهها است.
گزینههای پیکربندی زیر میتوانند بر عملکرد این دستور تأثیر بگذارند.
commands
- show.aliasprefix
-
فهرستی از رشتهها که نامهای مستعار را برای نماها ثبت میکنند؛ به عنوان مثال، s بهطور مؤثر گزینههای پیکربندی alias.s<view> = show <view> را برای تمام نماها تنظیم میکند؛ یعنی hg swork دستور hg show work را اجرا خواهد کرد.
نامهای مستعاری که با موارد ثبتشدهٔ موجود تداخل داشته باشند، اعمال نخواهند شد.
دستورها (Commands)
ناوبری تغییرات (Change navigation)
show
نمایش اطلاعات گوناگون مخزن:
hg show VIEW
نمای درخواستشده از دادههای مخزن نمایش داده میشود.
اگر هیچ نمایی درخواست نشود، فهرستی از نماهای دردسترس نشان داده شده و اجرای دستور لغو میشود.
- نکته
- هیچ تضمینی
برای
سازگاری با
نسخههای
پیشین (backwards compatibility)
در خروجی
این دستور
وجود ندارد.
ممکن است
خروجی در هر
نسخهٔ
آیندهٔ Mercurial
تغییر کند.
مصرفکنندگانی که خواهان خروجی پایدار از دستور هستند باید قالبی را از طریق -T/--template مشخص کنند.
فهرست نماهای دردسترس:
bookmarks نشانکها و مجموعه تغییرات (changeset) مرتبط با آنها
stack خط کاری کنونی
work مجموعه تغییراتی که به پایان نرسیدهاند
گزینهها:
- -T,--template <TEMPLATE>
- نمایش با استفاده از قالب مشخصشده
sparse
امکان وارسی تنک (sparse checkout) در دایرکتوری کاری (آزمایشی)
(این افزونه هنوز توسط ضمانتهای سازگاری با نسخههای پیشین محافظت نمیشود. تا زمانی که این اعلان حذف نشود، هر جنبهای از آن ممکن است در نسخههای بعدی دستخوش شکست یا تغییر شود.)
این افزونه اجازه میدهد دایرکتوری کاری تنها شامل زیرمجموعهای از فایلهای یک بازبینی (revision) باشد. این ویژگی امکان اضافه یا مستثنی کردن صریح فایلها یا دایرکتوریهای خاص را فراهم میسازد. کارایی بسیاری از عملیاتهای مخزن با تعداد فایلهای موجود در دایرکتوری کاری نسبت مستقیم دارد؛ بنابراین بارگذاری تنها یک زیرمجموعه از فایلها در دایرکتوری کاری میتواند کارایی را بهبود بخشد..SS فایلهای پیکربندی تنک (Sparse Config Files)
مجموعه فایلهایی که بخشی از یک sparse checkout هستند، توسط یک فایل پیکربندی تنک (sparse config file) تعریف میشوند. این فایل ۳ مورد را مشخص میکند: includeها (فایلهایی که باید در sparse checkout گنجانده شوند)، excludeها (فایلهایی که باید از sparse checkout مستثنی شوند)، و profileها (پیوندها به سایر فایلهای پیکربندی).
قالب فایل با خط جدید (newline) جدا میشود. خطهای خالی و خطهایی که با # آغاز میشوند نادیده گرفته خواهند شد.
خطهایی که با %include `` آغاز میشوند، نشاندهنده یک فایل پیکربندی تنک دیگر برای گنجاندن هستند؛ مانند: ``%include tests.sparse. نام فایل نسبت به ریشه مخزن سنجیده میشود.
خطهای ویژه [include] و [exclude] به ترتیب نشاندهنده بخش موارد گنجاندهشده و مستثنیشده پس از خود هستند. قرار دادن [include] پس از [exclude] غیرمجاز است.
خطهای غیرویژه شبیه به الگوهای فایلی هستند که باید به موارد گنجاندهشده یا مستثنیشده افزوده شوند. نحو این خطها در hg help patterns مستند شده است. الگوها بهطور پیشفرض بهصورت glob: تفسیر میشوند و با ریشه مخزن مطابقت داده میشوند.
الگوهای استثنا (exclusion) بر الگوهای گنجاندن (inclusion) اولویت دارند. بنابراین حتی اگر فایلی بهطور صریح گنجانده شده باشد، یک مدخل [exclude] میتواند آن را حذف کند.
برای نمونه، فرض کنید مخزنی با ۳ دایرکتوری دارید: frontend/، backend/ و tools/. دایرکتوریهای frontend/ و backend/ مربوط به پروژههای متفاوتی هستند و نامعمول است که فردی در حال کار روی یکی، به فایلهای دیگری نیاز داشته باشد. اما tools/ شامل فایلهای مشترک بین هر دو پروژه است. فایلهای پیکربندی تنک شما ممکن است شبیه به این باشند:
# frontend.sparse frontend/** tools/** # backend.sparse backend/** tools/**
فرض کنید اندازه backend رشد میکند، یا دایرکتوریای با هزاران فایل وجود دارد که میخواهید آن را مستثنی کنید. میتوانید نمایه (profile) را برای مستثنی کردن فایلهای خاصی تغییر دهید:
[include] backend/** tools/** [exclude] tools/tests/**
دستورها (Commands)
split
دستوری برای تقسیم یک changeset به مواردی کوچکتر (آزمایشی)
دستورها (Commands)
دستکاری تغییرات (Change manipulation)
split
تقسیم یک changeset به مواردی کوچکتر:
hg split [--no-rebase] [[-r] REV]
بهطور مکرر تغییرات و پیام ثبت (commit message) را برای changesetهای جدید درخواست میکند تا زمانی که چیزی در changeset اصلی باقی نماند.
اگر --rev مشخص نشده باشد، والد دایرکتوری کاری تقسیم میشود.
بهطور پیشفرض، نوادگان متصل و منسوخنشده (non-obsoleted) را بر روی changeset جدید rebase میکند. برای جلوگیری از rebase از --no-rebase استفاده کنید.
گزینهها:
- -r,--rev <REV>
- revision برای تقسیم
- --rebase
- rebase کردن نوادگان پس از تقسیم (پیشفرض: True)
- -d,--date <DATE>
- ثبت تاریخ مشخصشده بهعنوان تاریخ commit
- -u,--user <USER>
- ثبت کاربر
مشخصشده
بهعنوان committer
پاککردن مجموعهتغییرها و نوادگان آنها از تاریخچه (منسوخشده)
قابلیتهای این افزونه از نگارش ۵.۷ در هستهٔ Mercurial گنجانده شده است. لطفاً بهجای آن از hg debugstrip ... استفاده کنید.
این افزونه به شما اجازه میدهد مجموعهتغییرها و تمام نوادگان آنها را از مخزن حذف کنید. برای جزئیات بیشتر، راهنمای دستور را ببینید.
دستورها
نگهداری مخزن
strip
hg strip [-k] [-f] [-B bookmark] [-r] REV...
گزینهها:
- -r,--rev <REV[+]>
- حذف نسخهٔ مشخصشده (اختیاری؛ میتوان نسخهها را بدون این گزینه نیز تعیین کرد)
- -f, --force
- اجبار در حذف مجموعهتغییرها، دور ریختن تغییرات ثبتنشده (بدون پشتیبانگیری)
- --no-backup
- بستهٔ پشتیبان ذخیره نشود
- --nobackup
- بستهٔ پشتیبان ذخیره نشود (منسوخشده)
- -n
- نادیده گرفته میشود (منسوخشده)
- -k, --keep
- دایرکتوری کاری در طول عملیات حذف تغییر داده نشود
- -B,--bookmark <BOOKMARK[+]>
- حذف نسخههایی که تنها از نشانک دادهشده قابل دسترسی هستند
- --soft
- صرفاً حذف مجموعهتغییرها از تاریخچهٔ نمایان (آزمایشی)
- --permit-empty-revset
- بازگرداندن وضعیت موفقیت حتی اگر هیچ نسخهای حذف نشود
گزینههای علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
transplant
دستور پیوند زدن مجموعهتغییرها از شاخهای دیگر
این افزونه به شما اجازه میدهد تغییرات را به نسخهٔ والد دیگری، احتمالاً در مخزنی دیگر، پیوند بزنید (transplant کنید). این پیوند با استفاده از وصلههای 'diff' انجام میشود.
وصلههای پیوندزدهشده در مسیر .hg/transplant/transplants، به عنوان نگاشتی از هش مجموعهتغییر به هش آن در مخزن مبدأ ثبت میشوند.
دستورها
دستکاری تغییرات
transplant
پیوند زدن مجموعهتغییرها از شاخهای دیگر:
hg transplant [-s REPO] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]...
مجموعهتغییرهای انتخابشده همراه با گزارش (log) مجموعهتغییر اصلی، بر روی دایرکتوری کاری فعلی اعمال خواهند شد. مجموعهتغییرها رونوشت میشوند و بنابراین با شناسههای متفاوتی دو بار در تاریخچه ظاهر خواهند شد.
اگر همهچیز در همان مخزن است، استفاده از دستور graft را مد نظر قرار دهید - این دستور از ادغامها استفاده میکند و معمولاً نتیجهٔ بهتری میدهد. اگر مجموعهتغییرها منتشر نشدهاند و میخواهید بهجای رونوشت، آنها را منتقل کنید، از افزونهٔ rebase استفاده کنید.
اگر --log مشخص شود، یادداشتی با قالب زیر به انتهای پیامهای گزارش اضافه خواهد شد:
(transplanted from CHANGESETHASH)
میتوانید با استفاده از گزینهٔ --filter پیام ثبت تغییرات (changelog) را بازنویسی کنید. آرگومان آن با پیام فعلی به صورت $1 و وصله به صورت $2 فراخوانی میشود.
گزینهٔ --source/-s مخزن دیگری را برای انتخاب مجموعهتغییرها مشخص میکند، درست همانطور که گویی موقتاً دریافت (pull) شده است. اگر --branch/-b مشخص شده باشد، این نسخهها هنگام تصمیمگیری برای پیوند زدن مجموعهتغییرها به عنوان رأس (head) استفاده میشوند؛ درست مانند اینکه فقط این نسخهها دریافت شده باشند. اگر --all/-a مشخص شود، تمام نسخهها تا رأسهای مشخصشده با --branch پیوند زده خواهند شد.
مثال:
- •
- پیوند زدن
تمام
تغییرات تا
REV بر روی
نسخهٔ فعلی
شما:
hg transplant --branch REV --all
میتوانید به دلخواه مجموعهتغییرهای پیوندزدهشدهٔ منتخب را به عنوان مجموعهتغییرهای ادغام علامتگذاری کنید. برای پیوند زدن نیاکانِ یک پیوند ادغامشده از شما سؤالی پرسیده نخواهد شد، و میتوانید نوادگان آنها را بهجای پیوند زدن، به طور عادی ادغام کنید.
مجموعهتغییرهای ادغام را میتوان با فراخوانی hg transplant --parent و مشخصکردن مجموعهتغییر والد مناسب، مستقیماً پیوند زد.
اگر هیچ ادغام یا نسخهای مشخص نشود، hg transplant یک مرورگر تعاملی مجموعهتغییر را آغاز خواهد کرد.
اگر اعمال یک مجموعهتغییر با شکست مواجه شود، میتوانید ادغام را دستی اصلاح کرده و سپس با فراخوانی hg transplant --continue/-c کار را از جایی که متوقف شده بود ادامه دهید.
گزینهها:
- -s,--source <REPO>
- پیوند زدن مجموعهتغییرها از REPO
- -b,--branch <REV[+]>
- استفاده از این مجموعهتغییر مبدأ به عنوان رأس
- -a, --all
- دریافت تمام مجموعهتغییرها تا نسخههای مشخصشده در --branch
- -p,--prune <REV[+]>
- نادیده گرفتن REV
- -m,--merge <REV[+]>
- ادغام در REV
- --parent <REV>
- انتخاب والد هنگام پیوند زدن ادغام
- -e, --edit
- فراخوانی ویرایشگر روی پیامهای ثبت
- --log
- افزودن اطلاعات پیوند به پیام گزارش
- --stop
- متوقف کردن عملیات جاری پیوند
- -c, --continue
- ادامه دادن نشست پیوند قبلی پس از رفع تداخلها --filter <CMD> فیلتر کردن changesetها از طریق دستور
گزینهٔ علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد
uncommit
لغو کامیت (uncommit) بخشی یا کل یک changeset محلی (آزمایشی)
این دستور اثر یک کامیت محلی را خنثی کرده و فایلهای متأثر را به وضعیت کامیتنشدهٔ آنها بازمیگرداند. این بدان معناست که فایلهای تغییریافته، اضافهشده یا حذفشده در changeset بدون تغییر باقی خواهند ماند و در نتیجه در دایرکتوری کاری همچنان بهصورت تغییریافته، اضافهشده و حذفشده باقی میمانند.
دستورها
دستکاری تغییرات
unamend
لغو تازهترین عملیات amend روی changeset جاری:
hg unamend
این دستور به نسخهٔ پیشین یک changeset بازمیگردد و دایرکتوری کاری را در همان وضعیتی که پیش از اجرای hg amend قرار داشت رها میکند (برای نمونه، فایلهایی که در قالب amend تغییر یافته بودند، در hg status به عنوان تغییریافته علامتگذاری میشوند)
uncommit
لغو کامیت بخشی یا همهٔ یک changeset محلی:
hg uncommit [OPTION]... [FILE]...
این دستور اثر یک کامیت محلی را خنثی کرده و فایلهای متأثر را به وضعیت کامیتنشدهٔ آنها بازمیگرداند. این بدان معناست که فایلهای تغییریافته یا حذفشده در changeset دستنخورده باقی میمانند و در نتیجه در دایرکتوری کاری همچنان بهصورت تغییریافته باقی خواهند ماند.
اگر هیچ فایلی مشخص نشود، کامیت هرس (prune) خواهد شد، مگر آنکه --keep داده شده باشد.
گزینهها:
- --keep
- اجازه دادن به کامیت خالی پس از uncommit
- --allow-dirty-working-copy
- اجازه دادن به uncommit با وجود تغییرات معوق
- -n,--note <TEXT>
- ذخیرهٔ یک یادداشت هنگام uncommit
- -I,--include <PATTERN[+]>
- شامل کردن نامهای منطبق با الگوهای دادهشده
- -X,--exclude <PATTERN[+]>
- مستثنی کردن نامهای منطبق با الگوهای دادهشده
- -m,--message <TEXT>
- استفاده از متن به عنوان پیام کامیت
- -l,--logfile <FILE>
- خواندن پیام کامیت از فایل
- -d,--date <DATE>
- ثبت تاریخ مشخصشده به عنوان تاریخ کامیت
- -u,--user <USER>
- ثبت کاربر مشخصشده به عنوان کامیتکننده
- -D, --currentdate
- ثبت تاریخ جاری به عنوان تاریخ کامیت
- -U, --currentuser
- ثبت کاربر جاری به عنوان کامیتکننده
گزینهٔ علامتگذاریشده با [+] را میتوان چندین بار مشخص کرد.SS win32mbcs
اجازه استفاده از مسیرهای MBCS با کدگذاریهای دارای مشکل
برخی کدگذاریهای MBCS به دلیل بایتهای کدگذاریشدهشان برای برخی از عملیاتهای مسیر (مانند تفکیک مسیر، تبدیل بزرگی/کوچکی حروف، و غیره) مناسب نیستند. ما چنین کدگذاریهایی (مانند shift_jis و big5) را «کدگذاری دارای مشکل» مینامیم. از این افزونه میتوان برای رفع مشکل این کدگذاریها با پوشش دادن (wrapping) برخی توابع جهت تبدیل به رشته Unicode پیش از انجام عملیات مسیر استفاده کرد.
این افزونه برای موارد زیر مفید است:
- کاربران ویندوز ژاپنی که از کدگذاری shift_jis استفاده میکنند.
- کاربران ویندوز چینی که از کدگذاری big5 استفاده میکنند.
- تمام کاربرانی که از یک مخزن با یکی از کدگذاریهای دارای مشکل روی سیستمفایل غیرحساس به بزرگی و کوچکی حروف (case-insensitive) استفاده میکنند.
این افزونه برای موارد زیر نیاز نیست:
- هر کاربری که در مسیرها فقط از نویسههای ASCII استفاده میکند.
- هر کاربری که از هیچیک از کدگذاریهای دارای مشکل استفاده نمیکند.
توجه داشته باشید که محدودیتهایی در استفاده از این افزونه وجود دارد:
- باید در یک مخزن تنها از یک کدگذاری استفاده کنید.
- اگر مسیر مخزن به 0x5c ختم شود، .hg/hgrc قابل خواندن نیست.
- افزونه win32mbcs با افزونه fixutf8 سازگار نیست.
بهطور پیشفرض، win32mbcs از encoding.encoding تعیینشده توسط Mercurial استفاده میکند. میتوانید کدگذاری را از طریق گزینه پیکربندی مشخص کنید:
[win32mbcs] encoding = sjis
این گزینه برای کاربرانی که میخواهند با پیام لاگ UTF-8 کامیت کنند مفید است.
win32text
انجام تبدیل خودکار خط جدید (منسوخشده)
منسوخشدن: افزونه win32text هر کاربر را ملزم میکند تا افزونه را برای هر کلون بارها و بارها پیکربندی کند، زیرا پیکربندی هنگام کلون کردن کپی نمیشود.
بنابراین ما eol را به عنوان یک جایگزین ایجاد کردهایم. افزونه eol برای پیکربندی خود از یک فایل تحت کنترل نگارش استفاده میکند و از این رو هر کلون از همان ابتدا از تنظیمات درست استفاده خواهد کرد.
برای انجام تبدیل خودکار خط جدید، استفاده کنید از:
[extensions] win32text = [encode] ** = cleverencode: # or ** = macencode: [decode] ** = cleverdecode: # or ** = macdecode:
در صورت عدم انجام تبدیل، برای اطمینان از اینکه تصادفاً CRLF/CR را کامیت نکنید:
[hooks] pretxncommit.crlf = python:hgext.win32text.forbidcrlf # or pretxncommit.cr = python:hgext.win32text.forbidcr
برای انجام همین بررسی روی یک سرور جهت جلوگیری از push یا pull شدن CRLF/CR:
[hooks] pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf # or pretxnchangegroup.cr = python:hgext.win32text.forbidcr کشف و اعلان مخازن در شبکه محلی افزونهٔ zeroconf نمونههای hg serve را از طریق DNS-SD اعلان میکند تا بتوان بدون دانستن آدرس IP سرور، آنها را با استفاده از دستور hg paths کشف کرد. برای اینکه به دیگران اجازه دهید مخزن شما را کشف کنند، hg serve را در مخزن خود اجرا کنید: $ cd test $ hg serve
میتوانید مخازن دارای Zeroconf را با اجرای hg paths پیدا کنید:
$ hg paths zc-test = http://example.com:8000/test
فایلها (FILES)
- /etc/mercurial/hgrc, $HOME/.hgrc, .hg/hgrc
-
این فایل شامل مقادیر پیشفرض و پیکربندی است. مقادیر موجود در .hg/hgrc بر مقادیر $HOME/.hgrc اولویت دارند و اینها نیز بر تنظیمات اعمالشده در پیکربندی سراسری /etc/mercurial/hgrc اولویت دارند. برای جزئیات محتوا و قالب این فایلها، hgrc(5) را ببینید.
- .hgignore
-
این فایل شامل عبارات باقاعده (یک مورد در هر خط) است که نام فایلهایی را که باید توسط hg نادیده گرفته شوند توصیف میکند. برای جزئیات، hgignore(5) را ببینید.
- .hgsub
-
این فایل مکان تمام زیرمخزنها را تعریف کرده و مشخص میکند که دریافتهای زیرمخزن از کجا آمدهاند. برای جزئیات، hg help subrepos را ببینید.
- .hgsubstate
-
این فایلی است که Mercurial در آن تمام وضعیتهای مخزن تودرتو را ذخیره میکند. توجه: این فایل نباید بهصورت دستی ویرایش شود.
- .hgtags
-
این فایل حاوی مقادیر هش changeset و نامهای متنی برچسبها است (هر کدام با فاصله از یکدیگر جدا شدهاند) که متناظر با نسخههای برچسبخوردهٔ محتوای مخزن هستند. محتوای فایل با استفاده از UTF-8 کدگذاری شده است.
- .hg/last-message.txt
-
این فایل توسط hg commit استفاده میشود تا در صورت شکست خوردن کامیت، یک نسخهٔ پشتیبان از پیام کامیت را ذخیره کند.
- .hg/localtags
-
از این فایل میتوان برای تعریف برچسبهای محلی که بین مخازن به اشتراک گذاشته نمیشوند استفاده کرد. قالب فایل مانند .hgtags است، اما با استفاده از کدگذاری محلی سیستم کدگذاری میشود.
برخی دستورها (مانند revert) فایلهای پشتیبانی ایجاد میکنند که به .orig ختم میشوند؛ اگر فایل .orig از قبل وجود داشته باشد و توسط Mercurial ردگیری نشود، رونویسی خواهد شد.
گزارش باگها (BUGS)
احتمالاً موارد زیادی وجود دارد؛ لطفاً در صورت یافتن، آنها را به فهرست پستی (به بخش Resources در زیر مراجعه کنید) ارسال کنید..SH "همچنین ببینید (SEE ALSO)"
نویسنده (AUTHOR)
نوشتهشده توسط Olivia Mackall <olivia@selenic.com>
منابع (RESOURCES)
وبگاه اصلی: https://mercurial-scm.org
مخزن کد منبع: https://www.mercurial-scm.org/repo/hg
فهرست پستی: https://www.mercurial-scm.org/mailman/listinfo/mercurial
کپیرایت و تکثیر (COPYING)
کپیرایت (C) 2005-2026 Olivia Mackall. استفاده آزاد از این نرمافزار تحت شرایط پروانه عمومی همگانی گنو (GNU General Public License) نسخه ۲ یا هر نسخهٔ بالاتر مجاز است.
نویسنده (AUTHOR)
Olivia Mackall <olivia@selenic.com>
سازمان: Mercurial