Работа с TortoiseSVN

Введение

В данном HOWTO будет подробно рассказано как работать с самым популярным SVN-клиентом под Windows: скачивать и обновлять репозитории, создавать теги и ветки проекта, коммитить (публиковать) свою рабочую копию, откатывать сделанные изменения и многое другое.

Где можно скачать программу

Скачать программу можно на её официальном сайте на странице Downloads: http://tortoisesvn.net/downloads. Там же можно скачать пакет локализации, содержащий помимо перевода интерфейса программы, ещё и словарь проверки орфографии (применяется при коммите изменений (см. ниже)).

Программа TortoiseSVN интегрируется в Проводник Windows (Windows Explorer) и все действия с ней выполняются из контекстного меню каталогов (папок).

Начнём с самого простого — скачивания одного из репозиториев на свой компьютер.

Скачивание репозитория SVN (Checkout)

Если Вы хотите скачать репозиторий какого-нибудь проекта, то Вы должны знать его URL, а также логин и пароль для доступа (если не указаны, то для анонимного доступа (только чтение) используется логин и пароль anonsvn). URL’ы могут быть:

  • стандартный svn:// — подключение напрямую к Subversion-серверу;
  • http:// — подключение к Subversion-серверу через веб (так работает большинство серверов, т.к. позволяет просматривать проект не имея SVN-клиента напрямую через веб-браузер);
  • https:// — то же, что и http://, но через SSL;
  • svn+ssh:// — svn через SSH (редко используется в настоящее время).

Допустим, что URL нам известен, поэтому чтобы скачать репозиторий, мы должны сделать следующее:

  1. Создаём папку, в которую будем скачивать репозитории (для удобства лучше хранить все репозитории в одной папке, например, C:\SVN).
  2. Заходим в неё в проводнике Windows, нажимаем правой кнопкой мыши по свободному месту и выбираем «SVN Checkout…«.
  3. В поле «URL of repository» пишем полный URL до репозитория SVN, который нам нужно скачать, а в поле «Checkout directory» корректируем путь, в которой будет помещена локальная копия. Внимание! Вам нужно делать checkout только каталога /trunk/ svn-репозитория, либо корневого, если /trunk/ не существует (очень редко, т.к. в 99% репозиториев trunk существует и содержит всегда самую последнюю версию файлов).
  4. В списке «Checkout Depth» укажите «Fully recursive«, что означает, что будет скачан весь репозиторий от указанного пути. Если установить флажок «Omit externals«, то внешние файлы, на которые есть ссылки в репозитории (например, из других репозиториев, либо репозиториев третьих лиц), скачаны не будут, поэтому ставить флажок здесь не рекомендуется.
  5. В блоке «Revision» Вы можете запросить выдать Вам последнюю версию репозитория: «HEAD revision» (рекомендуется именно этот вариант), либо указанную Вам в поле ревизию: «Revision ###» (не рекомендуется).
  6. Кнопка «Show log» покажет Вам список изменений в репозитории с информацией об авторах каждого изменения, описании изменений (если авторы их вводили при коммите изменений), а также списке добавленных, изменённых и удалённых файлов. Здесь же можно просмотреть чем файл одной ревизии (версии) отличается от файла другой, а также запросить показать унифицированный diff-файл изменений либо нескольких файлов, либо нескольких ревизий (отображается только для текстовых файлов). Более подробную информацию о Log Viewer читайте ниже.
  7. Нажимаем кнопку «OK» и ждём скачивания репозитория с Subversion-сервера (зависит от скорости Вашего Интернет-соединения, а также от загруженности svn-сервера). Внимание! Некоторые svn-серверы могут запросить пароль. Если Вы не знаете пароля, то вводите anonsvn как логин и пароль. Это стандартный логин/пароль для анонимного доступа. Если Вы хотите в дальнейшем публиковать свои изменения в этот репозиторий и у Вас есть на это право, то введите здесь свой логин и пароль.
  8. Готово. В каталоге, который Вы указали на третьем шаге в поле «Checkout directory» теперь находится локальная версия репозитория (рабочая копия).

Обновление скачанного репозитория (Update)

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

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
  2. Нажимаем правой кнопкой по свободному месту в папке, выбираем «SVN Update«.
  3. В открывшемся окне наблюдаем за процессом обновления: списком добавленных, изменённых и/или удалённых файлов, текущим номером версии. Здесь же можно нажать кнопку «Show log…» чтобы просмотреть список, прочитать описание изменений (если указано), сравнить текущую версию с предыдущей и т.д.
  4. Нажмите «OK» чтобы закрыть это окно. Репозитарий обновлён до последней версии.

Сохранение своих изменений в репозиторий (Commit)

Если Вы хотите внести свои изменения в скачанный репозиторий и у Вас есть на это право (право коммита в репозиторий), то просто начинайте работать с локальной рабочей копией как с обычной папкой: создавайте, редактируйте, удаляйте файлы и/или папки. Теперь чтобы внести изменения в репозиторий, нужно:

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows. Внимание! Рабочая копия должна быть скачана от логина пользователя, у которого есть право на коммит изменений (коммит-флаг).
  2. Нажимаем правой кнопкой по свободному месту в папке, выбираем «SVN Commit…«.
  3. В открывшемся окне «Commit» в секции «Message» вводим краткое описание своих изменений (это рекомендуется делать всегда, особенно если не Вы один работаете над проектом), но описание можно и оставить пустым (не рекомендуется, т.к. другие разработчики или пользователи не смогут понять что именно было изменено). В этом поле разрешено использовать буквы национальных алфавитов (присутствует полная поддержка юникода), но, к сожалению, некоторые веб-клиенты svn (отображающие в браузере список изменений) вместо русских букв отображают кракозябры. TortoiseSVN лишён этого недостатка.
  4. В секции «Changes made (double-click on file for diff)» Вы увидите список всех изменённых, добавленных и удалённых Вами файлов локальной рабочей копии. У изменённых файлов будут автоматически стоять флажки, у остальных — нет. Установите флажки у тех файлов, изменения которых должны быть загружены на svn-сервер (есть флажок — файл обновляется, добавляется, удаляется; нет флажка — остаётся без изменений). Двойной щелчок по файлу запустит утилиту Tortoise Merge (предназначена для сравнения версий файлов), которая покажет последнюю версию файла из репозитория SVN в левом окне и текущую рабочую копию в правом. Изменения будут выделены: удалённые строки зачёркнуты, добавленные выделены.
  5. После выделения нужных файлов или всех сразу («Select / deselect all«), нажмите кнопку «OK» и дождитесь окончания загрузки изменений на сервер. Будет открыто окно со списком добавленных, изменённых и/или удалённых файлов, а также указан текущий номер ревизии.

Работа с репозиторием напрямую на сервере

Иногда требуется работать с svn-репозиторием напрямую на сервере не скачивая его на локальный компьютер. Для этих целей существует утилита «SVN Repo-browser«, также входящая в состав TortoiseSVN. Работать с ней очень просто:

  1. Запускаем проводник Windows, заходим в любую папку, нажимаем правой кнопкой по свободному месту и выбираем «SVN Repo-browser«.
  2. В открывшемся окне «URL» вводим полный URL нужного нам svn-репозитория и нажимаем «OK«.
  3. Будет открыто главное окно утилиты: «%URL% — Repository Browser«, где %URL% — URL репозитория. Работать в этом окне можно так же, как в Проводнике Windows. Разрешено перетаскивание объектов (Drag and Drop). Через контекстное меню файла/папки можно:
    • удалять «Delete…«, переименовывать «Rename» файлы и каталоги (папки);
    • добавить файл («Add file…«) или папку («Add folder…«) в репозиторий;
    • создать пустую папку («Create folder«) в репозитории;
    • скачать («Checkout…«) репозиторий (см. выше);
    • извлечь файл или папку из репозитория без служебных каталогов («Export…«). Извлечённая папка отличается от рабочей копии тем, что её нельзя обновлять и она не содержит служебных скрытых каталогов .svn;
    • создать ветку или тег («Copy to…«);
    • изменять свойства файла или папки («Show properties«).
  4. Любое изменение требует ввести текст комментария (разрешается не вводить и оставить поле пустым) и увеличивает номер ревизии на единицу. Изменения применяются немедленно.
  5. Нажмите кнопку «OK» для выхода из Repository Browser.

Создание веток или меток внутри репозитория

Если Вы работаете над большим проектом, то желательно для каждой публичной стабильной версии (1.0, 1.1, 2.0 и т.д.) создавать отдельный тег, например, /tags/RELEASE-Mj.Mn, где Mj — Major-версия, а Mn — Minor-версия проекта. Пример: /tags/RELEASE-1.0 (для версии 1.0), /tags/RELEASE-2.63 (для версии 2.63) и т.д. Внимание! Теги создаются НЕ в каталоге /trunk/, а выше него на один уровень! Чтобы создать метку или ветвление, нужно (у Вас должно быть право коммита в репозиторий для создания меток или ветвлений):

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
  2. Нажимаем правой кнопкой по свободному месту и выбираем «TortoiseSVN» — «Branch/tag…«.
  3. В открывшемся окне в поле «To URL» введите полный URL с путём до нового тега. Пример: http://ваш_проект.svn.sourceforge.net/tags/RELEASE-1.0 (это только пример; пути должны указывать на Ваш проект).
  4. В секции «Create copy in the repository from» укажите «HEAD revision in the repository» (последняя ревизия; рекомендуется), либо укажите номер ревизии вручную, выбрав «Specific revision in the repository ###«, либо создайте тег из текущей рабочей копии «Working copy» (не рекомендуется).
  5. В секции «Log message» укажите комментарий к ревизии (например, %НАЗВАНИЕ_ПРОЕКТА% %ВЕРСИЯ_ПРОЕКТА% Released).
  6. Нажмите «OK«. Флажок в строке «Switch working copy to new branch/tag» ставить не рекомендуется, т.к. это переключит Вашу текущую рабочую копию на новый путь, что может привести к различным ошибкам и проблемам.

Откат изменений в рабочей копии

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

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
  2. Нажимаем правой кнопкой по свободному месту и выбираем «TortoiseSVN» — «Revert…«.
  3. В открывшемся окне Вы увидите список всех изменённых файлов Вашей рабочей копии. Установите флажок у того файла, который Вы хотите откатить до версии из репозитория, либо выберите сразу все файлы («Select / deselect all«). Двойной щелчок по файлу покажет его отличия от оригинального файла.
  4. Нажмите «OK«. Выбранные файлы будут восстановлены, а изменённые будут отправлены в Корзину Windows.

Работа с утилитой Log Viewer

Утилита Log Viewer, запускаемая после нажатия на кнопку «Show log…«, либо при нажатии правой кнопкой по свободному месту в локальной рабочей копии — «TortoiseSVN» — «Show log«. По умолчанию утилита показывает последние 50 ревизий и их описаний (если во время коммита они были введены). Все основные действия выполняются из контекстного меню ревизии:

  • «Compare with woking copy» — сравнить текущую (выделенную) ревизию с локальной рабочей копией. Список изменений будет показан в Tortoise Merge.
  • «Show changes as unified diff» — показать изменения выделенных ревизий как унифицированный патч-файл (unified diff). Если выделена только одна ревизия, то она будет сравниваться с предыдущей (например, выделена ревизия 87, она будет сравниваться с 86).
  • «Compare with previous revision» — показать изменения выделенной и предыдующей ревизии. Будет отображено окно с различающимися файлами, двойной щелчок по файлу откроет его в Tortoise Merge для просмотра изменений.
  • «Compare and blame with previous revision» — то же, что и предыдущее, но здесь отображается кто и когда внёс какое-либо изменение в файл построчно.
  • «Browse repository» — открывает описанный выше Repository Browser для прямой работы с репозиторием.
  • «Create branch/tag from revision» — позволяет создать ветку или тег из выделенной ревизии (см. выше).
  • «Update item to revision» — обновляет до выделенной ревизии.
  • «Revert to this revision» — позволяет откатиться до выделенной ревизии.
  • «Revert changes from this revision» — позволяет откатить все изменения, сделанные в выделенной ревизии.
  • «Merge revisions to…» — позволяет объединить несколько ревизий в рабочую копию.
  • «Checkout…» — скачать выделенную ревизию (см. выше).
  • «Export…» — извлечь выделенную ревизию без служебных каталогов.
  • «Edit author» — редактировать имя автора выделенной ревизии (нужны права администратора).
  • «Edit log message» — позволяет редактировать текст описания выделенной ревизии (нужны права администратора).
  • «Show revision properties» — показать свойства выделенной ревизии.
  • «Copy to clipboard» — скопировать номер выделенной ревизии, автора, описание и список изменённых файлов в буфер обмена Windows.
  • «Search log messages» — запустить поиск в описаниях ревизий.

Кнопка «Show all» покажет все ревизии, а «Show range…» позволит задать диапазон ревизий, которые будут отображаться в окне Log Viewer.

Кнопка «Statistics» отображает различную статистическую информацию: наиболее активный и наименее активный автор, количество изменений в репозитории в неделю, общее количество изменений и т.д.

Читать далее →

Установка и настройка сервера Garry’s Mod

Вступление

По многочисленным просьбам я решил написать подробное HOWTO по установке и настройке слушающего сервера Garry’s Mod прямо из приложения.

Статья об установке и настройке выделенного (dedicated) сервера доступна здесь.

Что нам потребуется для работы:

  1. Сам Garry’s Mod (лицензионная Steam-версия).
  2. Набор для установки плагинов нашего производства (можете пропустить, если хотите устанавливать плагины вручную).
  3. Любой текстовый редактор для редактирования конфигов.

В отличие от слушающих серверов других Source-приложений, слушающий сервер Garry’s Mod по функциональности практически ничем не отличается от Dedicated Server’а. Общие черты слушающего и выделенного сервера Garry’s Mod:

  • позволяет устанавливать любые lua-модификации и плагины в каталог /addons/;
  • позволяет установить плагины для администрирования сервера и права администраторов (Garry’s Mod — единственный слушающий сервер, в котором создатель может быть не администратором).

Различия между слушающим и выделенным сервером Garry’s Mod:

  • при выходе из игры создателя, сервер автоматически отключается, а все играющие будут кикнуты с сообщением «Server is shutting down«;
  • позволяет одновременно хостить сервер и находиться на нём;
  • все настройки слушающего сервера хранятся в файле listenserver.cfg, а выделенного — server.cfg.

Преимущества слушающего сервера Garry’s Mod:

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

Техническая часть

  1. Чтобы к Вам могли подключаться клиенты, Вы должны иметь «белый» IP-адрес, т.е. видимый из Интернета. Создание сервера с «серым» IP, либо с жёстким NAT’ом провайдера не имеет смысла, т.к. подключиться к такому серверу никто не сможет (кроме находящихся с вами в одной подсети).
  2. Сервер запускается на порту 27015, поэтому если у Вас ADSL, вы должны пробросить этот порт по протоколу UDP в настройках своего роутера (модема). Обычно проброс портов настраивается в веб-интерфейсе роутера в разделе NATPort Forwarding или NATVirtual Servers.
  3. На сервере главное – скорость отдачи от Вас клиентам, а также мощность процессора Вашего компьютера. На ADSL максимальная отдача может составлять около 780 Кбит/с – 1 МБит/с (на ADSL с модуляцией AnnexM (такая разновидность встречается крайне редко) – 3 Мбит/с). Если у Вас тариф на 256 КБит/с, то к Вам могут подключиться 6 клиентов. Если 512 – 10-12 клиентов, если 1 Мбит и более (ADSL) – 18 клиентов, кабель без NAT – 23 клиента (максимум для слушающего сервера). В соотвествие с этими параметрами Вы должны настроить значение переменной «Максимальное число игроков» во время создания сервера. Если Ваш канал или процессор не будут выдерживать такое количество подключившихся игроков, у всех появятся лаги.

Внимание! Не создавайте сервер на большое количество пользователей, т.к. современный компьютер вряд-ли потянет более 12-15 одновременно работающих пользователей, активно работающих с Wire, Stargate и т.п. из-за того, что Garry’s Mod до сих пор не поддерживает мультипоточность. Также в настройках сервера или файле конфигурации listenserver.cfg не забудьте указать максимальное количество объектов, элементов, NPC и т.д., которые может создать один пользователь. Если здесь будут стоять огромные числа (как по умолчанию в 200), то это может подвергнуть Ваш сервер серьёзным лагам.

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

Настройка и запуск сервера

  1. Устанавливаем Steam и Garry’s Mod (если ещё не установлены).
  2. Запускам Garry’s Mod, ждём полной загрузки и выходим из неё (это нужно только если выполнялся шаг 1 для создания файлов базовой конфигурации).
  3. Запускаем Garry’s Mod, нажимаем «Создать сервер» («Create Server«), набираем команду status в консоли, записываем её вывод например в буфер обмена (выделяем выданный сервером текст, нажимаем правой кнопкой — «Копировать«), либо на бумагу и выходим из Garry’s Mod.
  4. Устанавливаем джентльменский набор плагинов из svn для Garry’s Mod, так, как описано в этой статье. Всю информацию по установке и сами скрипты установки/обновления плагинов Вы найдёте по этой ссылке.
  5. Делаем себя и, если нужно, своих друзей администраторами свежесозданного сервера (обязательно, иначе ULX-админка не даст Вам доступа). Чтобы сделать себя админом, нужно:
    • узнать Ваш личный SteamID и, если хотите сделать и друзей админами (не рекомендуется ;-)), то и их SteamID. Как это сделать описано на 3 шаге;
    • в любом текстовом редакторе открываем файл %Steam%\steamapps\common\garrysmod\garrysmod\settings\users.txt, где %Steam% — путь к установленному клиенту Steam. В этот файл и прописываются администраторы сервера по SteamID. Ищем в этом файле раздел «superadmin» и после строки //»garry» «STEAM_0:1:7099» жмём Enter (начинаем новую строку) и пишем свою в виде «ВАШ_НИК» «STEAM_0:1:XXXXXXXXX», где ВАШ_НИК — это ник админа, который будет в списке вывода админов сервера (здесь разрешено вводить только латинские буквы и цифры без пробелов; кавычки обязательны), а STEAM_0:1:XXXXXXXXX — это Ваш SteamID (замените на настоящий, естественно ;-)), полученный на 3 шаге. Здесь же после этой строчки может добавить и своих друзей (но я бы не рекомендовал этого делать; одного админа вполне достаточно).
  6. Качаем и распаковываем архив с файлами конфигурации в папку %Steam%\steamapps\common\garrysmod\garrysmod\cfg\, где %Steam% — путь к установленному клиенту Steam. Заменяем имеющиеся файлы. Архив обновляется после выхода серьёзных изменений в Garry’s Mod, а также при обнаружении ошибок и для добавления новых функций.
  7. Открываем распакованный файл listenserver.cfg в любом текстовом редакторе (например, в Блокноте Windows) и делаем нужные настройки (меняем имя сервера (переменная hostname), настройки и т.п.). В файле я всё подробно описал какая переменная чем управляет, что включает/выключает, поэтому на этом я останавливаться не буду здесь. Внимание! Первым делом задайте пароль вместо !!!CHANGEME!!!, иначе Ваш сервер могут взломать.
  8. Запускаем Garry’s Mod, выбираем в главном меню пункт «Создать сервер» («Create multiplayer«). В открывшемся окне на первой вкладке выбираем карту (рекомендуется gm_flatgrass или gm_construct), затем переходим на страницу «Options«. Здесь установите максимально число игроков, которые могут подключиться к Вашему серверу («Max Players«) и обязательно уберите галочку из строки «Local network game» (иначе никто не сможет подключиться к Вам). Все остальные пункты изменять не нужно, т.к. они изменяются только в конфигурационном файле listenserver.cfg (этот файл имеет более высокий приоритет, чем графическое меню).
  9. Жмём кнопку «Start game» внизу окна и ждём окончания запуска сервера.
  10. Даём свой внешний IP-адрес всем, кто должен к Вам подключиться и они смогут это сделать, набрав у себя в консоли Garry’s Mod команду connect IP_вашего_сервера:27015 (например, connect 126.65.110.99:27015). Свой внешний адрес можно узнать тут: http://www.2ip.ru (он определится в строке “Ваш IP-адрес“).
  11. Если к Вашему серверу кто-нибудь подключился, значит он успешно установлен и настроен. Чтобы отключить сервер, достаточно войти в меню Garry’s Mod клавишей Esc и выбрать пункт «Отключиться» («Disconnect«). После этого сервер кикнет всех, кто на нём играл и закончит свою работу.

Мини-FAQ

Q: Как запретить выдавать игрокам оружие (давать только Physgun, грави-ган, тулган и скриншотган)?

A: Установите плагин U-Restrict (если Вы устанавливали с помощью наших скриптов, то он уже установлен и автоматически активирован).

Q: Как изменить сообщение, которое появляется при заходе на созданный сервер Garry’s Mod?

A: Отредактируйте файл %Steam%\steamapps\common\garrysmod\garrysmod\data\ulx\motd.txt, где %Steam% — путь к установленному клиенту Steam. Это обычный HTML-файл.

Q: Куда пишутся сокращённые логи админки?

A: Логи админки ULX пишутся в %Steam%\steamapps\common\garrysmod\garrysmod\data\ulx_logs\ДАТА.txt, где %Steam% — путь к установленному клиенту Steam, а ДАТА — сегодняшняя дата в формате ММ-ДД-ГГ.

Q: Мне нужно выдавать игрокам при подключении к серверу определённое оружие. Как это сделать?

A: Как уже писалось выше, нужен плагин U-Restrict для админки (если Вы устанавливали набор плагинов с помощью наших скриптов, он уже установлен). Итак, чтобы выдать нужное оружие, откройте файл %Steam%\steamapps\common\garrysmod\garrysmod\data\URestrict\loadouts.txt в любом текстовом редакторе и в разделе loadout после gmod_tool введите полное имя нужного оружия, например weapon_smg. Это оружие будет автоматически выдано игроку после подключения к серверу, а также после его респауна.

Q: При подключении к серверу моего друга, его Garry’s Mod пытается скачать огромное количество файлов. Что делать?

A: Это значит, что у Вашего друга установлены не все плагины, которые установлены у Вас в каталоге /addons/ Garry’s Mod’а. Нужно, чтобы Ваш друг установил их и чтобы версии плагинов совпадали. Только тогда ему не придётся ничего качать. Рекомендуем пользоваться нашим набором скриптов по установке и обновлению плагинов.

Читать далее →