2010-01-14 2 views
11

Так что у меня есть проблема, которая вызывает у меня много горя в Subverion. Я работаю в филиале, который должен оставаться активным до тех пор, пока мой набор функций не завершит разработку до повторной интеграции. К сожалению, что-то, что я завершил, теперь считается бизнесом «критически важным», и они хотят, чтобы я вишневый выбирал эту функциональность из ветки и вставлял ее в багажник, чтобы его можно было получить от QA.SVN - Управление частичным слиянием ревизии

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

Вот те изменения, которые мне нужно дергать:

Rev 20
  ./project_foo
  ./project_foo/not_required_file.txt

Rev 24
  ./ project_foo/required_file.txt

Чтобы получить это в багажнике, мне пришлось сделать следующее:

SVN слияния -r20: 21 -> это заставляет меня каталог, а также not_required_file.txt
СВН Revert project_foo/not_required_file.txt -> избавиться от файла, я не хочу
SVN слияния -r24 : 25 -> Мне нужен файл

Который сработал и достал материал в багажник, который я хотел, НО, когда я был полностью и побежал svn merge -reintegrate, я (очевидно) не получил not_required_file.txt из Ревизии 20 и, таким образом, столкнулся с конфликтами деревьев (от дальнейших изменений, которые я сделал позже).

Так что я ищу некоторые рекомендации о том, что делать в этих ситуациях.

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

Спасибо.

ответ

-1

Хороший вопрос. :-)

Похоже, что ваши ветки немного перепутаны. У вас есть хорошие идеи, как их решить. Если он работает? Попробуйте, иногда вы никогда не знаете.

Думаю, вам не нужно объединять обороты. 21 до 24 в вашем примере. Во всяком случае, будет создан недостающий каталог.

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

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

3

Есть ли способ объединения в только конкретных изменениях, которые я хочу от конкретной ревизии?

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

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

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

После выше предотвращает ваш следующий:

Есть ли способ захватывая изменения, которые я намеренно пропустил, когда я повторно интегрировать всю ветвь?

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

В вашем случае вы можете сказать subversion, чтобы снова объединить эту индивидуальную ревизию, выполняя обратное тому, что вы делали ранее (разрешая конфликт или возвращая часть, которую вы изначально хотели, сохраняя часть, которую вы изначально оставили) , но я не уверен, как это работает, как только слияние уже записано.

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

Могу ли я создать структуру каталогов мне нужно в багажнике, а затем объединить над только изменения файла?

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

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

Теперь у вас просто боль в голове :) Устранение этого вручную звучит как меньше работы для меня.Я бы исправил часть, которую вы исключили на туловище, а затем повторите попытку реинтеграции ветки.

Надеюсь, что часть этого будет полезна.

1

просто «svn copy» отсутствующие папки из ветки в магистраль рекурсивно.

-1

Для текущих вопросов, вы можете посмотреть в СВК, который имеет лучшую переходящую поддержку, чем SVN (или в прошлый раз, когда я использовал SVN достаточно сильно, чтобы сделать слияние): http://svk.bestpractical.com/view/HomePage

Я замечаю, что вы однако проблема множественных команд с различными уровнями технических возможностей, поэтому SVK на самом деле не лучшее решение. На самом деле я предпочитаю git-svn над SVK, поскольку он обеспечивает аналогичные преимущества (даже лучшее слияние, чем SVN или SVK).

В зависимости от нижнего уровня вашего уровня квалификации SVK может быть достаточно близко к SVN, чтобы он мог сделать трюк, но он добавляет некоторые дополнительные шаги для вытеснения изменений, и я не знаю, насколько хорошо он поддерживается под Windows (или , если поддерживается под Windows), или если это проблема в вашей среде.

+0

Оцените ответ, но в основном смена инструмента отсутствует (только недавно был переход на SVN, сделанный ранее - VSS), и, к сожалению, в магазине есть только Windows - для всего. – oldNoakes