VSS Synchronization

Сергей Тарасов, февраль 2004

Назначение

При использовании Microsoft Visual SourceSafe (VSS) в качестве основного средства управления версиями при распределенной разработке возникает проблема синхронизации репозиториев кода.

Простейший пример, с которым часто сталкиваются разработчики, это работа над исходными текстами как в фирме, так и в домашних условиях, когда нет возможности эффективно использовать репозиторий фирмы в удаленном режиме (плохие линии связи, их отсутствие, безопасность). При этом разработчик попеременно использует то внутрифирменный, то домашний репозиторий. Таким образом, изменив файлы в фирме разработчик должен внести изменения в свой домашний репозиторий и наоборот, сделав определенную работу дома, принести в фирму изменения.

Собственные средства VSS (версия 6) в принципе позволяют провести такую операцию вручную. Для этого необходимо выполнить команду ShowHistory и в появившемся списке выбирать поочередно измененные файлы, делая Get. При этом отсутствует возможность выполнить Get для выделенной группы файлов, т.е. уже для пяти файлов вам придется совершить множество однообразных кликов мышью и вводов пути для Get.

Для автоматизации такой операции была создана утилита VSSChanges, которая позволяет получать все изменения за один прием. Программа создана с использование Delphi 7 (для компиляции подойдет любая версия, даже бесплатная Personal), распространяется вместе с исходным кодом по лицензии GNU GPL.

Загрузить дистрибутив вы можете по ссылке в конце страницы.

Работа с программой

Запустите файл Changes.exe.

Рис. 1. Основное окно VSSChanges

В поле "VSS database" введите или выберите путь к файлу scrsafe.ini, который находится в корневом каталоге репозитория VSS. Имя пользователя и пароль можно оставить пустыми, тогда будет использованы данные сетевого пользователя вашей текущей сессии.

В поле "VSS project" введите полный путь к проекту, из которого вы хотите получить изменения. Опция "Recursive", включенная по умолчанию, предписывает получить также изменения из всех нижележащих проектов.

Далее вам следует выбрать режим получения изменений:

  • Режим "By label" (по метке) означает, что будут получены все измененные файлы начиная с метки "From label" и до метки "To label". Последнюю можно оставить пустой, тогда будут получены измененные файлы до текущего момента.
  • Режим "By dates" работает аналогично, но только вместо меток задаются даты. По умолчанию, "To date" изначально установлена на текущее время и дату.

В поле "Save to" введите или выберите каталог, куда будут записаны все измененные файлы. Если каталог не существует, то он будет создан. Все файлы записываются с сохранением структуры рабочих каталогов (working folders), поэтому в вашем репозитории для всех проектов, с которых вы хотите получать изменения, они должны быть установлены. Перед выполнением каталог, заданный в "Save to" полностью очищается от всех файлов и каталогов.

Заполнив все необходимые поля нажимаем кнопку "Get". Для окончания работы закройте окно или нажмите кнопку "Exit". Все введенные вами данные будут сохранены, таким образом, при следующем запуске вам будет нужно только изменить начальные метки или даты. Список проектов также помнит до 7 названий.

Что дальше ?

Дальше вы берете полученные файлы и вносите их в репозиторий, с которым происходит синхронизация (check out, копирование файла в рабочий каталог, check in). При этом вам, возможно, придется вручную анализировать изменения (show differences) и производить слияние, если файл в репозитории был кем-то за время вашего отсутствия изменен. Конечно, если вы на административном уровне выработаете правила ответственности разработчиков за определенные модули, то такая ситуация будет случаться редко и "тяжелая неказистая жизнь простого программиста" станет легче :)

Прикрепленный файлРазмер
Package icon VSSSync_full.zip300.76 KB