Mercurial

**Merkuriy** ( —&#x2009;"simob, mobil"), **Hg** nomi bilan ham tanilgan (simob kimyoviy elementi nomidan) - bu juda katta kod omborlari bilan samarali ishlash uchun mo'ljallangan, o'zaro platformalarda taqsimlangan versiyani boshqarish tizimi. Birinchidan, bu konsol dasturi.

Mercurial Git yaratilishiga olib kelgan bir xil to'qnashuvdan chiqdi. Yangi tizim muallifi Mett *Makkall* edi.

## Tavsif
Mercurial tizimi Python da yozilgan, garchi unumdorlikka sezgir bo'lgan qismlar (masalan, diff ning o'z ilovasi kabi) C da kengaytma modullari sifatida amalga oshirilgan. Rust ham ish faoliyatini yaxshilash uchun ishlatiladi. Mercurial dastlab Linux uchun yozilgan, keyinchalik Windows, Mac OS X va ko'pgina Unix tizimlariga ko'chirilgan. Mercurial omborlari `hg` buyruq qatori vositasi yordamida boshqariladi, ammo GUI-lar ham mavjud.

Versiyalarni boshqarish tizimlarining an'anaviy xususiyatlari bilan bir qatorda, Mercurial to'liq markazlashtirilmagan ishlarni (asosiy kodlar ombori tushunchasi yo'q), tarmoqlanishni (bitta loyihaning bir nechta filiallarini saqlab turish va filiallar o'rtasida o'zgarishlarni nusxalash mumkin), omborlarni birlashtirishni (qaysi) qo'llab-quvvatlaydi. ishning "taqsimlanishiga" erishadi). HTTP / HTTPS, SSH orqali va qo'lda paketlangan o'zgarishlar to'plamidan foydalangan holda omborlar o'rtasidagi aloqani qo'llab-quvvatlaydi.

`hg` yordam dasturi ixcham interfeysga ega va Mercurial, masalan, git  ga qaraganda osonroq o'rganish hisoblanadi.

## Tushunchalar

### Ish jarayoni
Mercurial - bu taqsimlangan (markazlashtirilmagan) versiyani boshqarish tizimi. Bu shuni anglatadiki, ish jarayoni odatda quyidagicha ko'rinadi:

# Shaxsiy kompyuterda yangi ombor yaratiladi (mavjud omborni klonlash, yangisini yaratish va hokazo). P.);
# Fayllar ushbu omborning ishchi katalogida o'zgartiriladi/qo'shiladi/o'chiriladi;
# O'zgartirishlar ushbu omborga (ya'ni shaxsiy kompyuterdagi mahalliy omborga) kiritilgan;
# 2 va 3-bosqichlar qancha kerak bo'lsa, shuncha takrorlanadi;
# Boshqa odamlarning o'zgarishlar to'plami olib tashlanadi (torting);
# O'zgarishlarni birlashtirish (birlashtirish);
# O'ziga beriladi (surish).

Ya'ni, barcha kundalik ishlar mahalliy omborda amalga oshiriladi va zarurat tug'ilganda, ularning ish natijalari bir yoki bir nechta boshqa omborlarga yuboriladi. Mercurial-ni majburiyat bajarilganda avtomatik ravishda boshqa omborlarga o'zgartirish kiritish uchun sozlash orqali masofaviy omborlar bilan ishlashda qadamlar sonini kamaytirishingiz mumkin.

### Konsol dasturi
Konsol dasturi shunday amalga oshiriladiki, har qanday buyruq nomi, uning nomi bir ma'noli bo'lib qolsa, uni qisqartirish mumkin. Bundan tashqari, ba'zi buyruqlar taxalluslarga ega. Masalan, `hg commit` o'rniga `hg commi`, `hg comm` yoki `hg com` ni yozishingiz mumkin, lekin agar siz `hg c` yozsangiz, Mercurial bu buyruqni bajarishdan bosh tortadi va "c" buyrug'i noaniq ekanligini aytib, buyruqlar ro'yxatini beradi. bu qisqartma ostida. Siz `hg co` dan `hg commit` uchun stenografiya sifatida foydalana olmaysiz, chunki u `hg update,` lekin `hg ci` stenografiyasi mavjud.

### O'zgarishlar to'plamining mantiqiy tuzilishi

`hg commit` buyrug'ini chaqirganingizda, o'zgarishlar amalga oshiriladi. Shu bilan birga, dastur omborga bir qator o'zgarishlarni saqlaydi (o'zgartirishlar  yoki qayta ko'rib chiqish). Jismoniy jihatdan bir xil o'zgarishlar sizniki kabi sodir bo'ladi, lekin ular nusxada emas, balki xizmat fayllarida saqlanadi (batafsilroq " Sahna orqasida").

Qoida tariqasida, kiritilgan barcha o'zgarishlar to'plami katta ulangan tarmoq (grafik) sifatida ko'rsatiladi, bu yerda har bir o'zgartirish to'plami bir yoki ikkita boshqasi bilan bog'lanadi.

Siz `hg log --debug` buyrug'i yordamida amalga oshirilgan o'zgarishlar to'plami bilan bog'langan asosiy o'zgarishlar to'plamining identifikatorlarini topishingiz mumkin. Har bir o'zgartirish to'plamida ikkita ota-ona bo'ladi (bu ombor ichida tarmoqqa ajratish imkonini beradi, `hg -v help branch` qarang). "-1:0000000000000000000000000000000000000000" qiymati ota-onaning yo'qligini bildiradi. Masalan, ombordagi birinchi oʻzgartirishlar toʻplami ikkala ota-ona uchun ham ushbu qiymatga ega boʻladi, keyingi oʻzgarishlar toʻplami esa ikkinchi ota-ona uchun bu qiymatga ega boʻladi (agar ular uchun omborda tarmoqlanish ishlatilmagan boʻlsa) va birinchi ota-onada Oldingi oʻzgarishlar toʻplamidagi identifikator.

Ishchi katalogni bir xil o'zgarishlar to'plami sifatida ko'rib chiqish ham foydalidir (ular hali amalga oshirilmagan, lekin tez orada ham amalga oshirilishi mumkin). Ishchi katalog, shuningdek, `hg parents` buyrug'i bilan topilishi mumkin bo'lgan bir yoki ikkita ota-ona o'zgarishlar to'plami bilan bog'langan. O'zgartirishlar kiritilgandan so'ng, bu ota-onalar yangi (allaqachon amalga oshirilgan) o'zgarishlar to'plamining ota-onasi bo'ladi.

### To'plam identifikatorini o'zgartirish
Tahrirlar quyidagi xususiyatlar bilan tan olinadi :

* qayta ko'rib chiqish raqami;
* o'zgarishlar to'plami identifikatori;
* teglar (teg);
* filial nomi.

#### Tahrir raqami
Qayta ko'rib chiqish raqami - bu o'zgarishlar to'plamining omborga qo'shilish tartibini ifodalovchi butun son. Qayta ko'rib chiqish raqami noldan boshlanadi, avtomatik ravishda o'zgarishlar to'plamiga tayinlanadi va o'zgarishlar to'plamini aniqlash uchun ishlatilishi mumkin. Har bir ombor klonida bir xil o'zgartirishlar to'plamining qayta ko'rib chiqish raqami boshqacha bo'lishi mumkin. `hg log` buyrug'ining chiqishida qayta ko'rib chiqish raqamini yo'g'on nuqtadan oldin ko'rish mumkin (masalan, "4:e1be1898f374").

#### To'plam identifikatorini o'zgartirish
O'zgarishlar to'plami identifikatori raqamlar va "a, b, c, d, e, f" harflaridan iborat SHA-1 xeshi bo'lib, masalan, "e1be1898f3747386c41c8a5c5776e87373f6d3d3". O'zgarishlar to'plamining identifikatori avtomatik ravishda har bir o'zgarishlar to'plamiga tayinlanadi, bu o'zgarishlar to'plamining mazmunidan hisoblanadi va shuning uchun barcha omborlarda bir xil o'zgarishlar to'plamiga mos keladi. Ikki xil o'zgartirish to'plami uchun bir xil SHA-1 xeshi yaratilganda to'qnashuv ehtimoli juda kichik.

Mercurial uni buyruqlarda ishlatishda to'liq identifikator qatorini talab qilmaydi, unga faqat kerakli o'zgarishlar to'plamini noyob tarzda aniqlaydigan boshlang'ich qismi kerak (aks holda Mercurial noaniqlik haqida xabar beradi). `hg log` buyrug'ining chiqishida o'zgarishlar to'plamining identifikatorini ikki nuqtadan keyin ko'rish mumkin (masalan, "4:e1be1898f374"). `--debug` opsiyasisiz `hg log` buyrug'i to'liq o'rniga qisqartirilgan (12 belgidan iborat) o'zgarishlar to'plami identifikatorini chop etadi.

#### Teglar
Qayta ko'rib chiqish raqami va o'zgarishlar to'plami identifikatoriga qo'shimcha ravishda, Mercurial har bir o'zgartirish to'plamiga teglar (yoki **teglar**) deb ataladigan bir yoki bir nechta ixtiyoriy ramziy nom berish imkoniyatini beradi. Teglar `hg tag` buyrug'i yordamida tayinlanadi va barcha qo'shilgan teglarni `hg tags` buyrug'i yordamida ko'rish mumkin. Teg nomi ba'zi belgilarni o'z ichiga olmaydi (masalan, ": "), Mercurial `hg tag` buyrug'ini bajarishda kerak bo'lganda xabar beradi.

#### Filial nomi
Har bir filialning o'z nomi bor. Filial yaratilganda ko'rsatiladi va boshqa hech qachon o'zgarmaydi.

## Aniq bo'lmagan holatlar

* Agar raqam buyruqqa qayta koʻrib chiqish identifikatori sifatida uzatilsa, Mercurial tahrir raqami unga uzatilgan deb hisoblaydi va agar koʻrsatilgan tahrir raqami bilan oʻzgarishlar toʻplami boʻlmasa, faqat qisqartirilgan oʻzgarishlar toʻplami identifikatori bilan farq qiladi. Misol uchun, agar omborda "6" tahrir raqamiga ega bitta o'zgartirishlar to'plami va "647362ac74d76124267215af1a3f94aa9707dfdf" identifikatorli boshqa o'zgarishlar to'plami ("6" bilan boshlanadi), `hg log -r 6` noaniqlik haqida xabar bermasdan birinchi o'zgarishlar to'plami haqida xabar beradi. **Shuning uchun, agar global identifikator raqam bilan boshlansa, uni har doim faqat harf o'z ichiga olguncha qisqartirish foydali bo'ladi.** Bu xatti-harakatlar Mac OS X 10.7.4 ostida 2.2.1 versiyada kuzatilgan.
* Agar siz "5" kabi nomli teg yaratsangiz, omborda "5" tahrir raqamlari bo'lgan o'zgarishlar to'plami mavjud bo'lganda (yoki kelajakda bo'ladi), u holda Mercurial birinchi navbatda tahrir raqami bo'yicha o'zgarishlar to'plamini qidiradi. Ammo agar siz omborda "e1be" bilan boshlanadigan o'zgarishlar to'plami identifikatori mavjud bo'lganda (yoki kelajakda bo'ladi) "e1be" kabi nomli teg yaratsangiz, Mercurial o'zgarishlar to'plamini birinchi navbatda teglar bo'yicha qidiradi. Bundan tashqari, ikkala holatda ham noaniqlik haqida xabar berilmaydi. **Shu sababli, faqat raqamlar va / yoki harflardan iborat teglar yaratish tavsiya etilmaydi "a, b, c, d, e, f"**. Bu xatti-harakatlar Mac OS X 10.7.4 ostida 2.2.1 versiyada kuzatilgan.
* Siz bo'sh papkani omborga qo'sha olmaysiz (bu muammoni hal qilish uchun siz papkaga istalgan faylni qo'yishingiz mumkin, masalan, readme.txt). Buning sababi shundaki, Mercurial papkalarni kuzatmaydi, faqat fayllar. Xulq-atvor tizimni soddalashtirish uchun ataylab amalga oshiriladi va hozircha hech qanday o'zgarishlar rejalashtirilmagan.

## O'ziga xos xususiyatlar
git dan farqli o'laroq, Mercurial yanada qat'iy ishlash modelini o'z zimmasiga oladi, uning eng diqqatga sazovor jihatlari :

* "Halol filiallar" - har qanday filialni boshidanoq kuzatish mumkin;
* O'zgarishlarni revlog ko'rinishida saqlash (git-dagi blobdan farqli o'laroq);
* Bitta o'tishda faqat ikkita filialni birlashtirish mumkin (git bir nechta birlashtirishga ruxsat beradi);
* Majburiyatni bekor qilishning iloji yo'qligi - buning o'rniga siz tuzatuvchini yuborishingiz kerak, u bajarilmaganning ustiga qo'yiladi;
* Qattiqroq farq nazorati sukut bo'yicha yagona standartga amal qiladi va turli versiyalar va mijozlar o'rtasidagi ziddiyatlarni bartaraf qiladi.

## Qo'shimcha mablag'lar
Mercurial omborlarga veb-interfeysni taqdim etish uchun CGI skriptlari bilan birga keladi.

TortoiseHg grafik qobig'i mavjud bo'lib, u Windows (Explorer integratsiyasi bilan) va Linux ostida (alohida dastur sifatida yoki Gnome/Nautilus integratsiyasi bilan) ishlaydi. Linux va Windows uchun ishlab chiqilayotgan hgtui konsol mijozi mavjud (cygwin yordamida).

Atlassian, shuningdek, hg va svn va git-ga kirishni ta'minlaydigan SourceTree mijozini targ'ib qilmoqda.

Bir qator ishlab chiqish muhitlari Microsoft Visual Studio, IntelliJ IDEA, Eclipse, Qt Creator (2.0 versiyasidan beri). PIDA kabi Mercurial imkoniyatlariga ega., NetBeans. Emacs tarkibiga kiritilgan universal VC paketi yordamida Mercurial bilan Emacs ichidan ishlash mumkin.

Mercurial uchun eksperimental yordam Trac da mavjud. Redmine loyihasi, shuningdek, Mercurial omborlarini saqlaydi.

Tailor yordam dasturi  yoki konvertatsiya kengaytmasi  yordamida boshqa versiyalarni boshqarish tizimlarining, jumladan CVS, Subversion, Git, Perforce, Darcs, GNU Arch, Bazaar ning  repozitoriylarini aylantirish mumkin.

## Mercurial yordamida loyihalar
Ko'pgina bepul dasturiy ta'minotni ishlab chiqish loyihalarida Mercurial asosiy versiyani boshqarish tizimi sifatida ishlatiladi. Ular orasida:
* 
* GNU Multi-Precision Library
* GNU Octave
* 
* 
* LiquidFeedback
* Mozilla
* Nginx
* 
* Pidgin
* 
* 
* Tryton
* wmii
* XEmacs
* Xine
GCC, Vim, Emacs va Linux yadrosi kabi boshqa loyihalar asosiy omborlarining simob oynalari qo'llab-quvvatlanadi.

Mercurial’dan uzoq vaqt foydalanilgan, lekin 2019—2021-yillarda Git’ga oʻtgan loyihalar orasida Adium, CLISP, Illumos, Coin3D, OpenJDK, SDL bor.

## Eslatmalar

## Havolalar

* Mercurial bosh sahifasi )
* Merkuriy hujjatlari  (rus. )
* Mercurial: To'liq qo'llanma (rus. ) (boshqa formatlar)
* Mercurial haqidagi maqolalar to'plami  (rus. )

## Adabiyotlar

*