Форум программистов, компьютерный форум, киберфорум
Наши страницы
Софт для Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
#pragma
Временно недоступен
956 / 227 / 14
Регистрация: 12.04.2009
Сообщений: 926
1

Вопрос по svn (Subversion)

14.07.2009, 00:24. Просмотров 4150. Ответов 9
Метки нет (Все метки)

Делаю хранилище на локальной машине.Создаю локальную (рабочую) копию хранилища,поправил,изменил файлы командой svn update,зафиксировал svn commit:
Python
1
2
3
4
5
6
7
8
9
~/svn$ svn commit --message "In Variable removed value an type fields,replaced by Value member"
Посылаю         Interpreter.depend
Посылаю         bin/Debug/Interpreter
Посылаю         syntax_parser.cpp
Посылаю         value_class.h
Посылаю         variable_class.cpp
Посылаю         variable_class.h
Передаю данные ......
Создана редакция 3.
Вот только в самом хранилище файлы не изменились.Я так понимаю,что главная линия разработки лежит в ответственности руководителя проекта? Иначе кто изменяет исходники главного хранилища? То есть,если я правильно понял,svn просто сохраняет "слепок" производимых операций над файлами проекта во времени от каждого разработчика,а потом кто-то должен выбрать путь главной линии разработки и изменить исходники хранилища,при этом оповестив svn?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2009, 00:24
Ответы с готовыми решениями:

subversion problem
Приветствую всех форумчан. Как и указано в заголовке - проблема с subversion. В чем заключается:...

[bat] move c:\tmp\.svn c:work\.svn
всем привет. почему то он не распознает .svn как валидный путь. как можно из батника...

subversion и 1с-бистрикс
как использовать subversion для проектов на cms 1с-битрикс, которые находятся на хостинге

netBeans + subversion
Погуглил по сабжу, даже на одном форуме создал тему(никто не ответил). Вроде правильно...

SUBVERSION FOR WINDOWS
Добрый день, очень необходимы хорошие, доходчиво написанные и понятные инструкции по установке и...

9
Evg
Эксперт CАвтор FAQ
20298 / 7825 / 602
Регистрация: 30.03.2009
Сообщений: 21,852
Записей в блоге: 30
14.07.2009, 10:06 2
> Вот только в самом хранилище файлы не изменились

В каком смысле? Вернее, как ты об этом узнал? В хранилище всё хранится в запакованном виде и по внешним признакам не понять, изменилось там что-то или нет.

svn не просто сохраняет слепок, а пишет изменения относительно предыдущей версии. Т.е. в любой момент времени можно выцепить любую ревизию (а не только текущее состояние).

Условно говоря, принцип примерно следующий. В хранилище сейчас записано некоторое текущее состояние, допустим ему соотвествует номер ревизии 3 (мне более привычно слово "ревизия" - revision, а не "редакция"). A и B делают себе рабочие копии (в литературе часто используют сокращение WC - working copy). A и B делают правки в локальной копии, полагаем, что правки друг с другом не конфликтуют (т.е. правят они НЕ одно и то же место). A делает "svn commit" и вносит в хранилище свою правку, номер ревизии в хранилище стал 4. У B пока номер ревизии в рабочей копии 3 плюс свои правки. B делает "svn update" и подцепляет к своей рабочей копии правки, внесённые A. Т.е. у B сейчас в рабочей копии номер ревизии 4 плюс свои собственные правки. B делает "svn commit" и вносит в хранилище свои правки. Номер текущей ревизии в хранилище стал 5. У A пока в рабочей копии номер 4, он делает "svn update" и подцепляет правки от B, теперь у A в рабочей копии номер ревизии 5.

При этом можно всегда выцепить из хранилища файлы по стстоянию на ревизию 3, 4 и 5. Точную команду не помню, но что-то типа "svn update -r 3"

Добавлено через 1 минуту 18 секунд
Кстати, судя по логу, ты положил под svn ещё и бинарный файл и ещё какую-то <...>. Этого делать не надо, класть надо только файлы с исходниками - в общем те файлы, которые ты сам правишь, но не те, которые генерятся в процессе компиляции
1
#pragma
Временно недоступен
956 / 227 / 14
Регистрация: 12.04.2009
Сообщений: 926
14.07.2009, 14:19  [ТС] 3
Так хранилище это не та папка,которую я добавлял командой svnadmin create,т.е. subversion не хранит самих исходников,а просто делает слепок папки в исходном состоянии? Потому что в этой папке исходники не менялись.
0
Evg
Эксперт CАвтор FAQ
20298 / 7825 / 602
Регистрация: 30.03.2009
Сообщений: 21,852
Записей в блоге: 30
14.07.2009, 14:31 4
Можешь кокнретно показать, какие файлы у тебя где лежат и про какие файлы ты спрашиваешь. Потому как подозреваю, что ты что-то не теми словами называешь, а потому я суть вопроса не втыкаю
1
14.07.2009, 14:31
#pragma
Временно недоступен
956 / 227 / 14
Регистрация: 12.04.2009
Сообщений: 926
15.07.2009, 00:35  [ТС] 5
В общем у меня главный репозиторий с исходниками проекта на одном диске
ветка выглядит так:
Код
/svn
   /conf/
   /db/
   /hooks/
   /locks/
  /Projects/Тут я положил исходники проекта
  format
,я сделал рабочую копию себе в домашнюю папку,меняю файлы,сохраняю,делаю svn update,svn commit -message "blabla", пишет
Код
Посылаю         syntax_parser.cpp
Посылаю         variable_class.h
Передаю данные ..
Создана редакция 2.
А как мне изменять файлы исходников в самом хранилище?Или я опять что -то не догнал? Или там не должно быть исходников?

P.S. Блин я уже намаялся так с этой фигнёй,кошмар Всё вроде объяснено в этой книге но я ничего не понимаю,ну вот просто бы взяли полный рабочий цикл объяснили,так намного понятней. Я даже от Линукса так не уставал,когда первый раз только учился настраивать и пр.
0
Rififi
2366 / 1059 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
15.07.2009, 00:40 6
когда ты вытягиваешь проект из репы он уже настроен на использование того сервера, откуда ты его вытянул. чтобы после копирования репы svn понял откуда/куда брать сорцы, надо сделать relocate. как в командной - не помню, в тортоизе - правым кликлм (:
1
#pragma
Временно недоступен
956 / 227 / 14
Регистрация: 12.04.2009
Сообщений: 926
15.07.2009, 00:43  [ТС] 7
Я не догоняю почему исходники в хранилище не меняются.. relocate вроде нет такой команды. блин вот жесть(( Я пробовал команду svnadmin upgrade,хотя я точно не понял,что делает эта команда.Ну написало мне там
Код
svnadmin upgrade /media/Part2/C++/svnRepository lock acquired.
Please wait; upgrading the repository may take some time...

Upgrade completed.
И всё равно исходники без изменений.
0
Evg
Эксперт CАвтор FAQ
20298 / 7825 / 602
Регистрация: 30.03.2009
Сообщений: 21,852
Записей в блоге: 30
15.07.2009, 10:02 8
Лучший ответ Сообщение было отмечено как решение

Решение

> /Projects/ Тут я положил исходники проекта

Как положил???

Репозиторий - это некая вещь, куда руками ты не лазишь вообще. При помощи svnadmin ты создаёшь репозиторий, а дальше все манипуляции над ним делаешь ТОЛЬКО при помощи команды svn

Добавлено через 27 минут 6 секунд
Сейчас по шагам всё распишу

Создаём пустой репозиторий (хранилище)
Код
$ svnadmin create /home/trampampam/repo.svn
==========

Смотрим, что в хранилище (в сыром виде на уровне файлов). Там только это и должно присуствовать. Никаких файлов своих проектов ты там никогда не увидишь, потому как они в сжатом виде где-то в этих файлах запрятаны

Код
$ ls /home/trampampam/repo.svn
README.txt  conf/  db/  format  hooks/  locks/
==========

Теперь нам надо создать в хранилище каталог для нового проекта. Этот момент сделан несколько через задницу (или я его не так понимаю), но я делаю вот так:

Код
$ mkdir proj1
$ svn import proj1 file:///home/trampampam/repo.svn/proj1 --message "create proj1"
Committed revision 1.
В команде "svn import" первый параметр proj1 означает каталог, который мы импортируем в хранилище, а file:///home/trampampam/repo.svn/proj1 - это некий условный путь внутри хранилища

Можешь ещё раз убедиться, что никаких дополнительных каталогов напрямую в хранилище не появилось

Код
$ ls /home/trampampam/repo.svn
README.txt  conf/  db/  format  hooks/  locks/
Все операции по чтению только через команду svn:

Код
$ svn list file:///home/trampampam/repo.svn
proj1/
==========

Итак, в хранилище мы каталог создали. Теперь нам надо получить рабочую копию этого каталога. Старый каталог больше не нужен, его можно удалить

Код
$ rm -fr proj1
$ svn checkout file:///home/trampampam/repo.svn/proj1
Checked out revision 1.
Рабочую копию получили, смотрим, что там. А там есть только каталог .svn, означающий, что каталог proj1 находится под управлением svn. Файлов нет, ибо мф пока ничего не создали

Код
$ ls -a proj1
./  ../  .svn/
==========

Теперь создадим файлы и добавим их под управление svn

Код
$ cd proj1
$ > file1
$ > file2
$ svn add file1 file2
A         file1
A         file2
Файлы сейчас добавленты ТОЛЬКО в рабочей копии, в самом хранилище они пока не появились

Код
$ svn list file:///home/trampampam/repo.svn/proj1
<пусто>
Командой svn status смотрим текущее состояние рабочей копии:

Код
$ svn status
A      file1
A      file2
Буква A (add) означает, что у нас есть новый файл, который будет добавлен

Ну а дальше отправляем файлы в хранилище

Код
$ svn commit --message "trampampam"
Adding         file1
Adding         file2
Transmitting file data ..
Committed revision 2.
Ещё раз смотрим состояние и убеждаемся, что рабочая копия соотвествует хранилищу

Код
$ svn status
<пусто>
Смотрим, что в хранилище

Код
$ svn list file:///home/trampampam/repo.svn/proj1
file1
file2
Любые мухлежи в локальной копии больше не требуют указания полного пути до хранилища, т.к. вся эта информация лежит в каталоге .svn

==========

Теперь сделаем правки в файле file1

Проверим состояние

Код
$ svn status
M      file1
Буква M (modify) означает, что файл в рабочей копии отличается от хранилища

Можем посмотреть отличия (в формате diff)

Код
$ svn diff
Index: file1
--- file1       (revision 2)
+++ file1       (working copy)
@@ -0,0 +1 @@
+sdfsdfsd
Далее вносим правки в хранилище

Код
$ svn commit --message "trampampam"
Sending        file1
Transmitting file data .
Committed revision 3.
==========

Теперь некто (например,другой пользователь) может поцепить эти правки к себе:

Код
$ cd /home/qqq
$ svn checkout file:///home/trampampam/repo.svn/proj1
A    proj1/file1
A    proj1/file2
Checked out revision 3.
$ ls proj1/
file1  file2
$ cat proj1/file1   <---- здесь наша правка в файл file1
sdfsdfsd
Так же можно восстановить любое промежуточное состояние. В данном примере восстанавливаем пономеру ревизии 2 (это когда мы добавили два пустых файла)

Код
$ svn update -r 2
U    file1
Updated to revision 2.
$ cat file1
<пусто>
Для восстановления до последнего состояния опять запустим svn update но уже без -r

Код
$ svn update
U    file1
Updated to revision 3.
==========

Теперь мы хотим добавить ещё один файл

Код
$ cd proj1
$ > file3
$ svn status 
?      file3
Вопросительный знак означает наличие файла в катлоге, который не положен под управление svn. Сам svn как правило настроен так, что для файлов типа *.o, *.a он их игнорирует (т.е. по svn status ничего про них не показывает). Где и куда что прописывать для игнорирования - с ходу не помню, просто имейй ввиду, что такое есть

Нам нужно добавить новый файл и далее отправить его в хранилище

Код
$ svn add file3
A         file3
[future proj1]$ svn status
A      file3
[future proj1]$ svn commit --message "qtywer"
Adding         file3
Transmitting file data .
Committed revision 4.
4
#pragma
Временно недоступен
956 / 227 / 14
Регистрация: 12.04.2009
Сообщений: 926
15.07.2009, 17:16  [ТС] 9
Ты всё понятно объяснил,спасибо.Мне только не понятно вот это:
Код
$ mkdir proj1
$ svn import proj1 file:///home/trampampam/repo.svn/proj1 --message "create proj1"
Committed revision 1.
На момент команды mkdir proj1 мы в домашнем каталоге?То есть не важно,где будет физически папка,после import proj1 мы её даже може удалить,так? Тогда туман начинает рассеиваться.
Если я правильно понимаю,когда мы делаем изменения,закрепляем их,то следующий пользователь,сделающий checkout уже возьмёт исправленные по последней версии исходники?
0
Evg
Эксперт CАвтор FAQ
20298 / 7825 / 602
Регистрация: 30.03.2009
Сообщений: 21,852
Записей в блоге: 30
15.07.2009, 17:26 10
Цитата Сообщение от #pragma Посмотреть сообщение
На момент команды mkdir proj1 мы в домашнем каталоге?То есть не важно,где будет физически папка,после import proj1 мы её даже може удалить,так? Тогда туман начинает рассеиваться.
В момент импортирования неважно, после импортирования можно удалять. По-моему даже можно как-то напрямую создать папку в хранилище, но точно не знаю как. Что-то наподобие

Код
svn mkdir file:///home/trampampam/repo.svn/proj1
Но тут какая-то тонкость была, о которой мне рассказывали, но я не помню. И порекомендовали головную папку проекта через "svn import" делать. А внутренние папки можно создавать пряму внутри рабочей копии и добавлять через "svn add" (в этом случае автоматически добавятся и все файлы внутри папки)

Цитата Сообщение от #pragma Посмотреть сообщение
Если я правильно понимаю,когда мы делаем изменения,закрепляем их,то следующий пользователь,сделающий checkout уже возьмёт исправленные по последней версии исходники?
Да. Тут главное понять, в чём заключается смысл хранилища. В общем, после того, как начальный уровень на практике попробовал, дальше можно и мануал с начала перечитывать - уже будет больше ясности, о чём там пишут

Добавлено через 5 минут 8 секунд
Да, вот ещё. Пока ты работаешь через file:// (т.е. идёт доступ к физическим файлам хранилища непосредственно), у тебя естьопасность, что ты случайно хранилище можешь удалить. А потому периодически делай резервную копию хранилища (за'tar'ивай каталог /home/trampampam/repo.svn).

Когда более-менее освоишься, изучи, как это делать через svn-сервер. Физически сервер будет запущен на твоей же машине, но хранилище будет создано из-под другого юзера, а не из-под того, где ты работаешь. Таким образом случайно уже не снесёшь - прав доступа не будет. Но резервные копии в любом случае полезно периодически делать (мало ли диск накроется и т.п.)
1
15.07.2009, 17:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2009, 17:26

Установка subversion Ubuntu 12.10 64 bit
Доброго времени суток. Установлена Ubuntu 12.10 64 bit. Я поставил перед собой задачу создать...

Как на subversion настроить ssh протокол?
Как на subversion настроить ssh протокол? Ну чтобы я через клиент tortoise заходил не просто через...

Есть ли библиотека для работы с Subversion на C#?
Пудскажите плс. есть ли библиотека для работы с Subversion на C#.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru