В большинстве предыдущих ответов использовалось обратное слияние, и обычно это правильный ответ. Однако есть одна ситуация (которая только что произошла со мной), когда это не так.
Я случайно изменил файл с окончанием строки Unix на конец строки DOS при внесении небольшого изменения и зафиксировал его. Это легко отменить, либо изменив окончание строки и снова зафиксировав, либо с помощью обратного слияния, но это приведет к тому, что svn blame
внесет мое редактирование в качестве источника каждой строки файла. (Интересно, что на TortoiseSVN в Windows это не влияет; только командная строка svn blame
.)
Если вы хотите сохранить историю в соответствии с сообщением svn blame
, я думаю, вам нужно сделать следующее:
- Удалить файл и зафиксировать.
- В репозитории скопируйте предыдущую хорошую копию файла в заголовок и подтвердите.
- Восстановите все правки, которые вы хотите сохранить.
Удаление немного страшно, но помните, что у вас всегда есть файл, сохраненный в репозитории, поэтому его восстановление не имеет большого значения. Вот некоторый код для иллюстрации шагов. Предположим, что xxx
- это номер редакции последней удачной копии.
svn rm svn+ssh://path/to/file
svn copy svn+ssh://path/to/file@xxx svn+ssh://path/to -m"Restore good copy"
svn update
<restore the edits>
svn commit -m"Restore edits"
Обратите внимание, что для копии в хранилище местом назначения должен быть каталог, а не имя файла.