Основы Mercurial
Материал из Xgu.ru
- Короткий URL: hg/start
На основе: http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart (англ.)
Содержание |
[править] Задание имени пользователя
По-умолчанию Mercurial использует имя пользователя вида 'user@localhost' для фиксации изменений. Это часто бессмысленно. Рекомендуется указать настоящий адрес электронной почты в файле ~/.hgrc (на Windows-системах в %USERPROFILE%\Mercurial.ini), для этого добавить строки наподобие:
[ui] username = John Doe <john@example.com>
[править] Работа над существующим проектом
Если у вас есть URL проекта, его можно скопировать командой:
$ hg clone http://selenic.com/hg mercurial-repo requesting all changes adding changesets adding manifests adding file changes added 6623 changesets with 12734 changes to 911 files updating working directory 796 files updated, 0 files merged, 0 files removed, 0 files unresolved
Создаётся новый каталог (в данном случае mercurial-repo), в который переносится вся история проекта и делается чекаут верхнего набора изменений (ipmost changeset).
[править] Создание нового проекта
Начинается всё с того, что создаётся новый репозиторий:
$ cd project/ $ hg init # creates .hg
Mercurial будет искать файл .hgignore в корне вашего хранилища, который содержит набор глобальных паттернов и регулярных выражений для игнорирования путей к файлам. Пример файла .hgignore:
syntax: glob *.orig *.rej *~ *.o tests/*.err syntax: regexp .*\#.*\#$
Проверить файл .hgignore можно командой:
$ hg status # show all non-ignored files
Будет выведен список файлов, которые не проигнорированы с флагом '?' (не отслеживаются). Отредактируйте ваш .hgignore пока не будут отображаться только те файлы, за которыми вы хотите следить. Вы же хотите следить за изменениями .hgignore тоже! Но, возможно, вы не хотите следить за файлами, сгенерированными во время процесса сборки приложения. Как только вы будете удовлетворены списком файлов, которые должны быть добавлены, зафиксируйте изменения:
$ hg add # add those 'unknown' files $ hg commit # commit all changes, edit changelog entry
[править] Клонирование, коммит, мердж
$ hg clone project project-work # clone repository $ cd project-work $ <make changes> $ hg commit $ cd ../project $ hg pull ../project-work # pull changesets from project-work $ hg merge # merge the new tip from project-work into our working directory $ hg commit # commit the result of the merge
Если нужно просто посмотреть, что будет перенесено из другого репозитория по pull, но не выполнять переноса в действительности:
$ hg incoming
Или аналогично для push:
$ hg outgoing
[править] Добавление, удаление файлов
$ hg add file $ hg remove file $ hg add --after file # если файл уже удалён из каталога, нужно только удалить из репозитория $ hg revert file # восстановить удалённый из каталога файл из репозитория
Есть команда add-remove, которая добавляет в репозиторий новые файлы в каталоге и удаляет старые.
$ hg add-remove $ hg commit -m '...'
Или тоже самое:
$ hg commit -A -m '...'
[править] Экспорт патча
(какие-то изменения)
$ hg commit $ hg export tip # export the most recent commit
[править] Сетевая поддержка
# clone from the primary Mercurial repo foo$ hg clone http://selenic.com/hg/ foo$ cd hg # update an existing repo foo$ hg pull http://selenic.com/hg/ # export your current repo via HTTP with browsable interface foo$ hg serve -n "My repo" -p 80 # push changes to a remote repo with SSH foo$ hg push ssh://user@example.com/hg/
[править] Публикация в сети
http://www.selenic.com/mercurial/wiki/index.cgi/PublishingRepositories (англ.)
[править] Кодировка
Если основная кодировка для репозитория UTF-8 (как для файлов, так и для комментариев к ним), то нужно установить
import os os.environ["HGENCODING"] = "UTF-8"
в файле hgwebdir.cgi.
Можно установить параметр enconfig в файле hgrc, но если не указывать переменную окружения HGENCONDIG, комментарии к ревизиям могут выводиться в неверной кодировке (а сами файлы ревизий — как надо).
[править] Преобразование репозитория
Для преобразования CVS-репозитория в репозиторий Mercurial на машине должно быть установлены:
- cvs (обычный cvs-клиент)
- cvsps (программа для создания патчсетов на основе информации в CVS)
После этого нужно сделать cvs checkout для проекта, который переносится в репозиторий Mercurial или, если работа с проектом уже велась, воспользоваться существующим ранее сделанным каталогом с проектом.
Само преобразование:
%$ hg convert module
Здесь module — имя каталога, в котором находится срез проекта, сделанный при помощи cvs checkout.
Будет создан каталог module-hg, в котором будет находиться Mercurial-репозиторий проекта. Если нужно чтобы репозиторий находился в другом каталоге, его нужно указать в качестве второго аргумента команды hg convert:
%$ hg convert module /path/to-/new/repo-dir
Перенос кода в репозиторий Mercurial из репозитория CVS или git также можно выполнить при помощи программы convert-repo.
Для переноса кода из репозитория Subversion, существует программа hgsvn [1].
[править] Дополнительная информация
[править] Разное
[править] Как указать куда делать push по умолчанию?
Указываете в файле hgrc (например, в .hg/hgrc, который находится в корне проекта)
[paths] default-push = ssh://username@host.net/hg/hello-world/