SVN - Управляйте частичным слиянием пересмотра

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

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

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

Версия 20
 A./project_foo
 ./project_foo/not_required_file.txt

Версия 24
 ./project_foo/required_file.txt

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

svn объединяют-r20:21-> это получает меня каталог, а также not_required_file.txt
svn возвращаются, project_foo/not_required_file.txt-> избавляется от файла, который я не хочу
svn объединяют-r24:25-> это получает меня файл, которого я требую

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

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

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

Спасибо.

11
задан oldNoakes 14 January 2010 в 03:33
поделиться

4 ответа

Приятный вопрос. : -)

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

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

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

В целом избегайте частично объединения ревизий. Обязательно преодолеть чаще, чтобы вы могли сделать вишневую выбор чистых способов.

-1
ответ дан 3 December 2019 в 12:05
поделиться

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

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

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

-1
ответ дан 3 December 2019 в 12:05
поделиться

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

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

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

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

Следующее выше, предотвращает вашу следующую:

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

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

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

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

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

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

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

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

, надеюсь, какая-то часть этого полезна.

4
ответ дан 3 December 2019 в 12:05
поделиться

http://docs.djangoproject.com/en/1.1/ и http://ask.github.com/celery/ являются двумя хорошими примерами.

-121--2304524-

.NET поддерживает это с атрибутом [Flags]:

[Flags]
enum KbdHookFlags {
  Extended = 0x01,
  Injected = 0x10,
  AltPressed = 0x20,
  Released = 0x80
}

Пример использования:

  KBDLLHOOKSTRUCT info = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
  if ((info.flags & KbdHookFlags.Released) == KbdHookFlags.Released) {
    // Key was released
    // etc..
  }
-121--4121299-

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

1
ответ дан 3 December 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: