Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > УП: Инструменты > SVN - ветки


Автор: klich1 4.6.2012, 04:44
Я создаю новую папку и захожу в неё:
cd test123 
Загружаю новый пустой репозиторий:
svn checkout https//mysvn.ru/user123/test123 .
Теперь в папке test123 четыре каталога: "branches", "tags", "trunk" и ".svn".

Создаю в этой же папке файл "1.txt" c текстом "привет" и добавляю его в репозиторий:
svn add 1.txt
Отправляю, обновляю:
svn commit --message "123"
svn update


Вопрос: у меня должно что-то появиться в папке trunk? Как я понял, это основная ветка т.е. (по идее) туда должен скопироваться файл 1.txt. Но не копируется.

Ладно. Допустим, это делается вручную. Залезаю в папку trunk, создаю там файл "2.txt". Делаю 
svn switch https//mysvn.ru/user123/test123/trunk
svn add 2.txt
svn commit --message "456"
svn update


Появляется новая ревизия, отлично.

А теперь! Пытаюсь создать новую ветку.

Если сделать так:
svn copy https//mysvn.ru/user123/test123 https//mysvn.ru/user123/test123/branches/branch1 -m "new branch"
 - то в папкe "branch1" окажутся папки "branches", "tags", "trunk" и ".svn" основного ("test123") каталога.
Что неправильно.

А если так:
svn copy https//mysvn.ru/user123/test123/trunk https//mysvn.ru/user123/test123/branches/branch1 -m "new branch"
- то в папке "branch1" окажется каталог "trunk", что тоже неправильно.

Короче, не понятно, как размещать файлы в репозитории, чтобы можено было создавать новые ветки.


Автор: vedun 4.6.2012, 14:14
Цитата(klich1 @ 4.6.2012,  04:44)
Я создаю новую папку и захожу в неё:
cd test123 
Загружаю новый пустой репозиторий:
svn checkout https//mysvn.ru/user123/test123 .
Теперь в папке test123 четыре каталога: "branches", "tags", "trunk" и ".svn".

Создаю в этой же папке файл "1.txt" c текстом "привет" и добавляю его в репозиторий:
svn add 1.txt
Отправляю, обновляю:
svn commit --message "123"
svn update


Вопрос: у меня должно что-то появиться в папке trunk?
 Нет. Для того чтобы файлы появились в trunk надо их туда положить.

Цитата(klich1 @ 4.6.2012,  04:44)

Ладно. Допустим, это делается вручную. Залезаю в папку trunk, создаю там файл "2.txt". Делаю 
svn switch https//mysvn.ru/user123/test123/trunk
svn add 2.txt
svn commit --message "456"
svn update


Появляется новая ревизия, отлично.

А теперь! Пытаюсь создать новую ветку.

Если сделать так:
svn copy https//mysvn.ru/user123/test123 https//mysvn.ru/user123/test123/branches/branch1 -m "new branch"
 - то в папкe "branch1" окажутся папки "branches", "tags", "trunk" и ".svn" основного ("test123") каталога.
Что неправильно.

А если так:
svn copy https//mysvn.ru/user123/test123/trunk https//mysvn.ru/user123/test123/branches/branch1 -m "new branch"
- то в папке "branch1" окажется каталог "trunk", что тоже неправильно.

Короче, не понятно, как размещать файлы в репозитории, чтобы можено было создавать новые ветки.

Насколько я помню svn не имеет понятия ветки, они сзодаются путём копирования каталогов внутри хранилища. Как называть каталоги в принципе не имеет значения, просто договорились что в репозитории будет каталог trunk - омновная ветка, каталог branches - вспомогательные ответвления и tags - каталог с релизами. Поэтому сделайте chekout trunk вместо checkout всего репозитория а потом на основе этой рабочей копии делайте ветки. А то как у вас сейчас получается что вы в рабочую папку слили и основную ветку и вспомогательные потом на основе этого содаёте ещё ветку.

Автор: klich1 4.6.2012, 19:31
Спасибо. Так всё работает. Единственное, что не понятно, это как делать diff между разными ветками.

Например, я выделил из "/trunk" ветку "/branches/branch1". SVN говорит, что текущая ревизия 3. Далее я вношу изменения в главную ветку ("/trunk"), коммичу, появляется ревизия 4. Потом я переключаюсь на "/branches/branch1", вношу изменения там, коммичу и получаю ревизию 5.

А теперь я хочу сравнить (diff) эти две ветки. Т.е. ревизию 4 главной ветки и ревизию 5 новой ветки. 

Но если сделать так:
svn diff -r 4:5 https://mysvn.ru/user123/test123/trunk https://mysvn.ru/user123/test123/branches/branch1
- то получается ерунда (выводится 2 диффа каждой из веток в отдельности; а не один "межветковый" дифф).

Что делать?

Автор: vedun 5.6.2012, 13:31
Цитата(klich1 @ 4.6.2012,  19:31)

...
Но если сделать так:
svn diff -r 4:5 https://mysvn.ru/user123/test123/trunk https://mysvn.ru/user123/test123/branches/branch1
- то получается ерунда (выводится 2 диффа каждой из веток в отдельности; а не один "межветковый" дифф).

Что делать?
 Вот этого не подскажу

Автор: bilbobagginz 5.6.2012, 21:25
Цитата(vedun @  4.6.2012,  13:14 Найти цитируемый пост)
Нет. Для того чтобы файлы появились в trunk надо их туда положить.

если нужно это делать с других веток, то это делается слиянием "merge".

Автор: maxim1000 5.6.2012, 22:02
Цитата(klich1 @  4.6.2012,  19:31 Найти цитируемый пост)
А теперь я хочу сравнить (diff) эти две ветки.

для этого можно воспользоваться третьей формой команды diff (из описания svn help diff):
Цитата

diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]

Автор: klich1 6.6.2012, 17:42
> третьей формой команды diff

спасибо! я ужае нашел

Автор: Karadul 10.7.2013, 23:17
Чего люди не будут делать лишь бы гуем не пользоваться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)