- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF133:subversion
Материал из Linuxformat.
- Hardcore Linux Проверьте себя на крутом проекте для продвинутых пользователей
Содержание |
Subversion: Контроль изменений
- Боб Мосс покажет, почему не нужно быть хакером ядра, чтобы применять контроль версий дома и на работе.
Вы, наверное, слышали о системах контроля версий от гуру кодирования, и могли вообразить, что контроль версий – своего рода тайная практика, применяемая только закаленными хакерами ядра и профессионалами разработки программного обеспечения. В реальности все не так, и данный учебник призван показать вам, как использовать мощь этой технологии с минимальными затратами.
Первый вопрос, который вы вправе задать – что такое контроль версий и что в нем хорошего лично для вас. Чтобы убить двух зайцев одним выстрелом, просто представьте, что вы и ваш коллега одновременно составляете деловое письмо. Это можно сделать двумя способами. Первый – сначала письмо редактируете вы, а потом коллега; но это займет в два раза больше времени, чем если бы вы делали все в одиночку. Второй – вы оба одновременно работаете каждый над своей копией письма. Второй метод эффективнее, но тогда непонятно, какие правки должны быть приняты в финальной версии. И откуда узнать, что вы работаете именно с последней версией?
При контроле версий каждый из вас хранит свою собственную рабочую копию и просто запускает обновление для синхронизации с одним центральным источником (называемым репозиторием). Так вы будете видеть все изменения и время их помещения в этот центральный источник, и отклонять их или вносить в вашу собственную локальную версию. Системы контроля версий удобнее всего для совместной работы, хотя применимы также и для целей резервного копирования.
На этом уроке мы изучим хорошо известную систему контроля версий – Subversion (иногда сокращенно называемую SVN), но многие из рассмотренных принципов будут верны и в других системах, таких как Git, CVS и Bazaar. Пользователи эзотерических дистрибутивов будут рады узнать, что Subversion доступен для установки почти во всех пакетных менеджерах из мира Linux.
Фиксируем изменения
Начнем с создания своего собственного локального репозитория Subversion. Он пригодится вам в случае локальной работы над важными файлами, чтобы иметь возможность отката к предыдущим версиям, если что-то пойдет не так, а также послужит как упражнение по созданию хранилища в вашей домашней локальной сети (если вы откроете правильные порты в брандмауэре). Для создания локального репозитория SVN откройте терминал и наберите вот что:
cd ~ svnadmin create --fs-type fsfs ~/svn
В вашем домашнем каталоге создастся директория с именем svn. Запустив следующую команду, вы обнаружите вашу директорию Subversion, которая пока совершенно пуста:
svn ls file:///home/пользователь/svn
Вы должны отметить тут несколько интересных изменений в ваших командах. Во-первых, файлы и папки внутри директории SVN имеют префикс file://. Далее обратите внимание, что наше обычное сокращение домашней директории (символ тильды ~) заменено на /home/пользователь, так как доступ к репозиторию осуществляется через абсолютный путь.
Subversion хорош тем, что позволяет вводить после svn любые команды терминала, и если они несут изменения файловой системы, то будут засчитаны за commit [фиксацию изменений]. Для создания нашей первой директории SVN просто наберите такую команду:
svn mkdir file:///home/пользователь/svn/folder -m “Это моя первая папка”
Внутри вашего SVN-репозитория создастся новая «виртуальная» директория, где мы можем создать редактируемые копии. Можно также отметить сообщение в конце строки – оно запишется в журнал SVN и будет напоминать нам, зачем мы сделали изменение. Вы можете увидеть его по команде
svn log file:///home/пользователь/svn
Для удаления папки из основного репозитория SVN, просто замените mkdir на rm и напишите в сообщении журнала нечто отражающее эту замену.
Контроль
Теперь, при наличии активной SVN-директории, вы можете обнаружить, что она не появилась в файловой системе и не позволяет вам делать какие-либо изменения. Это потому, что ваша SVN-директория выступает как центральный источник, который отслеживает и хранит изменения каждой вашей фиксации (репозиторий). Для начала добавления в нее файлов и внесения изменений вам нужно создать собственную рабочую копию для обновления и редактирования. В мире контроля версий это называется checkout [выписка] и может быть вызвано одной строчкой в терминале:
cd checkoutDir svn checkout file:///home/пользователь/svn/folder
Здесь видно, что мы перешли в директорию, где хотим создать рабочую копию, и запустили в ней checkout. Теперь можно добавлять файлы и манипулировать ими как угодно. Для добавления в контроль версий нового файла, запустите импорт SVN, как показано тут:
svn import importFile.txt file:///home/пользователь/svn/folder -m “Импортирован importFile.txt”
При каждом изменении, сделанном в этом файле, просто запускайте commit для синхронизации изменений из вашей рабочей копии с вашим SVN-репозиторием.
svn commit -m “Все уже зафиксировано!”
И, наконец, если вы захотите обновить вашу рабочую копию с любыми изменениями, сделанными централизованно (или просто желаете вернуть все, что было до ваших изменений), запустите следующую строку:
svn update -r n
где n – номер версии. Можете также убрать все после слова update, если просто хотите получить все последние изменения за один раз.
Работа с терминалам – штука мудреная, и если вы работаете не с программным проектом, то можете предпочесть какой-нибудь более дружелюбный к пользователю метод создания рабочих копий, их обновления и фиксации изменений.
Пользователям Gnome это сделать достаточно просто, так как программа по имени RapidSVN, доступная в большинстве основных менеджерах пакетов, предоставит им всю необходимую функциональность для управления собственным SVN-репозиторием – неважно, запущен ли он на сервере, в Интернете или на вашей домашней машине. Пользователи KDE тоже не забыты: ближайший эквивалент – KDESVN, также доступный в основных дистрибутивах.
Кое-что поумнее
При наличии учетной записи Google можно получить бесплатный хостинг репозитория Subversion на http://code.google.com/hosting/createProject.
Прежде чем продвинуться вперед и применить новые навыки на практике, используя приведенные ниже небольшие проекты, рассмотрим несколько вещей, которые вы можете захотеть сделать, работая с системой контроля версий.
Первая – вам может потребоваться сравнить две ревизии файлов друг с другом, чтобы въявь увидеть, чем они отличаются: это полезно для выяснения, где именно в вашу работу вкралась ошибка. Перейдите в вашу рабочую директорию и скомандуйте:
svn compare -r R1:R2 fileName.txt
заменив fileName.txt на нужное вам имя.
Чтобы откатить назад изменения для конкретного файла, запустите revert:
svn revert -r n file
где n – номер ревизии. Опустив -r n, вы получите предыдущую ревизию файла.
Наконец, в директории можно завести более одного файла, и все с разными номерами ревизий. Чтобы найти, какой номер ревизии имеет нужный файл, проверьте его status:
svn status file
Голова в облаках
Subversion умеет не только делать откат к предыдущим ревизиям файлов на вашем компьютере. Вы можете поместить SVN-репозиторий на любой сетевой диск, и каждый в вашей локальной сети получит доступ на выписку. Это могут, например, использовать в бизнес-среде, где обычна совместная работа, или даже сисадмины, для отмены изменений пользователей, повредившие их учетные записи.
Однако особенно эффективен Subversion при его применении с онлайн-репозиторием. Он спроектирован так, чтобы любой мог взять себе рабочую копию SVN-репозитория, зафиксировать изменения или синхронизировать эту копию через простой механизм обновления. Благодаря этому SVN прекрасно подходит для управления и развертывания ПО, но его также можно применить и для чисто настольных задач, что вы увидели в учебнике.
Что касается SVN-хостинга – в киберпространстве много платных хранилищ, которые можно попробовать. Но если вы решите воплотить несколько идей из этого учебника, создайте проект на SourceForge или на Google Code. Оба этих сервиса предоставляют неограниченное web-пространство [Google дает 1ГБ, – прим. пер.], неограниченное число проектов и доступ к репозиторию через браузер.
Новичкам мы рекомендуем второй, поскольку там гораздо легче обучение, а также имеются команды копирования и вставки для использования в терминале или в вашем SVN-клиенте. Для использования Subversion онлайн вам следует быть знакомым с SSH; SourceForge и Google также предоставляют исчерпывающую информацию на вики, демонстрирующую, как использовать SSH с их сервисами.
Subversion: Мини-проекты
Независимо от многих причин, по которым системы управления версиями – вещь хорошая, вы можете теперь задуматься, где и как применить эту технологию на практике. Мы рассмотрим несколько реальных примеров ее использования, но на самом деле система контроля версий применима практически в любой ситуации, где есть необходимость в совместной работе или отмене изменений.
Резервное копирование
Настоящее копирование это не заменяет, но вы реально сможете поместить все ваши файлы под контроль версий и хранить рабочую копию как резервную. Что позволит вам вернуть назад любые изменения или удаления (да, фиксируется даже удаление файлов!) внутри всех ваших документов. Это можно сделать, импортировав содержимое домашней директории в репозиторий SVN:
svn import /home/пользователь/Documents -m “Импорт папки с документами в контроль версий” cd место/копии svn checkout file:///home/user/Documents
Здесь мы импортировали папку Documents в контроль версий (проделав это рекурсивно), затем переместились в место размещения резервной копии и выполнили для нее checkout. Вы можете хранить эту папку в zip- или tar-архиве, и для фиксации этой резервной копии достаточно выполнить две вещи. Сперва зайдите в папку Documents и наберите
svn commit
А для включения всех сделанных изменений далее запустите в вашей рабочей (резервной) копии следующее:
svn update
И все! Вы можете выполнять две последние команды автоматически при старте сессии KDE или Gnome или назначить им определенное время выполнения через crontab.
Web-разработка
Разработчикам сайтов система контроля версий тоже очень пригодится. Традиционный способ разработки сайта заключается в тестировании оффлайн-копии локально, после чего она заливается на реальную систему через FTP. Но мы можем сохранить сайт внутри системы контроля версий и затем просто использовать Subversion для фиксации изменений в нем. Это позволяет множеству web-разработчиков держать у себя актуальную копию текущей версии «живого» сайта, имея возможность отмены изменений, что делает совместную разработку более эффективной.
Subversion также позволяет разработчикам быстро и легко изменять дизайн сайта в особых случаях, таких как раскрутка или распродажи, или на более долгий период – к примеру, Новый год. Просто внесите соответствующие изменения в ваши файлы CSS в одной ревизии, а по окончании события верните их назад на один шаг. Как показано на рисунке, можно также использовать Subversion для тестирования этих CSS оффлайн перед фиксацией изменений в онлайн-сайте, который видят посетители – в чем и проявляется смысл использования контроля версий web-дизайнерами.
Разработчикам контроль версий тоже пригодится. Если вы планируете добавить на ваш сайт новую динамическую функциональность, такую как web-формы или JavaScript, или повысить безопасность учетных записей пользователей, воспользуйтесь Subversion для оффлайн-тестирования возможностей. Каждое сделанное вами изменение, будь то отладка вашего клиентского или серверного кода, проверка на эксплойты или просто тестирование на соответствие стандартам в различных браузерах и платформах, вы можете применить последовательно.
Но очень важно призадуматься вот о чем. По умолчанию все зафиксированные вами изменения передаются на реальный сервер незашифрованными через протокол Subversion, что не проблема при простом редактировании заглавной страницы пользователя, но нежелательно при работе с более чувствительными к безопасности областями, такими как система аутентификации или доступ к базе данных. Также изначально нет защиты от того, что любой посетитель сайта сделает себе свой собственный снимок Subversion и, получив доступ к коду всех составляющих сайта, покопается в нем для поиска уязвимостей.
Простое средство избежать данной ситуации – настройка прав доступа web-сервера, через ваш Apache, Nginx или IIS, разрешающих чтение определенных каталогов только определенным пользователям. Тогда любая попытка checkout приведет к сбою, из-за отсутствия доступа ко всему репозиторию, или – в маловероятном случае успеха – checkout не сумеет много извлечь из чувствительных мест вашего сайта. Чтобы обеспечить фиксацию через зашифрованное соединение, используйте SSH тем же способом, как на хостинге проектов Google или SourceForge, при помощи пары публичного и приватного ключей. Это легко делается с кросс-платформенными инструментами, типа Putty, а для более подробной информации просмотрите вики Google и SourceForge по данной теме.
Семейный фотоальбом
Одно из отличных применений отслеживания версий – создание интерактивного фотоальбома, куда все члены вашей семьи могут добавлять фотографии. Просто создайте SVN-репозиторий в Интернете и предоставьте соответствующий доступ на checkout и commit для синхронизации с ним. При этом каждый получит копию семейных снимков и обновление при появлении новых. Это также прекрасно с точки зрения резервного копирования, так как ваши драгоценные фотографии сохраняются онлайн и в нескольких удаленных местах.
Вы можете счесть это более безопасным, так как вам не придется полагаться на собственные условия использования и меры безопасности интернет-компаний для гарантии неприкосновенности частной жизни. А раз у вас имеются собственные оффлайн-копии, вы можете использовать для их организации и редактирования любые программы: так, если вы близко знакомы с GIMP, то можете на досуге улучшить качество фото.
Отследите свои финансы
В репозиториях кучкуется множество пакетов управления финансами, но если вы отслеживаете свои денежные потоки, занося их в электронную таблицу, возможность журналирования Subversion вам очень пригодится.
Если у вас просто список доходов и расходов, и вы добавляете к каждому объекту изменения и подсчитываете остаток,чтобы не выйти за рамки бюджета, при каждом таком действии вы можете фиксировать изменения.
Каждая фиксация в журнале будет иметь дату и время транзакции, и если вы добавили необходимую информацию для каждой записи в журнале, то сможете даже определить, сколько вы получили или потратили и как это отразилось на бюджете. Пример фиксации может быть такой:
svn commit -m “Spent ¬£5.29 Macdonalds, ¬£290.23 under budget”
При каждом просмотре журнала Subversion для данного файла или каталога вы увидите длинный список транзакций, пригодный для целей обзора. Вы можете поместить эту информацию в текстовый файл с помощью
svn log >> financeOutput.txt
и затем импортировать эти данные в другие программные пакеты или хранить их для себя.
Безграничные возможности
Если эти мини-проекты не сумели подстрекнуть вас попробовать Subversion, найдется и множество других. Например, можно сделать список дел, который члены вашей семьи смогут обновлять – типа школьной секции, поездки за покупками или турнира по гольфу, разнесенного по месяцу (с датами). Любой сможет получить копию этого расписания для своих собственных нужд, а при автоматическом обновлении локальной копии – быть постоянно в курсе дел и событий. Вы также можете хранить записи о своем домашнем инвентаре: приблизительная дата покупки и стоимость пригодятся в страховом случае, если с ним приключится что-то плохое.
Цель данного урока – дать основное представление, для чего изначально создана система контроля версий. Ее первая и основная задача – предоставить пользователям возможность удаленно фиксировать изменения кода и поправки к нему. Это также позволяет главному куратору решать, какие изменения применить, а какие – отклонить, и давать пояснение, почему это было сделано. Приложение может работать как локальная версия «мастер-копии» из центрального репозитория, и достаточно тривиально проверить, какие версии файлов были обновлены или какие изменения были совершены перед запуском обновления версии, при поддержки актуальности локальной копии.
Раздразнила ли идея использования системы контроля версий ваш аппетит к экспериментам? Subversion, Git, Bazaar и CVS все могут быть использованы в любом проекте. Если наш урок натолкнул вас на нечто интересное, черкните пару строк об этом нам на почту или оставьте сообщение на форуме Linux Format. Мы подробно рассматривали Bazaar, SVN и Git в LXF120.