Как клонировать репозитарий Mercurial

Posted by

Я использую в своих наработках система хранения ветвления на базе Mercurial. Просто так случилось, что мне надоело писать/копировать наработанное из документа в документ если он дополнялся или изменялся. И я решился уже на 100% что буду использовать Mercurial для всего: скрипты, документы и т. д. Вот только мало создать репозитарий, нужно же выкачивать и на тестовую систему чтобы, к примеру производить базовую настройки систем.

Задача: разобрать, как клонировать репозитарий с основной системы на тестовую дабы каждый раз не заниматься копирование/вставка

Находясь на тестовой системе Ubuntu 18.04 Server пробую склонировать репозитарий (с основной) посвященный базовой настройки системы:

ekzorchik@srv-bionic:~$ hg clone http://172.40.40.7/dproject

Command 'hg' not found, but can be installed with:

sudo apt install mercurial

ekzorchik@srv-bionic:~$ sudo apt-get install mercurial -y

Снова пробую, но пока не знаю как нужно правильно указывать путь:

ekzorchik@srv-bionic:~$ hg clone http://172.40.40.7/dproject

abort: error: Connection refused

Снова пробую, но указываю ключи для вывода диагностической информации дабы разобраться что я делаю не так:

ekzorchik@srv-bionic:~$ hg --verbose --debug clone http://172.40.40.7/dproject

using http://172.40.40.7/dproject

sending capabilities command

abort: error: Connection refused

Смотрю текущую версию пакета Mercurial в системе:

ekzorchik@srv-bionic:~$ hg --version | head -n 1

Mercurial Distributed SCM (version 4.5.3)

На основной машине запускаю из директории проекта:

ekzorchik@navy:~/dproject$ hg serve (поднимается локальный Web-сервис, доступный при обращении к текущему хосту с указанием порта 8000)

listening at http://navy:8000/ (bound to *:8000)

172.40.40.25 - - [18/Aug/2018 00:19:37] "GET /?cmd=capabilities HTTP/1.1" 200 -

172.40.40.25 - - [18/Aug/2018 00:19:38] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=zstd,zlib,none,bzip2

172.40.40.25 - - [18/Aug/2018 00:19:38] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=230386b990839810f4bfbdca3b87a9c0d494c7b8&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=zstd,zlib,none,bzip2

А на гостевой тогда могу уже запустить команду склонировать репозитарий:

ekzorchik@srv-bionic:~$ hg --verbose --debug clone http://172.40.40.7:8000 dproject

using http://172.40.40.7:8000/

sending capabilities command

query 1; heads

sending batch command

requesting all changes

sending getbundle command

bundle2-input-bundle: with-transaction

bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported

adding changesets

add changeset 5fe9ad8f69df

add changeset 8b5f7c4e5a68

add changeset f90fcc49e1f7

add changeset 6059f155dbd9

add changeset 230386b99083

adding manifests

adding file changes

adding default revisions

adding majordomo revisions

added 5 changesets with 5 changes to 2 files

bundle2-input-part: total payload size 10090

bundle2-input-part: "listkeys" (params: 1 mandatory) supported

bundle2-input-part: "phase-heads" supported

bundle2-input-part: total payload size 24

bundle2-input-bundle: 2 parts total

checking for updated bookmarks

updating the branch cache

new changesets 5fe9ad8f69df:230386b99083

updating to branch default

resolving manifests

branchmerge: False, force: False, partial: False

ancestor: 000000000000, local: 000000000000+, remote: 230386b99083

default: remote created -> g

getting default

1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Итого: нужно разобрать как настроить постоянный доступ к репозитариям через Web-интерфейс или же использовать так когда в написании заметок есть необходимость.

Хотя ведь можно клонировать репозитарий не только через http обращение, но и через ssh. Теперь вопрос как это сделать?

ekzorchik@srv-bionic:~$ sudo apt-get install openssh-server -y

ekzorchik@srv-bionic:~$ sudo apt-get install mercurial -y

ekzorchik@srv-bionic:~$ hg clone ssh://ekzorchik@172.40.40.7://home/ekzorchik/dproject

The authenticity of host '172.40.40.7 (172.40.40.7)' can't be established.

ECDSA key fingerprint is SHA256:QSpiI6xIgpkV8Vb2qM6lIXeLa2zCz2yOXcZGTgrgve4.

Are you sure you want to continue connecting (yes/no)? yes

remote: Warning: Permanently added '172.40.40.7' (ECDSA) to the list of known hosts.

ekzorchik@172.40.40.7's password:

destination directory: dproject

requesting all changes

adding changesets

adding manifests

adding file changes

added 5 changesets with 5 changes to 2 files

new changesets 5fe9ad8f69df:230386b99083

updating to branch default

1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Проверяю содержимое склонированного репозитария:

ekzorchik@srv-bionic:~$ ls dproject/ -al

total 16

drwxrwxr-x 3 ekzorchik ekzorchik 4096 Aug 18 00:31 .

drwxr-xr-x 7 ekzorchik ekzorchik 4096 Aug 18 00:31 ..

-rwxrwxr-x 1 ekzorchik ekzorchik 1017 Aug 18 00:31 default

drwxrwxr-x 4 ekzorchik ekzorchik 4096 Aug 18 00:31 .hg

Ага я действительно его себе склонировал и могу уже из него запустить скрипт на исполнение.

ekzorchik@srv-bionic:~$ sudo ./dproject/default

[sudo] password for ekzorchik:

Работает. Вот и еще раз я убедился что не стоит совершать однообразные действия, а учиться использовать различные инструменты в самообразовании которые здорово упрощают работу. И инструмент Mercurial как раз один из них.

На заметку: Данная заметка применима, как к Ubuntu 18.04 Server так и к Ubuntu 16.04 Server. Проверено от 21.08.2018

На этом у меня пока все, с уважением автор блога Олло Александр aka ekzorchik.