SVN ( Subversion ) вся правда для новичка

Автор: Aport Суббота, Январь 31st, 2015 Нет комментариев

Рубрика: Software

Я решил поведать тебе новичок, информацию в том виде, в котором она попала ко мне. Поэтому, привожу текст полностью объясняющий цель и суть работы программы SVN.

Новичок: Привет, есть программный вопрос, ты часом не пользуешься SVN (Subversion) ?
Пользователь SVN: Привет, пользуюсь, ага (agree)
Новичок: я так понял там принцип простой, после установки сервака, создается директория, в которую ты можешь поместить свой проект, а далее изменяй себе сколько-угодно файлы и папки, старые версии этих файлов и папок будут логироваться и складываться в папки с датами последних изменений, ну это я так догадываюсь, что скажешь?
Пользователь SVN: не угадал :)
Пользователь SVN: сервак нужен, чтобы хранить все версии файлов (точнее, там даже не сами файлы хранятся, а отличия одной версии от другой)
Пользователь SVN: есть еще клиентская часть…
1) надо создать репозиторий: на компе, где лежат оригинальные файлы, запускаешь клиента, указываешь ему путь к папке с файлами, адрес сервера, и клиент заливает все файлы на сервер
2) после этого можешь менять файлы на компе, затем снова запускаешь клиента, указываешь ему только папку (он уже запомнил адрес сервера), и клиент заливает изменения на сервер
3) если надо получить актуальную версию файлов, снова — к клиенту, он скачает их в указанную папку
Пользователь SVN: если всё это делать штатный клиентом, упаришься, поэтому народ пользуется клиентом TortoiseSVN (для Винды)
Новичок: хм… интересный подход, а где лежит инфа об изменениях в файлах?
Пользователь SVN: её клиент вычисляет
клиент в каждую папку кладет свою скрытую папку с именем .svn, в которой хранит последнюю версию файла, полученную с сервера
когда клиент заливает новую версию, он сравнивает оригинальный файл с тем, что лежит в папке .svn, вычисляет изменения, и отправляет их на сервер
Новичок: значит полный бэкап измененных файлов таки не ведется, только последнии версии и предпоследнии
Новичок: и узнать чем версия 1 отличалась от версии 3 не удастся, только отличия 2 от 3
Новичок: верно?
Пользователь SVN: почему? сервер тебе всегда может прислать любую версию файла
Новичок: но ведь «клиент в каждую папку кладет свою скрытую папку с именем .svn, в которой хранит последнюю версию файла, полученную с сервера» т.е. я имею только новую версию 3 и версию с сервера 2, или я не до конца понял?
Новичок: а отличия будет хранить сервак, совсем забыл
Пользователь SVN: сервер хранит для файла: версию 1, изменения до версии 2, изменения до версии 3, …
Пользователь SVN: в папке .svn у тебя обычно будет последняя версия, которая на сервере
Новичок: все, теперь я понял обязанности сервака и клиента :)
Новичок: удобно :)
Новичок: кстати, весь этот софт бесплатный я так понял?
Пользователь SVN: у subversion есть заморочки, которые надо научиться обходить, но софт — бесплатный :)
Новичок: и еще, насколько корректно и правильно вычисляются изменения, бывали случаи с глюками?
Пользователь SVN: глюков никогда не замечали
я даже подозреваю, что изменения вычисляет сервер, а не клиент
Пользователь SVN: т.е. может быть, коммитится файл целиком
Новичок: коммитится?
Пользователь SVN: commit
Пользователь SVN: в данном контексте означает «заливается на сервер»
Новичок: а, ну это конечно
Пользователь SVN: а с сервера всегда летят изменения
Новичок: не, я думаю с сервера тоже летят полные файлы
Пользователь SVN: не-а, с сервера летят изменения, для оптимизации трафика
Пользователь SVN: стопудово :)
Новичок: а как клиент может сравнить файлы (вычислить изменения) без просмотра файла?
Новичок: думаю никак
Новичок: с запятой :)
Пользователь SVN: сравнить изменения с той версией файла, которая лежит в папке .svn, он может
Новичок: конечно может, но он ведь он сначала должен закачать файл в папку .svn
Пользователь SVN: если его там нет, то летит файл целиком
а если там файл версии 2, а на сервере — версии 3, то с сервера прилетит только изменение с 2 до 3
Новичок: неа, не прилетят изменения, т.к. чтобы узнать различия, то нужно 2 файла, а как же узнать содержание файла версии 3 на серваке?
Новичок: и при этом не скачивать его! не получится.
Новичок: а т.к. в .svn могут лежать старые файлы (ведь с файлами на сервере могут работать и др. пользователи) то он сначала закачает их с сервера в .svn, а затем сравнит, наверное так логичнее
Новичок: хотя, я пока не уверен, надо пробовать :)
Новичок: в любом случае, спасибо за консультацию, весьма полезная информация! (bow)
Пользователь SVN: клиент посылает на сервер запрос: «у меня есть файл версии 2, а я хочу — свежак»
сервер определяет, что у него актуальная версия этого файла — 3, и высылает на клиента отличия между 2 и 3
клиент применяет эти отличия, и получает файл версии 3
Пользователь SVN: давай сразу скажу о двух косяках
Новичок: а, ну если файлы сравнивает сервак, тогда ты 100% прав
Пользователь SVN: 1) если ты удаляешь файл, то он к тебе прилетит с сервера снова
1a) если ты переименовываешь файл A в B, то с сервера прилетит и файл A, т.к. у тебя в папке его нет
т.е. удалять и переименовывать надо через клиента
2) если на сервере хранится файл, который поменял кто-то другой, то клиент может для некоторых файлов делать слияние «merge», т.е. по своему усмотрению вставить строчки из разных редакций файла (типа, ничего не потерять)
Новичок: вот пункт 2 нужно обязательно где-то отключать, это же глюк
Пользователь SVN: это так заложено в идею
правда, у тебя будет три версии файла: 1) которую клиент «слил», 2) твоя оригинальная, 3) серверная оригинальная
после этого надо самому разрулить слияние, удалить два лишних файла, и залить на сервер результат
Новичок: ну, надо полагать, то что будет 3 версии файлов это хорошо, но вот я должен работать уже работать с самой новой версией и не заботиться о тех 2-х
Пользователь SVN: можно получить с сервера свежак, затерев тот файл, который есть у тебя (т.е. проигнорировав твои изменения)
Пользователь SVN: мы обычно так и делаем, когда появляются конфликтующие файлы
Новичок: ясно, короче нужно хорошенько потестировать это все дело, чтобы не попасть на косяк и уничтожение своих трудов :)
Пользователь SVN: ага :)
Новичок: спасибо за нюансы, вес

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты