| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > УП: Инструменты > 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 | ||||
Насколько я помню 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 | ||
|
| Автор: bilbobagginz 5.6.2012, 21:25 |
если нужно это делать с других веток, то это делается слиянием "merge". |
| Автор: maxim1000 5.6.2012, 22:02 | ||
для этого можно воспользоваться третьей формой команды diff (из описания svn help diff):
|
| Автор: klich1 6.6.2012, 17:42 |
| > третьей формой команды diff спасибо! я ужае нашел |
| Автор: Karadul 10.7.2013, 23:17 |
| Чего люди не будут делать лишь бы гуем не пользоваться. |