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

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

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

У нас есть хранилище и настроен проект. Давайте добавим файл и внесем его в систему. Наш рабочий набор находится в каталоге trunk, поэтому сначала мы перейдем в этот каталог, а затем создадим файл и поместим в него следующий код. Это содержимое страницы сообщений об ошибках из нового проекта, посвященного хайку. Мы выберем то, с чем сталкивались все мы перед тем, как начали использовать контроль версий. With searching comes loss and the presence of absence, My Novel not found. Хорошо.

Мы сохраним его и теперь добавим в хранилище. Но прежде чем добавить его в хранилище, давайте спросим Subversion о статусе файлов в этом каталоге. Как видите, он не знает, что делать с f1.c, потому что мы должны сказать ему, чтобы он добавил его в хранилище. Итак, чтобы добавить файл, мы вводим svn add f1.c, а затем, если мы снова выполним svn status, вы увидите, что для этого файла появилось ожидающее добавление, потому что мы еще не внесли его в систему. Чтобы внести его в систему, мы создадим коммит: введем svn commit и сообщение "Add f1.c".

Теперь, если мы спросим SVN о статусе этого проекта, мы увидим, что все файлы были внесены. Однако, если мы захотим просмотреть логи, мы увидим только сообщение о том, что мы импортировали структуру. Вы можете спросить, что случилось с моим изменением? Что ж, чтобы получить актуальные логи в SVN, вам нужно выполнить команду svn update. Если мы теперь просмотрим логи, то увидим и создание каталога, и добавление f1.c. Теперь, если вы посмотрите на начало каждой строки в журнале, здесь и здесь, то увидите букву R и последующее число.

В Subversion, это номер изменения или ID набора изменений. Давайте откроем f1.c в Блокноте, и изменим слова "My Novel" на "Website" и сохраним файл. Теперь мы опять внесем его в систему, но на этот раз будем использовать редактор, чтобы добавить сообщение коммита. В SVN много сокращений для команд, и в этом случае мы будем использовать svn ci, которая является сокращенной командой коммита. Как вы видели раньше, СО обозначает check-out, а для commit понадобился другой набор букв, поэтому мы используем CI, как в check in.

Итак, мы вводим команду и открывается Блокнот. Вы не забыли правильно настроить переменную среды SVN_EDITOR? Если забыли, то в данный момент вы получите сообщение об ошибке. В таком случае, установите переменную среды сейчас и выполните команду повторно, чтобы войти в это состояние. Итак, в открывшемся текстовом редакторе (в нашем случае это Блокнот, вы можете установить ваш любимый редактор) мы добавим сообщение в несколько строк: Change "My Novel" to Website.

Change message to better reflect product features. После того как мы сохраним файл и закроем его, мы можем еще раз выполнить svn update, а затем - svn log. Сейчас мы увидим сообщения Import structure, Add f1.c, и многострочное сообщение об изменениях. Теперь, когда вы попытаетесь найти номер изменения для каких-либо команд, которые мы будем использовать позже, это может сильно затянуться из-за сообщений об изменениях.

Команда log позволяет просмотреть только номера изменений и время. Если вы введете svn log -q, вы получите список с одной строкой для каждого изменения или набора изменений, который вы внесли в систему. Теперь давайте сделаем еще одно изменение, а затем выполним возврат. Опять же мы откроем f1.c и изменим Website на Webpage. Чтобы увидеть отличия текущего файла от самой последней версии в рабочем наборе, мы можем выполнить команду svn diff, и вы можете видеть, что в настоящее время мы находимся в изменении 4 в хранилище. Это наша рабочая копия, это - строка, которую мы удалили, website not found, и это строка, которую мы добавили или, по сути, изменили - Web page not found.

svn diff показывает различия между всеми файлами в рабочем наборе и хранилище. Так что, если вы хотите увидеть различия только для одного файла в текущем хранилище, вы можете ввести svn diff f1.c. В нашем случае результат будет тем же самым, потому что у нас есть только один файл. Вы также можете просмотреть различия между рабочим набором и конкретной версией. Так, например, если мы введем svn diff и попросим сказать нам разницу между текущим состоянием и третьим изменением, мы увидим, что в изменении 3 у нас был "My Novel", а теперь у нас Webpage. ОК.

Теперь давайте вернемся к самому верхнему изменению, то есть, к нашему последнему коммиту. Для этого мы введем svn revert и название файла. Теперь файл восстановлен. Если мы выведем его здесь, вы можете видеть, что у нас опять Website. Вы можете восстановить любое изменение, а не только последнее, с помощью команды update. Итак, давайте введем svn update, затем изменение и его номер, и когда мы выведем файл снова, мы увидим в нем "My Novel".

Обратите внимание, что ни одно из ваших изменений в хранилище не было потеряно. В нем храниться все. Это основные рабочие операции, которые позволят вам обновить рабочий набор. Например, мы можем обновить рабочий набор с помощью изменения 4 и вернуться к Website. Помните, что ни одно изменение в хранилище не будет потеряно. Вы всего лишь обновляете рабочий набор. Это основные рабочие операции для внесения изменений, получения изменений и восстановления. Просмотрите документацию Subversion, чтобы узнать, как удалять файлы, как переименовать файлы, перемещать их между папками и создавать другие папки.

ОК. Теперь давайте перейдем к созданию тегов.