svn 1.5 и откат изменений в транке после мерджа из бранча

profan

Новичок
svn 1.5 и откат изменений в транке после мерджа из бранча

Здрасте, не знаю в какую ветку писать про рабочие инструменты, пишу здесь

В svn 1.5 не возможно несколько раз объединять бранчь с транком, т.е после мерджа из бранча в транк, бранч удаляется и если нужно продолжить работу с бранчем то нужно делать новую копию бранча (ну по крайней мере так я понял из документации)

Отсюда вопрос. если после мерджа из бранча в транк я решаю откатить изменения в транке до ревизии до мерджа (откатить изменения как локально так и в случае после регистрации на сервере), как мне продолжить работать с бранчем, если его нужно создавать заново, а изменения в транке откатили?
 

waldicom

Новичок
Re: svn 1.5 и откат изменений в транке после мерджа из бранча

Автор оригинала: profan
Здрасте, не знаю в какую ветку писать про рабочие инструменты, пишу здесь
В svn 1.5 не возможно несколько раз объединять бранчь с транком, т.е после мерджа из бранча в транк, бранч удаляется и если нужно продолжить работу с бранчем то нужно делать новую копию бранча (ну по крайней мере так я понял из документации)
Отсюда вопрос. если после мерджа из бранча в транк я решаю откатить изменения в транке до ревизии до мерджа (откатить изменения как локально так и в случае после регистрации на сервере), как мне продолжить работать с бранчем, если его нужно создавать заново, а изменения в транке откатили?
Буквально вчера мерджил из бранча в транк... Ничего не удаляется, да и с какой стати должен автоматически удалитться какой-либо бранч?
Так что спокойно можешь мерджить в транк и сидеть разбирать конфликты :)
 

profan

Новичок
>In Subversion 1.5, once a --reintegrate merge is done from branch to trunk, the branch is no longer usable for further work. It's not able to correctly absorb new trunk changes, nor can it be properly reintegrated to trunk again. For this reason, if you want to keep working on your feature branch, we recommend destroying it and then re-creating it from the trunk:

это от сюда:
http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html
 

zerkms

TDD infected
Команда форума
profan
это как раз положительный момент в версии 1.5+: не нужно запоминать когда была сделана ветвь и до какой ревизии уже было произведено слияние.

решаться эта "проблема" должна в административном порядке: после того как в бранче были произведены изменения, достаточные для обновления транка; были применены обновления из бранча на транк - больше эти обновления делаться повторно не должны, ибо это "глупо".
+ или ты неверно понял документацию, или я тебя: создавать заново бренч для продолжения в нём работы не нужно, но на транк будут накатываться только обновления с последнего мерджа (это и есть основное нововведение в процессе слияния веток в 1.5)

если у тебя возникает подобный вопрос - значит ты что-то делаешь не так.

ps: тебе конечно может помочь --ignore-ancestry, но в 1.5+ так делать идеологически неверно.
 

profan

Новичок
zerkms
>после того как в бранче были произведены изменения, достаточные для обновления транка; были применены обновления из бранча на транк - больше эти обновления делаться повторно не должны, ибо это "глупо".

"эти обновления" имеется ввиду тот же самый код. который был перенесен раньше или имеется ввиду, что после мерджа из бранча в транк, работу в бранче нужно вообще прикратить?
Я из доки понял что именно работу в бранче нужно прикратить после первого мерджа из бранча в транк. Хотя я пробовал конечно несколько раз мерджить и ошибок небыло, но я же не знаю, может это дело обстаятельств каких то не сложившихся :)


>или ты неверно понял документацию, или я тебя: создавать заново бренч для продолжения в нём работы не нужно

Не нужно создавать заново бранч потому что в этом нет надобности так как изменения из старого бранча будут корректно накладываться на транк несколько раз
или
Не нужно создавать заново бранч потому что несколько раз мерджить бранчь в транк идеологически неверно?

сорри за повтор :)

-~{}~ 10.03.09 05:56:

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

И файл перемещенный, свн не находит и как с этим бороться?


Изменяем содержимое файла controllers\examples.php в транке,
этот файл будет перемещен в бранче
D:\Subversion\bin>svn status --show-updates G:/working_copy
M 37 G:\working_copy\trunk\kohana\application\controllers\examples.php
Status against revision: 38

D:\Subversion\bin>svn commit --message "for test work with old branch" G:/working_copy
Sending G:\working_copy\trunk\kohana\application\controllers\examples.php
Transmitting file data .
Committed revision 39.

D:\Subversion\bin>svn update G:/working_copy
At revision 39.


перемещаем файл controllers\examples.php в controllers\examples2.php в бранче
D:\Subversion\bin>svn move G:\working_copy\branch\kohana_0.4\application\controllers\examples.php G:\working_copy\branch\kohana_0.4\application\controllers\examples2.php
A G:\working_copy\branch\kohana_0.4\application\controllers\examples2.php
D G:\working_copy\branch\kohana_0.4\application\controllers\examples.php

D:\Subversion\bin>svn commit --message "for test work with old branch" G:/working_copy
Deleting G:\working_copy\branch\kohana_0.4\application\controllers\examples.php
Adding G:\working_copy\branch\kohana_0.4\application\controllers\examples2.php

Committed revision 40.

D:\Subversion\bin>svn update G:/working_copy
At revision 40.


Делаем контрольный мердж из транка в бранч и имеем косяк
Skipped missing target: 'G:\working_copy\branch\kohana_0.4\application\controllers\examples.php'
D:\Subversion\bin>svn merge --dry-run svn://localhost/trunk/kohana/ G:/working_copy/branch/kohana_0.4
Skipped missing target: 'G:\working_copy\branch\kohana_0.4\application\controllers\examples.php'
--- Merging r36 through r40 into 'G:\working_copy\branch\kohana_0.4':
C G:\working_copy\branch\kohana_0.4\application\controllers\test.php
A G:\working_copy\branch\kohana_0.4\application\controllers\trunk10_02
 

zerkms

TDD infected
Команда форума
"эти обновления" имеется ввиду тот же самый код. который был перенесен раньше или имеется ввиду, что после мерджа из бранча в транк, работу в бранче нужно вообще прикратить?
процесс мерджа формально это получение diff + применение его на рабочую директорию (транк в твоём случае), а не перенос в ветви, а потом обратно в транк.
то, что ты неверно понял как "создавать заново каждый раз" в действительности понимать вот так: после того, как ты смерджил бранч на транк те же самые изменения повторно не применятся.

ps:
перемещаем файл controllers\examples.php в controllers\examples2.php в бранче
не нужно перемещать. "бранчевание" это процесс копирование, а не перемещения.
http://svnbook.red-bean.com/nightly/en/svn.branchmerge.using.html#svn.branchmerge.using.create

pps: обычно делаются бранчи на целые директории или весь проект, а не файлы, потому как сложный процесс модификации кода (для которого оправдано создание ветви) редко когда затрагивает лишь 1 файл (при условии что это не "приложение-всё-в-одном-файле")
 

profan

Новичок
на счет бранча понял... можно делать несколько мерджей из брвнча в транк

svn merge -r 20:30 branch trunk
потом можно из того же бранча
svn merge -r 30:40 branch trunk
итд

просто не правильно перевел и озадачился

а на счет перемещений я не понял причем здесь "приложение-всё-в-одном-файле"

я делаю много изменений в разных файлах в бранче и в том числе перемещаю один из файлов (командой move, которая фактически копирует страрый файл в новый и удаляет старый, те должна сохраняться история)

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

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

и вот что еще по этому поводу пишут
http://subversion.open.collab.net/ds/viewMessage.do?dsForumId=4&viewType=browseAll&dsMessageId=304669#messagefocus

те это баг в свн
 

zerkms

TDD infected
Команда форума
svn merge -r 20:30 branch trunk
потом можно из того же бранча
svn merge -r 30:40 branch trunk
итд
если диапазон "начальная ревизия бранча - текущая ревизия бранча" или "последняя после мерджа - текущая", то ревизии указывать не нужно - svn 1.5+ сам всё сделает

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

по поводу бага - не понимаю. ты перенёс файл. если представить, что мердж это diff + patch, то логично, что полученный дифф не на что накладывать патчем, и что будет вывалена ошибка.
на сайте тебе тоже написали
"Subversion cannot merge changes to moved files yet"
операция с точки зрения производимых свн-клиентом действий бессмысленна.
 

profan

Новичок
>обычно делают ветви на целые директории, а не файлы, как у тебя в примерах выше было

у меня в примере тоже бранч сделан на директорию,
svn copy svn://localhost/trunk/kohana/ svn://localhost/branch/kohana_0.4 -m "Creating branch 0.4 of kohana"
просто это выглядит так, как рабочая копия у меня содержит весь репозитарий, тоесть все транки и бранчи итд


>по поводу бага - не понимаю. ты перенёс файл. если представить, что мердж это diff + patch, то логично, что полученный дифф не на что накладывать патчем, и что будет вывалена ошибка.

полученный диф должно быть на что накладывать, так как перемещая файл командой move, фактически создается копия на старый файл (сохраняется история) посмотри в лог перемещенного файла


>на сайте тебе тоже написали

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

-~{}~ 10.03.09 17:03:

и битую ссылку дали :)
 

zerkms

TDD infected
Команда форума
полученный диф должно быть на что накладывать, так как перемещая файл командой move, фактически создается копия на старый файл (сохраняется история) посмотри в лог перемещенного файла
если в HEAD ревизии транка файла нет (а его нет, т.к. move) то накладывать патч не на кого.

а на сайте мне не написали что операция бессыслена, а что функционал нереализован еще и нужно применять для этого какие то левые скрипты
хз, пока кто-нибудь не расскажет практической ценности операции - я считаю операцию "странной".
 

profan

Новичок
>хз, пока кто-нибудь не расскажет практической ценности операции - я считаю операцию "странной".

ну а пример с изменением файла в транке и перемещением в бранче и в последующем невозможность корректно выполнить мердж, чем не практическая ценность операции
я не вижу как из ситуации выходить, кроме как откатывать перемещение файла в бранче и перемещать его уже в транке после обратного мерджа из бранча в транк, но это фигня какая то а не контроль версий
 

zerkms

TDD infected
Команда форума
profan
а..... вот теперь наконец проблему понял.
с таким на практике не сталкивался.
 

profan

Новичок
а вот эту злополучную фразу
>In Subversion 1.5, once a --reintegrate merge is done from branch to trunk, the branch is no longer usable for further work. It's not able to correctly absorb new trunk changes, nor can it be properly reintegrated to trunk again. For this reason, if you want to keep working on your feature branch, we recommend destroying it and then re-creating it from the trunk:

я дословно могу перевести только так
>В Subversion 1.5, однажны сделав мердж с флагом --reintegrate из бранча в транк, бранч больше не может использоваться для дальнейшей работы. Он не способен корректно поглащать новые изменения транка, не может правильно интегрироваться в транк снова. По этой причине, если вы желаете продолжить работу над вашей особенностью ветки, мы рекомендуем, разрушить ее и затем заново создать ее из транка

буду очень рад если меня ткнут носом в мой английски

но повторюсь, что тестируя повторное слияние из бранча в транк пока все было нормально (за исключением перемещенного файла :)). но эта фраза беспокоит...
буду продолжать тестить
 

zerkms

TDD infected
Команда форума
смысл фразы - что ты второй раз не сможешь смерджить те же ревизии бранча.
 
Сверху