Основы Mercurial

Материал из Xgu.ru

Перейти к: навигация, поиск
Короткий URL: hg/start

На основе: http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart (англ.)

< Mercurial

Содержание

[править] Задание имени пользователя

По-умолчанию 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/