Полезные комманды SVN
В данной статье, я постараюсь собрать ряд часто используемых комманд svn с их описанием, чтобы Вам да и мне самому потом сюда обращаться и подсмотреть, что вылетело из головы.
Базовые команды
Извлекаем проекты
Вам необходимо знать URL компонентов, которые вы хотите извлечь. После этого Вы сможете сделать одно из следующих действий
svn checkout url
svn co url
Эти команды позволяют всё извлечь в директорию с именем по умолчанию. Например
svn checkout http://code.djangoproject.com/svn/django/trunk
Эта комманда извлечет django в директорию с названием trunk в текущей директории.
Вы так же можете указать название директории, в которую будeт извлечены файлы:
svn checkout http://code.djangoproject.com/svn/django/trunk django
Таким способом Вы извлечеты всё в директорию django
Svn Update и Revert
Svn update сливает изменения в репозитории и локальные изменения в коде, или показывает места, где возникли конфликты (конфликты показаны буквой C напротив файлов, который вы пытались обновить). Если кто-то другой закоммитил изменения в репозиторий и это не привело к конфликту с Вашей текущей версией, то svn update покажет G вместо C. Как бороться с конфликтами будет рассказано чуть ниже.
- Чтобы обновить локальные файлы с изменениями, произведенными в репозитории, сделайте «svn update»
svn update <filename1> <filename2> ... <filenameN>
- Чтобы перезаписать локальные файлы файлами из репозитория, сделайте «svn revert» — это может быть нужно, если Вы хотите вернуться к версии файлов, лежащих в репозитории, при этом вы потеряете все изменения, которые Вы внесли в него с момента последнего коммита
svn revert <filename1> <filename2> ... <filenameN>
Вы можете обновить всю директорию целиком, включая поддиректории, перейдя в нужную директорию и набрав:
svn update
Svn Diff
Заметьте, что diff не подключается к репозиторию! Он сравнивает ваши файлы с файлами, которые вы скачали, а не теми, что сейчас находятся в репозитории!
Чтобы узнать какие изменения вы делали с файлами наберите:
cd <Нужная директория> svn diff <filename>
Svn commit
Запустите svn diff чтобы увидеть какие изменения вы вносили в файл с момента последнего апдейта. Потом обновите файл svn up, запустите svn diff , и svn commit с сообщением:
svn diff <filename>
Покажет вам изменения с последнего обновления.
svn update <filename>
Эта комманда сольет изменения, внесенные в файл в репозитории с теми что внесли Вы. Ваши изменения имеют приоритет. Но могут возникнуть конфликты, если строки которые вы правили на Вашей машине были изменены в репозитории с вашего последнего апдейта.
svn diff <filename>
diff покажет отличия между файлами: Вашим и тем что в репозитории. Убедитесь в том, что только новый код, который вы добавили это совокупность различий.
svn commit -m'Message' <filename>
Message — это сообщение, которое пояснит какие правки вы вносили.
Чтобы производить действия над несколькими файлами, отделите их пробелами:
svn diff <filename> <filename2> <filenameN> svn update <filename> <filename2> <filenameN> svn diff <filename> <filename2> <filenameN> svn commit - m "message" <filename> <filename2> <filenameN>
Добавляем новый файл в репозиторий
Как добавить новый файл в svn репозиторий
svn add <filename> svn commit -m "This new file will do something useful" <filename>
Вы можете добавить несколько файлов
svn add <filename1> <filename2> <filenameN> svn commit -m "These new files work together to add some extra functionality" <filename1> <filename2> <filenameN>
Удаляем файлы из репозитория
Чтобы удалить файл из репозитория, если вы не находитесь в рабочей копии
svn remove -m "I deleted this file for a reason" http://svn.greenstone.org/....../thefile.ext
Алиасы для svn remove : svn delete , svn rm. Вы не можете удалить несколько файлов из репозитория за 1 раз в одну строку
Полезные команды svn
svn info
svn switch
svn status
Если вы делаете svn status в директории, он рекурсивно выдаст список всех Модифицированных (M), Удаленных (D) и добавленных (A) файлов. Так же он покажет и список конфликтных файлов (C) и тех, о которых svn не имеет понятия (?). Чтобы увидеть изменения в каждом отдельном файле наберите
svn diff <filename>
svn help svn help [item] svn help status
svn help commit
Конфликты svn и пути их решения
- Когда вы делаете «svn status» в директории, в которой есть файлы помеченные C, это значит, что файлы конфликтуют с версиями в репозитории
- svn update тоже может показать, что файлы конфликтуют. Если вы произвели svn up и один или несколько файлов имеют статус С — у Вас конфликт. Это значит, что пока вы работали над определенными строками(меняли их), кто-то уже успел внести изменения в эти же строки и сохранить их в репозитории. svn update не смог объединить код тк строки не совпали: строки конфликтуют.
Если Вы столкнулись с конфликтом и откроете конфликтующий файл в тестовом редакторе, то вы увидите, что конфликтующие линии помечены «=====» и «>>>>» Обе группы изменений, которые сделали Вы и те, что были внесены в репозитории будут встроены в файл со специальными маркерами. Если Вы сделали svn update с файлами, которые оказались конфликтующими ,то svn создаст несколько дополнительных файлов: conflict-filename.mine и confolict-filename.<revisionnumber> Первый -это Ваша локальная версия, содержащая все изменения, которые Вы внесли. Второй — Файл из репозитория.
Чтобы разрешить конфликт в файле, помеченном C
- Откройте конфликтный файл в редакторе
- Ищите вхождения «>>>>» или «====». Каждое такое вхождение указывает на конфликтную секцию, которую нужно решить.
- Разберитесь что делать с различающимися частями — какую оставить, какую убрать или как совместить их.
- Как только закончите редактирование, нужно поставить статус разрешенного конфликта!
svn resolved <filename>
Если попробуете ещё раз набрать svn update, конфликта больше быть не должно.
Сентябрь 17th, 2011 at 22:49
Самая важная команда SVN: svn help Далее всегда можно узнать справку по любой команде: svn help switch
Неплохо бы знать и использовать merge (ну как не использовать сравнение версий перед тем, как коммитить в svn) и export (не выкатывать же на продакшин svn, там дырки есть, можно спокойно засветить весь код).
К сожалению совсем не раскрыта тема properties. Это самое сложное при использовании SVN. Даже у опытных пользователей бывают проблемы. Но зато это очень удобный и полезный механизм SVN, который позволяет скрывать ненужные файлы, каталоги, другие вкусности.
Понимаю, что описывать использование svn более полно — дело неблагодарное, все есть в офф. мане. Но краткий курс для новичков пополнить описанием более полно было бы полезно. Хотя для новичков и данное описание будет очень полезным. Спасибо!
Сентябрь 17th, 2011 at 22:53
Забыл про конфликты. Бываю ситуации, что кусок конфликтного кода очень большой или, что хуже много маленьких кусков, сделанных другим разработчиком. Если есть уверенность, что все эти изменения можно игнорировать, то гораздо удобнее удалить файлы filename.mime, filename.revnum и сделать svn revert filename. В этом случае теряются собственные изменения, но если есть уверенность, что в них нет необходимости (например было сделано много принтов для отладки, но сам код не менялся), то так проще и безопаснее привести состояние файла к тому, которое хранится в svn.