9

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

Есть ли более умный способ сделать это?

3 ответа3

5

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

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

5

Это делает то, что вам нужно автоматически, хотя и не очень быстро, потому что не использует бинарный поиск, как предложено выше:

svn log FILE | egrep '^r[0-9]' | sed -e 's/ .*//' | while read rev; do echo $rev ; svn cat FILE -"$rev" | grep "case STRING" && break  ; done 
1

svn log --diff будет идентифицировать удаления с "-" в нулевом столбце. Grep для "r" также, чтобы вы могли видеть ревизию.

% svn log --diff src/fozbo.cpp -r22222:HEAD | grep -e '^r' -e '^-.*xyzzy'
r22222 | jruser | 2016-07-19 20:16:07 -0400 (Tue, 19 Jul 2016) | 1 line
-   else if ( password== "xyzzy") {

Существует также svn log --search но он будет искать только сообщение коммита.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .