Предыдущий ролик Следующий ролик  

Видео урок: Внесение, получение изменений, возврат и отслеживание истории

Принципы контроля версий

ОК, у нас есть рабочее хранилище HG. Пора добавить несколько файлов и внести их в систему. Mercurial отличается от других систем тем, что мы должны выполнить одну инициализацию глобально, прежде чем мы сможем вносить в систему файлы. Мы должны создать в профиле пользователя файл под названием Mercurial.ini, и внутри него поместить наше имя пользователя и адрес электронной почты. Поэтому мы введем Notepad, %userprofile%\Mercurial.ini. Он не существует, и мы хотим его создать.

Я скопировал необходимый текст в буфер обмена, так что вы введете ui, затем username = и ваше имя пользователя, и здесь вы введете свой адрес электронной почты. Помните, что это не настоящий адрес электронной почты. Не пытайтесь отправить на него письмо. Хорошо, теперь Mercurial полностью инициализирован. Мы можем добавить в систему какой-нибудь код. Итак, давайте откроем Блокнот и создадим файл. В него мы поместим содержимое страницы с сообщениями об ошибках для нового проекта о хайку.

Мы выберем то, с чем сталкивались мы все, прежде чем начали использовать контроль версий. "With searching comes loss\n", "and the presence of absence:/n", и концовка "My Novel\" not found.\n". Ну, по крайней мере, вы его уже не увидите, когда станете экспертом по системам контроля версий. ОК. Сохраним его. Теперь, если мы выполним hg status, вы можете увидеть, что HG видит файл, но не знает, что с ним делать.

Таким образом, мы должны сказать ему, что этот новый файл нужно добавить в хранилище, hg add f1.c. Хорошо, теперь мы можем снова спросить у HG статус и увидеть, что файл готов для внесения в систему. Так как мы создали наш файл Mercurial.ini здесь вверху, мы можем закоммитить файл, hg commit -m "Initial Checkin". ОК. Теперь, если мы спросим у Hg статус снова, вы увидите, что ничего не происходит. Затем мы введем hg log и вы можете видеть, что он выводит пять строк для каждого набора изменений.

Если вы посмотрите на первую строку, то увидите идентификатор набора изменений. Сейчас в Mercurial есть два числа, одно из них (в этом случае 0) - это локальный идентификатор, который вы можете использовать для возврата и создания версий. Это мы увидим позже в этом уроке. Второе - это хэш, который уникально идентифицирует этот набор изменений, чтобы, например, при экспорте или сохранении в удаленном хранилище этот набор изменений отличался от других наборов с номером 0, которые могли быть добавлены другими пользователями.

Вы можете видеть имя пользователя, которое мы установили в файле Mercurial.ini, дату, короткое сообщение и так далее, а также tag: tip - это то же самое, что и Git Head, и, по существу, это значит, что этот набор изменений представляет самую последнюю версию хранилища. Поэтому он называется tip, как верхушка айсберга, и содержит самые последние изменения. Итак, теперь давайте сделаем еще одно изменение, чтобы увидеть контроль версий HG в действии. Мы откроем наш файл, изменим свой My Novel на Website, а затем сохраним его.

На этот раз мы выполним hg commit, но мы не будем вводить сообщение коммита в командной строке, а откроем Блокнот и введем многострочное сообщение. Итак, мы вводим Change My Novel to Website, This is a better change for modern times. Сохраняем его. Теперь, если мы выполним hg log, вы увидите только короткое сообщение.

Если вы хотите увидеть полное сообщение коммита, вы должны ввести hg log -v. И здесь вы можете увидеть наш набор изменений номер 1. Вместо summary здесь теперь написано description. ОК. Теперь давайте сделаем еще одно изменение, а затем посмотрим, как делать возврат. Еще раз, мы откроем f1.c, изменим Website на Webpage и сохраним его. Если мы запустим hg diff, вы можете видеть, что, если бы мы закоммитили это изменение, то вместо Website у нас бы стояло слово Webpage, и, как видите, здесь показана разница между содержимым вашего рабочего набора и содержимым хранилища.

Обратите внимание, что в этом случае у нас есть только один файл. Если бы у вас было 25 файлов, и вы бы ввели hg diff, то увидели бы разницу для всех файлов. Вы можете попросить систему показать вам различия только для одного файла, введя hg diff f1.c. Теперь мы получим такой же результат, так как у нас только один файл, но теперь вы понимаете, как просмотреть различия для отдельного файла. Для команды diff есть еще много дополнительных опций, так что вы можете попросить систему показать различия между файлами в разное время или между рабочим набором и определенным набором изменений.

Если мы введем hg log, мы увидим, что у нас есть набор изменений 1 и набор изменений 0. Например, если мы введем hg diff -r 0, система покажет нам различия между нашей текущим рабочим набором со словом webpage, и первоначальным коммитом с My Novel. ОК. Теперь давайте выполним возврат к последнему коммиту, и для этого мы введем hg revert и имя нашего файла. Затем мы выводим f1.c, и вы можете видеть, что мы вернулись к слову website. Вы можете вернуться к любому набору изменений, а не только самому верхнему, введя команду revert и указав набор изменений. Для примера мы введем hg revert -r 0 f1.c и снова просмотрим f1.c. Вы можете видеть, что мы вернулись к My Novel.

Обратите внимание, что ни одно из изменений в хранилище не было потеряно, вы просто обновляете рабочий набор. Так что если мы просто введем hg revert f1.c, вы увидите, что мы вернулись к website. Это основы внесения изменений, получения изменений и возврата в Hg. Теперь давайте перейдем к тегам.