Самый простой способ собрать историю изменений со времени последнего слияния в Subversion - PullRequest
3 голосов
/ 17 ноября 2009

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

Поскольку эта информация доступна только в mergeinfo, я думаю, что она должна быть предоставлена ​​клиентом. Я не нашел эту функцию в TortoiseSVN, SVN Monitor или клиенте командной строки. Есть шансы, что я упускаю что-то очевидное?

Ответы [ 4 ]

3 голосов
/ 18 ноября 2009

Надеюсь, я правильно понял ваше требование. Вы можете попробовать следующие шаги: (через клиент командной строки svn):

  1. svn log -v --stop-on-copy http://myrepo/mybranch gives отчет, который вы можете использовать, чтобы узнать номер ревизии, представляющий ваше последнее слияние из ветви в ствол. (XXXX)

  2. svn log -rXXXX:HEAD http://myrepo/mybranch > commitmessg.txt (Предполагается, что теперь вы хотите объединить версию HEAD вашей ветки в ствол) - это соберет все ваши сообщения коммита в текстовый файл. Вы можете отредактировать этот файл, добавив в него значимую первую строку, например «Объединение элементов, как показано ниже», или «Объединение всех элементов, относящихся к исправлению дефекта &&&&» и т. Д., И сохраните.

  3. Выполните объединение как обычно

  4. При фиксации объединенных файлов запустите svn commit -F commitmessg.txt, чтобы в сообщении содержалось содержимое текстового файла. (Хотя я не уверен в ограничении символов для сообщений фиксации)

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: (через TORTOISESVN)

Только что решил сделать это через tortoiseSVN. Вы можете перейти к tortoiseSVN-Show Log, выбрать диапазон версий, для которого вы хотите вести журнал (используя кнопку show range внизу). Выделите отчет в окне сообщения - щелкните правой кнопкой мыши - скопируйте в буфер обмена и вставьте в текстовый файл. (Мне больше понравился формат вывода командной строки.) Вы можете редактировать этот файл и использовать его для фиксации после слияния.

3 голосов
/ 17 ноября 2009

Это не совсем то, что вы ищете, но вы всегда можете составить список сообщений коммитов, отправив команду mergeinfo в команду svn log, используя xargs. Это выглядит примерно так:

svn mergeinfo $SOURCE $DESTINATION --show-revs eligible | xargs -i  svn log $SOURCE -r '{}'
2 голосов
/ 20 июля 2014

Еще одно решение, вдохновленное ответом @ tschaible:

$ svn mergeinfo --show-revs=eligible ^/branches/version | tr "\\n" "," | xargs -i svn log -c {} ^/branches/version

По сути, это та же идея, которую использует @tschaible, но немного быстрее, потому что команда svn log запускается только один раз, принимая список рассматриваемых ревизий. Чтобы сделать команду немного проще и короче, вы можете добавить псевдоним в файл ~ / .bash_aliases следующим образом:

alias svnlog='tr "\\n" "," | xargs -i svn log -c {}'

Теперь вы можете сократить команду следующим образом:

svn mergeinfo --show-revs=eligible ^/branches/version | svnlog ^/branches/version
0 голосов
/ 21 марта 2013

У меня была похожая проблема слияния и фиксации изменений из магистрали в ветку, и SVN 1.7 по умолчанию не предоставляет svnmerge, поэтому я разработал небольшой скрипт для выполнения этой задачи.

Итак, вот мой bash-скрипт для объединения и фиксации файлов:

#!/bin/bash

usage() {
cat << EOF

    usage: $0 options

    Script to simplify merging and commiting to prelive 

    OPTIONS:
       -h      Show usage
       -r      Specify file to use
       -s      Merge source location 
       -d      Place where You want ot merge 

EOF
}

SOURCE= 
DESTANATION= 
REV= 
# Provide revision number or list of revisions
while getopts "hr:s:d:" OPTION; do 
    case $OPTION in 
        h) 
            usage
            exit 1
            ;;  
        r) 
            REV=$OPTARG
            ;;
        s)
            SOURCE=$OPTARG
            ;;
        d)
            DESTANATION=$OPTARG
            ;;
    esac
done

# Create commit message file 
echo "Preperign commit info file..."
FILE=commit-info.txt
touch $FILE
echo "Merged revision(s) $REV via costom merge script from" > $FILE
svn info $SOURCE | grep 'URL' | awk '{print $NF}' >> $FILE

LIST=`echo "$REV" | tr ',' ' '`

# Get commit messages from source location 
echo "" >> $FILE
for commit in $LIST
do
    svn log $SOURCE -r $commit >> $FILE
    echo "" >> $FILE
done
echo "Done...."

# Merge changes from source location 
echo "Starting merge....."
svn merge -c$REV $SOURCE
echo "Done merging...."

# Commit changes to destanation 
echo "Start commiting files to SVN...."
svn commit -F $FILE
rm $FILE
echo "Complete"
...