Открыта запись на курс Vehicles and Props Старт обучения 28 ноября 2024 Преимущества курса: - разбор домашних работ только автором курса; - справедливые фидбеки каждую неделю; - помощь в выполнении тестового задания при трудоустройстве; - рекомендации в топовые студии в РФ при успешном прохождении курса.
SVN. Работа с контролем версий

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

Команды SVN

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

SVN comands Контекстное меню. Здесь отображаются все необходимые функции SVN Контекстное меню. Здесь отображаются все необходимые функции SVN.

Извлечение рабочей копии

Прежде чем начать работу с общими файлами, необходимо привести свою рабочую копию в актуальное состояние. Поскольку вся информация о проекте хранится на удаленном сервере, и пользователи в своей работе, внося изменения, фиксируют их в этом хранилище, каждый раз при начале работы нужно предварительно обращаться к серверу за изменениями, внесенными в общий проект другими пользователями. Для этого используется команда SVN Update. При ее запуске откроется окно, отображающее загрузку файлов из хранилища.

SVN comands Окно загрузки файлов. После окончания загрузки выводится выделенная жирным строчка с номером ревизии, на которой теперь находится хранилище. Если по какой-то причине во время загрузки произойдет сбой, здесь будут выведены красные строки с информацией об ошибках. Степень сложности их решения может оказаться очень разной.

Каждое действие с файлами отмечается разными цветами. Так, темно-красным отмечается удаление или перемещение файлов, голубым - изменение существовавших ранее файлов, пурпурным - добавление новых файлов, черным - прочие действия.

Команда SVN Update приводит рабочую копию всех файлов в соответствие последней ревизии хранилища. Чтобы получить информацию о том, в какой ревизии находится рабочая копия, и сколько ревизий прошло с последнего обновления хранилища, можно запустить команду Show Log.

В открывшемся окне можно будет увидеть информацию обо всех ревизиях проекта, пользователях, вносивших изменения, и комментарии к ревизиям. Ниже будет видно, какие именно файлы были изменены, и какие именно действия были совершены с ними: был ли файл изменен, добавлен или удален.

Ревизия, на которой находится локальная рабочая копия, будет выделена жирным шрифтом.

SVN comands Окно лога хранилища. В верхней части видно, что локальная копия находится на 46-й ревизии. С тех пор был сделан ряд изменений, включающий добавление, изменение и удаление файлов. Ниже указан комментарий к выбранной ревизии, еще ниже приведен список добавленных папок.

Кроме того SVN предоставляет возможность обновлять хранилище не только до его последнего состояния, но и до любой ревизии, полная история которых содержится в хранилище. Для этого используется команда Update to revision.

SVN comands В открывшемся окне предлагается ввести номер ревизии, до которой необходимо обновиться. Здесь же с помощью кнопки Show log можно открыть историю ревизий, чтобы просмотреть все изменения и выбрать нужную ревизию.

Обновляясь до любых ревизий кроме самой свежей, нужно быть осторожным с вносимыми изменениями: так как файлы в устаревшей ревизии не соответствуют свежим файлам, их изменение и попытка фиксации приведет к конфликту, и SVN выдаст ошибку “устарел”. В этом случае может понадобиться откат сделанных изменений или решение возникших конфликтов.

Все команды обновления, как и команды записи изменений, можно применить как ко всему репозиторию, так и отдельным его файлам или папкам. Для этого необходимо вызвать контекстное меню, предварительно кликнув по нужному файлу.

SVN comands Контекстное меню для работы с отдельным файлом

Запись данных в Repository

После актуализации данных рабочей копии пользователь начинает работу с файлами и, внеся их в них изменения, должен записать эти изменения в хранилище, чтобы они стали доступны другим пользователям. Для этого предназначена команда SVN Commit

SVN comands Окно коммита. В верхнем поле пишется комментарий к изменениям, в нижнем указаны все измененные файлы. С помощью галочек можно выбрать, какие измененные файлы отправить в хранилище.

При выполнении коммита можно увидеть, что созданные заново файлы не отображаются в списке. Это происходит потому что такие папки и файлы не отслеживаются в системе контроля версий, хоть и находятся в папке репозитория. Чтобы SVN увидел эти файлы и стал отслеживать их изменение, необходимо, выделив их, выбрать команду Add.

SVN comands Окно добавления новых файлов

Функция Add добавляет файлы под контроль версий, но не отправляет их в хранилище автоматически. После этого необходимо выполнить команду Commit.

Если после внесения изменений в файлы пользователь понимает, что он не хочет вносить эти изменения, и ему надо вернуть файл в исходное состояние, то он использует команду Revert. Также как и в большинстве других случаев, эта команда применима как ко всем файлам в хранилище, так и к какому-то одному файлу.

SVN comands Окно команды Revert. При вызове этой команды выводится список всех измененных после последний ревизии файлов. Здесь можно отметить файлы, которые пользователь хочет вернуть в исходное состояние.

Команда Clean up

В случае некорректной работы с хранилищем, возникновения конфликтов или сбоев интернет-соединения, могут возникать ошибки, не позволяющие продолжить забор или отправку изменений. Рабочая копия пользователя остается в несогласованном состоянии по отношению к хранилищу. В части случаев необходимо проделать множество специфических действий, чтобы разрешить ту или иную проблему. Однако есть ряд случаев, когда несогласованность версии возникает из-за внутреннего состояния базы данных рабочей копии. В этом случае привести рабочую копию в согласованное состоянии используется команда Clean up.

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

Блокировка файлов

Как правило, общий проект насчитывает большое количество файлов, и работа пользователей над ними может не пересекаться. Но бывают случаи, когда несколько пользователей вносят изменения в один и тот же файл, и делают это с такой частотой, что могут не согласовать свои действия и затереть работу друг друга. Чтобы исключить такую возможность, в SVN реализована функция блокировки файлов.

Команды Get lock и Release lock предназначены для установки и снятия блокировки с файлов соответственно. Когда файлы заблокированы, никто не может отправить изменения этого файла в хранилище, пока пользователь, установивший блокировку, не снимет ее. Если другие пользователи внесут изменения в файлы, то узнают о невозможности отправить их в хранилище только в момент отправки. Чтобы избежать такой ситуации, перед началом работы можно проверить статус файлов с помощью команды Check for modifications.

В открывшемся окне будет представлен статус всех файлов хранилища, в том числе здесь будет отображена информация о блокировках и комментарии к ним.

Решение конфликтов

Хотя SVN предусматривает инструменты для предотвращения конфликтов, рано или поздно они все же могут произойти. Конфликт возникает, когда разные пользователи одновременно редактируют одни и те же файлы, а потом каждый пытается отправить в хранилище свою отредактированную версию. Когда один из пользователей зафиксирует свои изменения в хранилище, версия, которую изменил другой пользователь, окажется неактуальной, и он не сможет внести изменения в файлы хранилища, не стерев изменений другого пользователя. Такая ситуация и называется конфликтом.

В этом случае SVN, обнаружив, что рабочая копия пользователя находится в неактуальном состоянии, предложит обновить рабочую копию, и укажет, какие именно файлы находятся в конфликтном состоянии. Здесь пользователю предстоит решить, какую из версий считать финальной и актуальной. Это означает, что работа одного из пользователей будет стерта. Этот сложные моральный выбор делается с помощью команд “Resolve conflict using Theirs” и “Resolve conflict using Mine” - решить конфликт, используя версию файла, находящуюся в хранилище (в пользу сервера), или используя локальную версию (mine). Обе команды доступны при нажатии правой кнопкой мыши на конфликтном файле в окне обновления рабочей версии.

Получение отдельных файлов из предыдущих ревизий

Что делать, если в ходе работы пользователь решил, что ему надо получить один из файлов в том состоянии, в котором он был несколько ревизий назад, и сделать это состояние актуальным для остальных пользователей? Или же вернуть в проект давно удаленный файл, не сохранившийся ни у кого из пользователей? Один из способов, которым можно это сделать, выглядит так:

Зная номер ревизии, на которой находится файл в нужном нам состоянии, можно в окне лога хранилища (вызываемом командой Show log…) найти нужную ревизию и в ней - требуемые файлы. Выделив эти файлы и выполнив команду Export, можно извлечь их из памяти хранилища в какое-то место вне рабочей копии, чтобы затем вручную скопировать их в нужное расположение в хранилище и выполнить Commit, актуализируя изменения для остальных пользователей.

Консольные команды SVN

TortoiseSVN - только программная оболочка системы SVN, предоставляющая конечному пользователю доступ к командам в удобной форме. На самом же деле каждой функции соответствует консольная команда, которую можно использовать в интерфейсе командной строки. В случаях, когда функции интерфейса TortoiseSVN не помогают или дают сбой, можно обратиться к консольным командам. Вот некоторые из них:

  • svn co --username eax https://example.com - checkout хранилища
  • svn up - выгрузка последних изменений с сервера
  • svn diff - просмотр изменений, не зафиксированных в хранилище
  • svn revert --recursive - отмена последних изменений
  • svn add text.txt - добавление файла
  • svn mv from.txt to.txt - переименование файла
  • svn del file.txt - удаление файла
  • svn lock file.txt - блокировка файла
  • svn unlock file.txt - разблокировка файла
  • svn commit -m 'Your comment here' - отправка изменений в хранилище
Ваша заявка отправлена!
Если во входящих на почте: нет письма, проверьте папку спам или напишите нам в телеграм