В большинстве предыдущих ответов использовалось обратное слияние, и обычно это правильный ответ. Однако есть одна ситуация (которая только что произошла со мной), где это не так.
Я случайно изменил файл с окончанием строки 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"
Обратите внимание, что для копии в хранилище местом назначения должен быть каталог, а не имя файла.