Могу ли я обновить старую ревизию в Subversion и распространить изменения на все более новые ревизии? - PullRequest
1 голос
/ 13 мая 2011

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

Ответы [ 4 ]

2 голосов
/ 13 мая 2011

Я думаю, что вы спрашиваете: «Могу ли я, чтобы SVN обновил весь мой код, начиная с ревизии X и заканчивая Head, автоматически проверяя исправление до ревизии X» - ответ будет не таким, как я знаю,

Обычно используется обновление ветки Release с исправлением, а затем перемещение (слияние / фиксация и т. Д.) Исправления ошибки в ветку trunk / in-development.Это необходимо для того, чтобы версия X обновлялась, тестировалась и т. Д. Правильно, а также чтобы ваша ветка ствола / находилась в разработке.

1 голос
/ 13 мая 2011

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

Теперь, когда я говорю , вы не можете изменить историю , я имел в виду, что не существует легкого пути.Вы можете сделать svnadmin dump, испортить результаты, а затем выборочно сделать svnadmin load.

Я не уверен на 100%, как именно это сделать.Я использовал метод дампа и загрузки, чтобы удалить ревизию, в которой была проприетарная информация, которой не должно было быть в нашем репозитории.Но я никогда не путаю историю, чтобы исправить старую ошибку.

И вы, вероятно, действительно не хотите.Представьте, если ошибка находится в ревизии № 23, и вы ее исправили.Кто-то с ревизией № 26 вашего кода пытается выяснить, в чем дело, но не может найти проблему в источнике.В конце концов, лучше быть честным: мы сделали болван, и нам нужно это исправить.

Я могу представить, где у вас есть ошибка в ревизии № 24 ствола, клиент хочет ревизию № 28,и ваш багажник сейчас на ревизии №50.Если вы исправите ошибку в редакции № 24, вы можете предоставить клиенту редакцию № 28.В этом случае вы должны создать ветку для версии # 28 и исправить ошибку в этой ветке.

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

1 голос
/ 13 мая 2011

Вы можете зафиксировать его в старой ревизии, а затем объединить эту конкретную ревизию в HEAD.

Например, Subversion: Как объединить только определенные ревизии в транк, если в ветви внесено несколько последовательных изменений

0 голосов
/ 13 мая 2011

Почему вы хотите это сделать? Почему бы просто не внести изменения и зафиксировать?

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

Что бы вы получили, изменив предыдущую версию? Я пытаюсь выяснить, почему вы хотели бы сделать это. Что будет означать, что вы изменили редакцию 10 от 1 января с изменением, внесенным 12 февраля? Итак, теперь редакция 10 уже не та, что раньше была 10? Это коммит 1 января или коммит 12 февраля? Если кто-то захочет узнать, как выглядел код, когда мы вытащили версию для развертывания 2 января, что скажет им SVN? То, что вы хотите сделать, просто разрушило бы всю концепцию SVN.

...