Вопрос:
Как зафиксировать изменения "между двумя ревизиями"?
Я использую кавычки, потому что, очевидно, вы не можете ничего зафиксировать между двумя ревизиями - они уже находятся в репозитории.
Длинная история, то есть зачем мне это нужно?
Поначалу вопрос может показаться неловким, но вот сценарий из реальной жизни, с которым я столкнулся в своей работе.
Мы вносим изменения во время разработки в ветки разработки (или «функциональные ветки», fb, как мы их называем), и когда работа завершена, мы объединяемся в trunk.
Вы знаете, основной рабочий процесс.
Из ствола мы выпускаем наше ПО и соглашаемся заморозить код за несколько дней до фактического выпуска.
Теперь я был достаточно глуп, чтобы доверять нашему кандидату в release (RC), построенному из магистрали, и это хорошо, поскольку все автоматизированные тесты прошли и совершили слияние со стволом до того, как мы фактически выпустили SW. И убрал ветку функции.
Допустим, кандидат на выпуск был в редакции 42, а версия SW, которую мы выпускаем, была v1.0.3. Итак, r42 - это RC для выпуска v1.0.3.
Итак, RC выглядел хорошо, но прежде чем мы выпустили SW, я отправил r43 в багажник. Все тесты в CI прошли, поэтому я пошел и удалил ветку fb14 (ревизия 44).
Оказалось, что RC в конце концов не был хорош и нуждался в исправлении, но v1.0.3 не должен содержать функцию 14 (реализовано в fb14), то есть r43.
То же самое в виде иллюстрированной формы:
==r42=======r43
^ /
| /
| fb14
|
commit fix there to get new RC
Так что мне нужно вернуть r42, зафиксировать что-то и затем вернуть r43.
Хорошо, это легко, правда? Откат к r42:
svn merge -r HEAD:42 .
svn commit -m "Reverted back to RC of v1.0.3"
Реализация необходимого исправления и
svn commit -m "Fixed b0rken feature for v1.0.3"
Тогда мы выпустим SW, и я принесу r43:
svn up
svn merge -c 43 .
Но подождите, это ничего не делает! Я пошел и удалил ветку fb14, так что мне нужно откопать это обратно из SVN и снова объединить его с транком? Конечно, я должен быть в состоянии вернуть R43 как-то обратно.
Так что я вроде как хочу:
roll back to r42
-------------
/ \
==r42=====r43=====r45=====r46=====r47
/ \ ^ /
merge/ \ | /
/ \ fix /
fb14 \ /
| -------------
| bring back changes from r43
|
deleted in r44
РЕДАКТИРОВАТЬ: Бу, он отвечает на свой вопрос!
Читать https://stackoverflow.blog/2011/07/01/its-ok-to-ask-and-answer-your-own-questions/
Я хочу найти это позже, если / когда я снова столкнусь с подобной ситуацией.