Теперь о командах Меркуриала. Я покажу вам список блатных команд. Есть мануалы в которых описаны команды, которые вы очень редко будете использовать. Для начала нужно осмотреться. Установите hg - меркуриал. Я покажу вам установку на дебианоподобные операционные системы.
#установка hg на debian, ubuntu
sudo apt-get install mercurial
# файл помощи
hg -h
# описание одной команды
hg add -h
hg version
#Mercurial Distributed SCM (version 4.0)
Запустим в тестовом проекте hg. Теперь создадим несколько файлов для теста.
# создание репозитория, если вы внутри репозитория, то выполняйте эту команду
hg init
# создание репозитория project, если вы внутри репозитория,
# то выйдите на уровень выше cd ..
hg init project
# создаем файл
echo "test mercurial" > README.me
#если у вас линукс, то установите утилиту tree
sudo apt-get install tree
.hg
├── 00changelog.i
├── requires
└── store
# проверка состояния
hg status
#вывод: ? README.me
Теперь нужно добавить файлы в индекс. Индекс - это файлы добавленные для последующего фиксирования. Если случится коммит, то файлы из индекса попадут в коммит. Перед коммитом всегда проверяют файлы в индексе. Перед коммитом нужно сохранить настройки пользователя: имя пользователя + email. Без этих настроек не получится сделать коммит.
# добавляем файлы в репозиторий
hg add
#вывод: A README.me
# добавляет неотслеживаемые файлы и помечает отсутствующие файлы как удаленные
hg addremove
#Отметьте указанные файлы, чтобы они больше не отслеживались
hg forget file
echo "[ui]" > ~/.hgrc
echo "username = Ivan Ivanov " >> ~/.hgrc
#создание первого коммита
hg commit -m "first revision"
#создание коммита. вам придётся делать описание коммиту своими руками
hg commit
#временное сохранение изменений, аналог git stash:
hg shelve
#вывести список сохраненных изменений
hg shelve --list
#вернуть изменения в рабочий каталог
hg unshelve
#для сохранений можно задать собственные имена
hg shelve --name
hg unshelve
Теперь осмотр файлов. Лог - это просмотр коммитов. Комманда hg log выдаст список коммитов. Самый первый коммит который вы увидите - это самый последний коммит. Поледний коммит - самый свежий коммит. Например, changeset: 7:b43f03eb72cc - 7 - это номер коммита, b43f03eb72cc - хеш сумма. По ней вы будете просматривать изменения и откатываться к нужному состоянию. Можно использовать номер коммита или хеш-сумму.
Осмотрим логи
#просмотр логов
hg log
#просмотр логов с подробностями
hg log -v
#просмотр логов c демонстрацией кода
hg log -p
#просмотр несколких коммитов
hg log -r 0:2
#показывает изменение последнего коммита
hg tip
#показ с мельчайшими подробностями
hg tip -vp
#последние изменения с подробностями
hg log -p -r -1
#смена визуального стиля вывода
hg log --style coal
hg log --style gitweb
hg log --style monoblue
hg log --style paper
hg log --style spartan
#просмотр изменений с подробностями
hg export b9a405b8937e
hg log -r b9a405b8937e -p
#чтение файла
hg cat command.sh
#чтение файла из 8 ревизии
hg cat -r 8 command.sh
#чтение файла между 2 ревизиями
hg cat -r 9:8 command.sh
Просмотр изменений не в индексе. Если вы уже добавили файл в индекс, то смотрите при помощи команды hg status
#просмотр изменений
hg diff
#просмотр изменений выбранного файла
hg diff command.sh
echo 'select * from table1;' > text1.txt
#вывод
diff -r 2b2ac0459d10 text1.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/text1.txt Fri May 03 20:41:56 2019 +0300
@@ -0,0 +1,1 @@
+select * from table1;
Команда hg remove - помечает файлы как запланированные для удаления из репозитория. Файлы на диске не будут удалены до тех пор, пока вы не зафиксируете изменения. Ради понимания переключайтесь с одного коммита на другой hg update 0, затем hg update 1. Вы должны в коммитах создать разные по имени файлы.
#удаление файла
hg remove
#перебегаем на самый первый коммит
hg update 0
#вывод
.
└── README.me
#возвращаемся на последний коммит
hg update 1
#вывод
.
├── file6.txt
├── README.me
├── text1.txt
├── text2.txt
├── text3.txt
├── text4.txt
└── text5.txt
Теперь немного о работе с ветками. Нужно уметь создавать ветки hg branch my и переключаться между ветками hg update my.
#обновление до новой головной ревизии
hg update
#рабочий каталог проверяется на наличие незафиксированных изменений
hg update -c
#сброс индекса, файлы с кодом не удаляются
hg update --clean
#отменить незафиксированное слияние (потеря изменения), применять при мержах
hg update --clean my
#Для объединения двух голов
hg merge
#если вы находитесь на ветке default и у вас есть изменения в ветке my,
#то вы можете принять изменения из ветки my
hg merge my
#коммит после merge
hg commit -m 'Merged changes'
#текущая ветка
hg branch
#default
#создание новой ветки
hg branch my
#список всех веток
hg branches
#Отзыв набора изменений
hg backout
#Отзыв последней ревизии (tip)
hg backout -m 'back out second change' tip
#Отзыв ревизии, не являющейся последней
hg backout --merge -m 'back out second change' 1
#откат выбранного файла до фиксированного изменения
hg revert command.sh
#откат всех файлов до зафиксированного состояния
hg revert --all
hg revert -a