Открыть меню    

Система контроля версий mercurial

Есть три системы контроля версий (svn, mercurial, git).

Дмитрий Афанасьев о mercurial

Для меркуриала существует своя графическая среда - Tortoise HG (тортила).

При установке Tortoise HG (то есть достаточно установить тортилу) устанавливается и MercurialHg.

Создаем тестовые проект

Все манипуляции с репозитарием происходят при помощи программы hg.

Создадим репозитарий в командной строке:

hg init

- создать новый репозиторий в текущей папке (реп-й можно определить по наличии папки .hg).

Hg Workbench и TortoiseHg

Hg Workbench - это запуск основной графической программы при работе с репозитарием.

TortoiseHg - отдельные команды для отдельных операций.

Добавить существующие файлы в репозиторий:

hg status

- просмотр статуса репозитария ( знак
? - говорит о том, что файлы репозиторию неизвестны;
M - modify);


hg add

- добавляем файлы в реп-й; или через тортилу: Tortoise HG - add files

Но данные файлы еще в репозитарий не добавились.

Добавляем файлы в репозитарий (выполняем commit / фиксация).

После нажатия на кнопку Commit (Фиксировать) выбранные файлы заносятся в репозитарий.

Commit в командной строке:

hg commit –m "<description>" -u<user name>

(user name без кавычек и слитно с -u).

Например, hg commit –m "commit hi"

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

Например, в ветке default будет вестись "текучка", а в новой ветке будет новый функционал.

Затем мы объединим ветку default с новой веткой (выполним merge).

Работу над новым функционалом начинаем в ветке default и во время коммита создадим новую ветку.

Создаем новую ветку через интерфейс: нажимаем по кнопке branch: default (имя ветки)open new branch (пишем название новой ветки) – create Branch.

Переключаем ветки (переходи обратно на ветку default), но через командную строку*:

hg up <название ветки> -C

up (сокращенное от update; при переключении веток с флагом все незакомиченные изменения будут утеряны!

*В командную строку через интерфейс TortoiseHG можно перейти следующим образом: хранилище (Repository) – терминал (terminal).

ПЕРЕКЛЮЧАЕМСЯ НА ДРУГУЮ ВЕТКУ (посредством графической оболочки):

Клик по ветке (последний кружок текущей ветки - правая кнопка мыши - update (обновить)). Этим мы переключимся на ветку new_branch. Таким образом мы переключаемся между ветками.

Замечание: Рекомендуется регулярно заливать главную ветку во второстепенную (то есть переключились на ветку new_branch и заливаем в нее default (основная ветка) ). Чем чаще это делать, тем меньше будет конфликтов.

То есть, например, заливаем данные из ветки default (главная ветка) во второстепенную ветку (new_branch), находясь на ветке new_branch (текущая):

Последний кружок ветки default - правая кнопка мыши - merge with local (слить с локальной копией)

Правило: ЛЮБАЯ ВЕТКА ПРИ ОБЪЕДИНЕНИИ (MERGE) БУДЕТ ЗАЛИВАТЬСЯ В ТЕКУЩУЮ ВЕТКУ.

Конфликт:

При конфликтах нажимаем по resolved (улажены). Выбираем опцию Tool Resolve (Уладить средством (правильнее инструментом)) - выбираем средство (kdiff3noauto) - трехсторонее сравнение неавтоматизированное.

Программа kdiff3noauto состоит из 3-х окон:

  • 1 окно это базовые изменения;
  • 2-е (центральное) окно это текущие изменения;
  • 3-е эта ветка, которую мы хотим merge-ть с нашей текущей веткой.
  • Нижнее окно - результат.

Выбор окон (а также нужных данных) делаем при помощи кнопок A, B, C. И в результирующем окне появляется те изменения, которые мы выбрали по нажатию на окна (A, B, C). По конфликтам перемещаемся при помощи стрелок (верх, низ).

Становится активной кнопка save. Чтобы появилась кнопка save должен быть выбор (A, B, C) по всем изменениям, по которым мы ходим стрелкой верх/низ. Сохранились и выходим.

Файлы с расширением .orig появляются во время конфликтов и как бы "про запас", на случай если вы затерли что-то важное.

.hgignore

добавляем исключения - то что будет определено в файле hgignore не будет отправлено при PUSH.

glob - означает, что далее будут описания файлов и папок с масками используемые в операционных системах ("*","?").

regexp - далее будет описание файлов с регулярными выражениями.

Например:

syntax: glob

# игнорируем папку tmp
tmp
# игнорируем файл (все файлы, в которых содержится имя
# local)
config/*local*.ini

syntax: regexp

# папке htdocs/upload/ игнорируем все файлы кроме
# файлов с расширением jpg и png
htdocs/upload/.+?\. (? ! (jpg|png)) . +

Работа над проектом в команде

Работа с mercurial над проектом в команде

remote server bitbucket.org

Создал репозитарий на сайте bitbucket.org. Использовать bitbucket.org гораздо удобнее, чем организовывать собственный сервер и открывать там репозиторий. Бесплатного доступа обычно хватает на небольшую группу программистов.

Итак, регистрируемся на bitbucket.org и создаем наш первый репозиторий.

Сделаем так, чтобы данные нашего проекта попали в репозиторий. То есть при push изменения должны будут отправляться на bitbucket.org (на созданный ранее репозиторий). Если у вас уже есть локальный проект, то выбираем (I have an existing project) и получаем инструкции, которые мы должны внести в наш проект, но, если настроить как по инструкции, то при каждом push будет требоваться пароль и т.д. Поэтому настроим (автоматизируем: чтобы при клике на push в Hg Workbench данные сразу отправлялись на удаленный репозиторий и т.д.) следующим образом:

Нам потребуется файл hgrc (папка .hg)

И файл (находится: пользователи – имя_пользователя – ) mercurial.ini.

В hgrc добавляем (Копируем адрес нашего реп-я):

[paths]
default = https://denzlll@bitbucket.org/denzlll/test_repo_mer

и вставляем его в hgrc + выше добавляем директиву [paths].

В mercurial.ini добавляем:

[auth]
bb.prefix = https://denzlll@bitbucket.org/denzlll/test_repo_mer
bb.username = denzlll
bb.password = 10198211kost

, где

  • bb.prefix – путь к нашему репозиторию;
  • bb.username - имя пользователя;
  • bb.password – пароль.

Далее откроем Hg Workbench нашего проекта. Выше мы настроили автоматизацию для связи нашего репозитория с главным. Нажимаем PUSH, тем самым проталкиваем все на удаленный сервер.

Клонирование репозитория

Клонировать проект будем с удаленного сервера расположенного на bitbucket.org.

В bitbucket.org кликаем по кнопке clone. Копируем ссылку.

На папке (в которую клонируем проект) вызываем clone, затем в source (источник) указываем путь откуда клонируем; в destination (назначение) указываем путь куда клонируем. Все копия проекта создана.

При создании новой ветки и комита, а затем проталкивании в удаленные репозиторий произойдет ошибка (255) - ?. В любом случае, чтобы протолкнуть изменения созданные на новой ветке в репозиторий необходимо в терминале использовать команду:

hg pus -f

разное

Hg Commit - это так называемая фиксация, запоминаем изменения. (или добавляем новые файлы)

Hg Workbench - посмотреть все версии (ревизии)

Слить с локальной - merge

В любой момент можно откатиться на какую-либо ревизию: выбираем ревизию и обновить. Этим мы переходи в выбранную ревизию и выделяется отдельная ветка для вышестоящих ревизий.

Комментарии к статье

аватарка пользователя
2017-09-03
Злобный Прохожий

Чайник учит чайников, при этом сам путается в основах местами. Найс рофлишь!

аватарка пользователя
2017-09-03
denz

скорее шляпа тот , кто пользуется этой шнягой в 2017

аватарка пользователя
2019-05-17
Чурбек

Ахахха, респектосище за Бойку и Чамберса))