2010-07-17 2 views
11

Я знаю, что разница между двумя тегами перечисляет «файлы», которые были изменены между этими двумя тегами следующим способом.Subversion: Как найти различия между двумя тегами?

svn diff tag1 tag2 |grep Index: 

Есть ли какое-либо имущество в Subversion или какой-либо техники, чтобы узнать номера версий, которые вызвали эти файлы для изменения (то есть различия между tag1 версией версии файла и tag2 одного и того же файла)?

Thx Вандана

ответ

12

Вы можете сначала найти пересмотры тегов:

svn info http://svn.twig-project.org/tags/RELEASE_0_9_7 | grep 'Last Changed Rev' 
Last Changed Rev: 331 

svn info http://svn.twig-project.org/tags/RELEASE_0_9_8 | grep 'Last Changed Rev' 
Last Changed Rev: 343 

Вы на самом деле не ищете различия, вы ищете журнал. Так что сделайте подробный журнал между этими изменениями, и вы получите коммиты, включая измененные файлы.

svn log -v -q -r 331:343 http://svn.twig-project.org/trunk 

------------------------------------------------------------------------ 
r332 | fabien | 2010-06-12 18:30:02 +0200 (Sat, 12 Jun 2010) 
Changed paths: 
    M /trunk/CHANGELOG 
    M /trunk/lib/Twig/Environment.php 
------------------------------------------------------------------------ 
r333 | fabien | 2010-06-12 18:45:04 +0200 (Sat, 12 Jun 2010) 
Changed paths: 
    M /trunk/CHANGELOG 
    M /trunk/lib/Twig/Environment.php 
+0

Существует проблема с этой версией: если вы копируете ствол от r331, который создает (например) r367, вы будете иметь изменений от r367, не r331, как и ожидалось –

+0

Это предполагает линейную история без ветвей. –

2

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

svn merge --dry-run URL_TAG_1 URL_TAG_2 
2

Если вы хотите получить список изменений, которые могут быть объединены с одного тега в другой, вы можете создать его следующим образом:

svn mergeinfo --show-revs eligible URL_TAG_1 URL_TAG_2 
2

следующий сценарий оболочки берет исток и DEST, и показывает в ревизии источника, который не был объединен в DEST.

Таким образом, чтобы ответить на исходный вопрос:

svnincoming ^/tags/TAG1 ^/tags/TAG2 

Или увидеть изменения в багажнике, что не были объединены в рабочую копию ветви:

cd /working/copy/ 
svnincoming ^/trunk 

svnincoming Сценарий:

#!/bin/sh -e 

SOURCE="$1" 
DEST="${2:-.}" 

if [ "$SOURCE" = "" ]; then 
    echo "Usage: `basename $0` SOURCE[@REV] [DEST[@REV]]" 
    echo "List revisions eligible for merging from SOURCE to DEST (or '.', if omitted)." 
    exit 1 
fi 

svn mergeinfo --show-revs eligible "$SOURCE" "$DEST" | sed 's/^/-/' | xargs -d '\n' svn log "$SOURCE" 
+0

fyi - Я пробую этот скрипт и получаю «svn: E155010: Узел« /path/to/working/copy/^tags/V2.2.821 »не найден». – Hippyjim

+0

@Hippyjim: Обязательно введите '^/tags', а не только'^теги'. Или, может быть, вы используете старый клиент Subversion? (Обозначение каретки требует 1.6 или новее.) Вы также можете попробовать заменить карет своим URL-адресом репозитория (как показано в разделе 'svn info'), что эквивалентно. –

1

С SVN version 1.9 у вас есть --log вариант для svn mergeinfo:

svn mergeinfo --log --show-revs eligible SOURCE TARGET 
Смежные вопросы