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