| 14 | |
| 15 | == Краткое описание того, как пользоваться Subversion: |
| 16 | |
| 17 | Предположим, что вы получили следующие данные для авторизации в Subversion: |
| 18 | |
| 19 | * Логин: ilya.makarov |
| 20 | * Пароль: 123qwe! |
| 21 | * Адрес репозитория будет такой: https://trac.compscicenter.ru/itmo-svn/cpp21/ilya.makarov/ (это адрес вашей папки в репозитории). |
| 22 | |
| 23 | Для того, чтобы загрузить туда своё домашнее задание, совершенно бесполезно открывать соответствующую ссылку в браузере. Для работы с Subversion нужно поставить и использовать клиент. |
| 24 | |
| 25 | О Subversion и используемых в нём сущностях и понятиях можно прочитать в данной книге [http://svnbook.red-bean.com/nightly/ru/index.html]. |
| 26 | |
| 27 | * Самый простой способ для Windows пользователей - поставить графический клиент [https://tortoisesvn.net/ TortoiseSVN], с которым всё просто и приятно. Для него доступна [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/index.html документация на русском языке], в которой описаны [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-qs-basics.html основные концепции Subversion], [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-checkout.html как сделать выгрузку], [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-commit.html как добавить файлы и закоммитить в репозиторий], [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-wcstatus.html как понять текущее состояние репозитория]. |
| 28 | * Если у Вас не Windows или вы хотите всё делать из консоли, то смело ставьте консольный клиент (например, sudo apt-get install subversion на Debian-based дистрибутиве Linux). Для консольного клиента доступно руководство по использованию на русском языке, в котором описаны [http://svnbook.red-bean.com/nightly/ru/svn.basic.html фундаментальные понятия], [http://svnbook.red-bean.com/nightly/ru/svn.tour.initial.html как сделать выгрузку], [http://svnbook.red-bean.com/nightly/ru/svn.tour.cycle.html как добавить файлы, закоммитить в репозиторий, понять текущее состояние репозитория]. |
| 29 | |
| 30 | === Примерная последовательность команд |
| 31 | |
| 32 | 1. При помощи клиента нужно выгрузить (**checkout**) репозиторий - у Вас создастся папка на компьютере. |
| 33 | |
| 34 | 2. После этого нужно создать внутри папку для домашнего задания. |
| 35 | |
| 36 | 3. Положить в неё свои файлы. Добавить (**add**) папку к репозиторию. |
| 37 | |
| 38 | 4. Сделать коммит (**commit**) изменений на сервер. |
| 39 | |
| 40 | **ВНИМАНИЕ: не стоит добавлять в репозиторий лишние файлы, такие как бинарные файлы или служебные файлы вашей IDE.** |
| 41 | |
| 42 | === Пример работы из консоли |
| 43 | |
| 44 | Для консольных пользователей последовательность команд должна быть примерно такой: |
| 45 | |
| 46 | |
| 47 | {{{ |
| 48 | $ svn checkout https://trac.compscicenter.ru/itmo-svn/cpp21/ilya.makarov/ --username ilya.makarov |
| 49 | [ вводите пароль ] |
| 50 | $ cd ilya.makarov |
| 51 | $ mkdir ha1 |
| 52 | |
| 53 | [ кладёте в ha1 свои .cpp и .hpp файлы + Makefile ] |
| 54 | |
| 55 | $ svn add ha1 |
| 56 | $ svn commit -m "Home assignment #1" |
| 57 | [ теперь добавленные файлы доступны на сервере ] |
| 58 | |
| 59 | [ предположим, теперь нужно исправить ошибку в ha1/main.cpp ] |
| 60 | [ вносите исправления в ha1/main.cpp ] |
| 61 | |
| 62 | $ svn add ha1/main.cpp |
| 63 | $ svn commit -m "Fix main function" |
| 64 | [ исправления отправлены на сервер ] |
| 65 | }}} |
| 66 | |
| 67 | === Закрепление изменений в репозитории |
| 68 | Закрепление (**commit**) изменений в SVN происходит в две стадии, независимо от того, сдаёте вы домашнее задание в первый раз или исправляете. |
| 69 | |
| 70 | Сначала вы отмечаете файлы, которые надо добавить/удалить из репозитория. Подключение к интернету для этого не требуется. Отмечать файлы, которые в репозитории уже были, но поменялись, не требуется, они обнаружатся автоматически. |
| 71 | После этого вы выполняете команду `svn commit`, которая просит указать комментарий к внесённым изменениям (опционально) и отправляет данные на сервер. Для этого требуется подключение к интернету. |
| 72 | |
| 73 | Как отмечать файлы: |
| 74 | |
| 75 | 1. Перейдите в корень личного репозитория. |
| 76 | 2. Командой `svn status` выясните текущее состояние файлов в репозитории. Каждый файл/папка в необычном состоянии будет выведен отдельной строкой. |
| 77 | * Знаком **?** отмечены файлы или папки, которые не добавлены в репозиторий ни в каком виде. |
| 78 | * Знаком **A** отмечены файлы или папки, которые будут добавлены в репозиторий в ближайшем коммите. |
| 79 | * Знаком **D** отмечены файлы или папки, которые будут удалены из репозитория в ближайшем коммите. |
| 80 | * Знаком **M** отмечены файлы или папки, которые изменились по сравнению с последним коммитом. Эти изменения будут закреплены в ближайшем коммите. |
| 81 | * Знаком **!** отмечены файлы или папки, которые на диске отсутствуют, но которые были отмечены для добавления в репозиторий командой `svn add`. |
| 82 | 3. Если есть файлы, которые в репозиторий добавлять не требуется (например, исполняемые файлы), уберите их командой `svn rm --keep-local lab1`. Ключ `--keep-local` означает "удалить файл из репозитория, но не с жёсткого диска". |
| 83 | 4. Командой `svn status` убедитесь, что в репозиторий отправляются только нужные файлы, а ненужные (объектные файлы, исполняемый файл, временные файлы для отладки) — не отправляются. |
| 84 | 5. Вы также можете научить svn игнорировать файлы с определённым именем в произвольной папке, чтобы можно было обновлять всю папку рекурсивно — см. ниже (это не требуется для сдачи ДЗ). |
| 85 | 6. Выполните команду `svn commit` и введите комментарий к коммиту. |
| 86 | |
| 87 | === Игнорирование файлов |
| 88 | |
| 89 | Если вы уже добавили ненужные файлы по ошибке, уберите их командой `svn rm --keep-local`. |
| 90 | |
| 91 | Выполните команду `svn propedit svn:ignore .` в папке, для которой требуется настроить игнорирование. |
| 92 | |
| 93 | В открывшемся текстовом редакторе напишите маски для имён файлов, которые надо игнорировать, по одной на строчку. Например: `*.obj` или `.in`. |
| 94 | |
| 95 | Скорее всего, у вас открылся редактор nano. В нём нельзя выделять текст, но можно его писать и стирать. Сохраните файл и закройте редактор. |
| 96 | |
| 97 | Из редактора nano можно одновременно выйти и сохранить файл сочетанием клавиш **Ctrl+X**. После этого сочетания надо либо согласиться сохранить файл (**y**), либо отказаться (**n**). Имя файла для сохранения оставьте без изменений. |
| 98 | |
| 99 | Командой `svn status` убедитесь, что все ненужные файлы теперь игнорируются, а папка с обновлённым правилами игнорирования помечена буквой **M**. |
| 100 | |