Чтобы вернуть изменения определенных ревизий в текущую локальную копию проекта, можно загрузить эти изменения и "пропатчить" ими текущие файлы.

svn diff file.php -r1234:1233 > r_1234_1233.diff

Тут мы получаем в файлик все изменения, которые были при коммите 1234-ой ревизии. (Можно ненужные нам изменения убрать из файла r_1234_1233.diff)

Теперь нам необходимо внести эти изменения в текущие файлы локальной копии проекта. Это можно сделать с помощью команды patch.

patch -p0 < r_1234_1233.diff

В результате мы должны получить что-то вроде

patching file file.php
Hunk #1 succeeded at 978 (offset 30 lines).
Hunk #2 succeeded at 1006 (offset 30 lines).
Hunk #3 succeeded at 1161 (offset 30 lines).

Или, если есть конфликты, вы получите сообщение об ошибке и тогда придется внимательно вносить изменения вручную.

Tagged with:
 

Если вам нужно подправить всего один файл из репозитория, то необязательно делать чекаут всего проекта. Можно "зачекаутить" всего один файл.

Сделать это можно так:

svn co http://url_to_my_repository.com/ path_to_fake_project/ --depth empty
svn up path_to_file/my_file.php

Получается первая команда не загружает файлы проекта, а просто создает необходимую папку для этого "фейкового" проекта, после чего мы апдейтим только необходимый файл.

Tagged with:
 

На новой работе впервые столкнулся с svn. Это будет первая заметка, которая будет полезна, в первую очередь, мне.

В общем, если рабочая копия стала непонятно почему locked (у меня это случилось после создания новой ветки) - то нужно сделать

svn cleanup

Если же для выполнения этой команды нету прав (тоже непонятно почему) - то необходимо сделать:

find . -name .svn -print0 | xargs -0 rm -r

chown -R NAME:GROUP $(\ls -A)

После этого выйти на уровень выше и выполнить

svn checkout PATH_TO_TRUNK PATH_TO_BRANCHE --force

Тоесть заливаем заново из транка все. По-моему все. Если что-то вспомню - допишу.

Tagged with: