Однажды знакомая постучалась мне в Аську и спросила, чем мы на работе пользуемся, чтобы управлять и версионировать код. В итоге получился такой чатик на часок.
Долгое время этот раздел был полезной справкой для моих школьников. Сначала отсылаешь их штудировать этот лог и пошагово делать, что написано. И только потом отвечаешь на оставшиеся вопросы. Очень экономило преподское время.
Оставляю этот раздел на сайте для истории. А также на его основе я сочиню аналогичный чат про Гит.
Общение состоялось когда-то между 2008 и 2010. Знакомая теперь сеньёрный сеньёр.
SVN. За час.
(22:26:07) Серёджа: будем использовать svn.
(22:26:11) В.: это что такое?
(22:26:48) Серёджа: https://ru.wikipedia.org/wiki/Subversion
(22:27:08) Серёджа: это система контроля версий
(22:28:01) В.: а есть какая-нибудь ломанная её копию, чтобы посмотреть чего она из себя представляет?
(22:28:13) Серёджа: это же опенсорс
(22:28:22) Серёджа: там должна быть ссылка на тортойз
(22:28:50) Серёджа: https://tortoisesvn.net/
(22:29:01) Серёджа: качай. покажу как пользоваться
(22:33:37) Серёджа: ну ладно. Ты себе Tortoise поставь
(22:33:48) В.: блин. я тут пока врубаюсь че мне качать)
(22:33:56) Серёджа: ща скажу
(22:37:04) Серёджа: https://osdn.net/projects/tortoisesvn/storage/1.14.0/Application/TortoiseSVN-1.14.0.28885-win32-svn-1.14.0.msi/
(22:38:26) В.: качается
(22:41:30) В.: ога скачала
(22:42:30) Серёджа: ставь. Он потребует перезагрузки
(22:42:37) В.: ога
(22:42:40) В.: щас. вернусь
(22:47:53) В.: тут
(22:48:01) Серёджа: ага.
(22:48:04) В.: хм. а русификация к нему есть?
(22:48:33) Серёджа: щас объясню всё, можно будет без русификации обойтись.
(22:48:38) В.: давай
(22:48:39) Серёджа: создай пустую папку.
(22:49:23) В.: есть
(22:49:31) Серёджа: тыкай на ней задней кнопкой
(22:49:45) Серёджа: и выбирай: создать репозиторий
(22:50:15) В.: ога
(22:50:46) Серёджа: получилось? Я просто не очень помню, как там репозитории создавать.
(22:51:01) В.: да
(22:51:02) Серёджа: значит. это обычно делают админы на сервере.
(22:51:27) Серёджа: теперь делаешь в другом месте другую папку.
(22:51:55) В.: и?
(22:52:08) Серёджа:
тыкаешь на ней задней кнопкой и говоришь
checkout
(22:52:55) В.: и?
(22:53:05) Серёджа: он что-нибудь спрашивает?
(22:53:11) В.: какуую то фигню вывел
(22:53:23) В.: видимо URL надо ввести
(22:53:34) Серёджа: вводишь путь до репозитория
(22:53:42) Серёджа: который только что создала
(22:53:47) В.: ввела. не нравится путь
(22:53:57) Серёджа:
тогда перед ним ставишь
file:///
(22:54:09) В.: ога. проканало
(22:54:21) Серёджа: круто. Это ты сделала рабочую копию
(22:54:22) В.: ещё одну фигню вывел и написал в ней 0
(22:54:29) Серёджа: круто. это нулевая ревизия
(22:54:46) В.: ога
(22:54:48) В.: а дальше?
(22:55:01) Серёджа: обычно путь до репозитория выглядит как-нибудь вроде: https://svn.osdn.net/svnroot/tortoisesvn/
(22:55:15) Серёджа: ну в смысле, когда он на серваке
(22:55:31) Серёджа: дальше. можно работать. создай там текстовый файл
(22:55:42) Серёджа: и напиши чего-нибудь в несколько строчек
(22:57:40) В.: ога. я уже файл запихала в первую папку.
(22:57:52) В.: ну он типа сохранился в хранилище
(22:58:01) Серёджа: сделала коммит?
(22:58:09) В.: да
(22:58:12) Серёджа: круто.
(22:58:25) Серёджа: ты видишь, зелёную галочку?
(22:58:28) В.: гы) что ещё можно с ним делать. ну запихаю я туда кучу файлов. и что?
(22:58:47) Серёджа: выйди так, что можно видеть папку рабочей копии
(22:58:54) В.: резолвед?
(22:59:09) Серёджа: не.
(22:59:11) Серёджа: погоди
(22:59:18) Серёджа: ты сделала коммит?
(22:59:43) Серёджа: резолвед, это значит у тебя уже конфликты какие-то пошли
(23:00:05) В.: да. в рабочей папке сделала коммит. и файл закопировался в хранилище или как его обозвать не знаю
(23:00:19) Серёджа: в репозиторий
(23:00:22) Серёджа: хорошо.
(23:00:22) В.: нет. я вижу зелёную галку резолвед.
(23:00:26) Серёджа: отлично
(23:00:27) В.: других галок не вижу
(23:00:39) Серёджа: теперь войди в папку измени файл
(23:00:49) Серёджа: добавь пару строчек и измени какие-нибудь
(23:01:15) Серёджа: Выйди на уровень вверх потом
(23:01:17) В.: изменила.
(23:01:21) Серёджа: увидишь, что папка стала красной
(23:01:21) В.: и?
(23:01:30) В.: неа. не стала.
(23:01:59) Серёджа:
странно. тыкай на ней задней кнопкой и выбирай
check for modifications
(23:02:05) В.: хм. вот черт. это только через Проводник она стала красной: (
(23:02:14) Серёджа: ну не важно.
(23:02:57) Серёджа:
check for modifications
показывает отличия. можно ткнуть на файл и выбрать
diff
, увидишь что конкретно изменилось
(23:03:15) В.: ога вижу
(23:03:20) Серёджа: хорошо. закрывай.
(23:03:24) Серёджа: делай коммит.
(23:03:39) Серёджа: В коммите есть комментарий — полезная штука
(23:03:54) Серёджа: Заметь. В репозиторий сохраняются только изменения.
(23:04:14) Серёджа: то есть это ты не второй файл туда залила, а только сохранила информацию о том, как файл изменился.
(23:04:47) Серёджа: точно так же и наоборот. Когда кто-то что-то изменил, а ты делаешь апдейт
(23:04:57) Серёджа: то ты тоже выкачиваешь только изменения
(23:05:05) Серёджа: удобно.
(23:05:16) Серёджа:
хорошо. Теперь тыкай на папку и говори
show log
(23:06:31) В.: круто — могу и старые файлы видеть!!!
(23:06:38) В.: получилось.
(23:06:43) В.: а что ещё оно умеет?
(23:06:44) Серёджа:
show log
?
(23:06:48) В.: да
(23:06:56) В.: она все версии показывает.
(23:07:00) В.: и старые и новые
(23:07:00) Серёджа: ты можешь тнуть на любую ревизию и сапдейтиться до неё.
(23:07:05) В.: и отличия показывает
(23:07:25) Серёджа:
т е. сказать
update to revision
и у тебя будет версия как сто лет назад
(23:08:06) Серёджа: Дальше. Бывает, что всякие проги создают в рабочей копии всякие левые файлы и папки, которым в репозитории не место.
(23:08:26) Серёджа: например скомпилированый ехе файл коммитить незачем
(23:08:27) В.: угу
(23:08:36) Серёджа: создай какой-нибудь файл
(23:08:38) В.: ога
(23:08:55) В.: ога
(23:08:56) Серёджа:
на папке ткни
check for modifications
(23:09:08) Серёджа:
он будет
nonversioned
(23:09:26) В.: угу и?
(23:09:27) Серёджа:
тыкаешь по нему и говоришь
Add to ignore
.
(23:09:39) В.: угу
(23:09:48) Серёджа:
например, если еэто
error.log
(23:09:57) В.: ога. сделала саммит.
(23:09:58) Серёджа:
то можно в игнор добавить
*.log
(23:10:06) В.: ненужный файл туда не попал!
(23:10:19) В.: ога. понятно
(23:10:21) Серёджа:
и все эти файлы не будут коммитится и не будут отображаться в
check for modifications
(23:10:30) В.: понятно
(23:10:36) Серёджа: теперь. Ты что-то понаписала, хочешь откатить.
(23:10:40) В.: угу
(23:10:42) В.: и?
(23:10:43) Серёджа:
делаешь
revert
(23:10:56) Серёджа:
revert
убирает все изменения из рабочей копии
(23:11:17) Серёджа: дальше. Создай себе где-нибудь ещё одну рабочую копию.
(23:11:27) В.: работает!
(23:12:34) Серёджа: Измени в ней файл и сделай коммит.
(23:12:45) В.: да и в новую рабочую папку обновила по репозиторию
(23:13:42) В.: да и в старой рабочей папке апдейтилась и увидела изменения что сделала в новой рабочей папке
(23:13:47) В.: а что ещё можно?
(23:13:53) Серёджа: А в первой папке измени файл в том же месте, где в той, только по другому.
(23:13:58) Серёджа: чтобы конфликт возник
(23:14:03) В.: ога
(23:14:09) В.: а если я его переименую?
(23:14:16) Серёджа: не. ща
(23:14:25) В.: изменила и че делать?
(23:14:34) В.: я их переименовала)
(23:14:34) Серёджа: теперь апдейться
(23:14:43) Серёджа: ну. давай поочереди
(23:15:22) Серёджа:
заметь. Что переименовывать и копировать лучше не стандартными
copy
и
move
, а теми, которые в
subversion
вкладке
(23:15:44) Серёджа: Потому что тогда в репозиторий сохраняется только информация о том, что что-то скопировано.
(23:15:48) Серёджа: только изменение.
(23:16:04) В.: ога возник конфликт
(23:16:17) Серёджа:
говори
edit
(23:16:24) Серёджа:
edit conflict
(23:16:26) В.: и?
(23:16:29) Серёджа: ну или как там. не помню
(23:16:38) Серёджа: у тебя старая, новая и снизу общая
(23:16:42) В.: а где это сказать?
(23:16:49) Серёджа: на красной строчке задней кнопкой
(23:16:52) В.: че?
(23:17:18) Серёджа:
задней кнопкой на красной строчке говоришь
edit conflict
(23:17:41) Серёджа: Или ты окошко уже закрыла?
(23:17:48) В.:
open parent folder
и
copy to clipboard
предалгает (
(23:17:54) В.: нет. не закрыла.
(23:17:58) Серёджа: что за гон
_(23:18:07) В.:
_ Command: Commit
Modified: D:\project\Контроль версий\3\файл проекта.txt
Error: Commit failed (details follow):
Error: File '/файл проекта.txt' is out of date
Error: You have to update your working copy first.
Finished!:
(23:18:16) Серёджа: а. ну да.
(23:18:30) Серёджа: Вообще есть правило. Перед коммитом всегда апдейтиться
(23:18:49) Серёджа: Это помогает избежать неприятностей
(23:20:26) Серёджа: ты сапдейтилась?
(23:20:35) Серёджа: во время апдейта должен был возникнутьконфликт
(23:22:02) В.: окошко пока открыто. не могу конфликт разрешить
(23:22:11) В.: в логи отсюда выхожу.
(23:22:14) Серёджа: так. ладно. закрывай все окошки.
(23:22:25) В.: и что делать?
(23:22:33) Серёджа: апдейт ты сделала?
(23:22:45) В.: не хочу перед коммитом апдлейтиться. это ж все мои изменения убьет.
(23:22:52) Серёджа: нет. не убъёт
(23:22:58) В.: сделала
(23:23:04) Серёджа: перед коммитом надо апдейтиться обязательно
(23:23:11) Серёджа: Конфликт возник?
(23:23:17) В.: возник
(23:23:30) Серёджа: возник красной строчкой?
(23:23:36) В.: да
(23:23:44) Серёджа:
тыкаешь на ней, говоришь
edit conflict
(23:24:56) Серёджа: Ты проверяешь, что у тебя всё правильно. Компилится там всё, тесты проходят и т.д
(23:25:08) Серёджа: Потом апдейтишься. Проверяешь что снова всё правильно
(23:25:14) Серёджа: Потом коммитишься
(23:25:26) Серёджа: Обычно конфликты не возникают.
(23:25:41) Серёджа: Если изменения в разных частях файла, то он их нормально сам разруливает.
(23:26:05) В.: так стоп и че мне с конфликтом делать?
(23:26:10) В.: он мне открыл два файла.
(23:26:15) В.: ну вижу конфликт и че.
(23:26:26) В.: пытаюсь куданить тыкнуться и сказать что вот тут строка верная.
(23:26:29) Серёджа: тыкаешь задней кнопкой по красной строчке
(23:26:30) В.: а тыкнуться пока не поняла куда
(23:26:40) В.: аааа
(23:26:47) Серёджа: и варианты взять ту, взять эту или взять ту перед этой или взять ту после этой
(23:27:11) В.: а с оранжевыми строками че надо сделать?
(23:27:18) Серёджа: ничего.
(23:27:40) Серёджа: это те изменения, которые произошли с твоего последнего апдейта
(23:27:46) Серёджа: их сделали, наверное, другие люди
(23:27:57) Серёджа: дальше тыкаешь в save там сверху
(23:28:07) Серёджа: и в восклицательный знак, типа всё разрешено.
(23:29:23) В.: в восклиц знак не успела)
(23:29:28) Серёджа: ну ладно.
(23:29:29) В.: но по кр мере это получилось
(23:29:45) Серёджа: если ты не разрешила, то он тебе потом об этом напомнит
(23:29:57) В.: о чем?
(23:30:05) Серёджа: там файлик должен быть обозначен восклицательным знаком
(23:30:11) Серёджа: ну что конфликт не разрешён
(23:30:18) Серёджа: Если разрешён, то всё норм
(23:31:00) В.: дык я ж разрулила конфликт. нет ничего не обозначено
(23:31:10) В.: изменила и обновилась ещё раз. все норм
(23:31:54) Серёджа: ну вот. можно коммититься
(23:32:12) Серёджа: дальше про переименования.
(23:32:37) Серёджа: Если ты просто файл переименуешь, то он подумает, что файл потерялся и появился новый без контроля версий.
(23:32:43) Серёджа: старый он восстановит при апдейте
(23:32:58) Серёджа: Поэтому удалять, копировать, переименовывать надо командами svn
(23:33:40) Серёджа: Чем хорошо. Ты можешь скопировать огромную преогромную папку. А в репозиторий запишется только одна строчка, что такая-то папка была скопирована
(23:33:50) В.: ога получается
(23:34:43) Серёджа: Ну в принципе всё.
(23:34:49) Серёджа: Почитай ещё статейку в википедии
(23:35:23) В.: прикольно в общем.
(23:40:22) В.: а вообще спасибо — прямо просвятил. да ещё и удалённо по аське.