我通常会对我的分支进行多次更改,偶尔会合并到主干。我想将所有提交消息保存在最终主干合并的最新修订说明中。我不想记住修订版号或任何我想要的“在上次合并到干线后所有提交消息到分支的所有提交消息”在我提交之前以可编辑的方式收集在一起。
由于此信息仅在mergeinfo中可用,我认为这必须由客户提供。我没有在TortoiseSVN,SVN Monitor或命令行客户端中找到此功能。我有什么机会错过一些明显的东西吗?
答案 0 :(得分:3)
这并不是您正在寻找的内容,但您始终可以通过使用xargs将mergeinfo传递到svn log命令来构建提交消息列表。看起来或多或少是这样的:
svn mergeinfo $SOURCE $DESTINATION --show-revs eligible | xargs -i svn log $SOURCE -r '{}'
答案 1 :(得分:3)
我希望我能正确理解你的要求。您可以尝试以下步骤: (通过svn命令行客户端):
svn log -v --stop-on-copy http://myrepo/mybranch gives
输出一个报告,您可以使用该报告找出代表您从分支到主干的上次合并的修订号。 (XXXX)
svn log -rXXXX:HEAD http://myrepo/mybranch > commitmessg.txt
(假设您现在想要将分支的HEAD版本合并到主干中) - 这会将所有提交消息收集到文本文件中。您可能希望编辑此文件以包含有意义的第一行,例如“合并元素如下” - 或“合并与缺陷修复相关的所有元素&&&&&&等,并保存。
照常执行合并
提交合并文件时,运行svn commit -F commitmessg.txt
,以便消息包含文本文件的内容。 (虽然我不确定提交消息的字符限制)
希望这会有所帮助。
编辑:(通过TORTOISESVN)
也想通过tortoiseSVN这样做。 您可以访问tortoiseSVN-Show Log,选择您想要日志的版本范围(使用底部的show range按钮)。在消息窗口中突出显示报告 - 右键单击 - 复制到剪贴板,然后粘贴到文本文件中。 (虽然我更喜欢命令行输出的格式。) 您可以编辑此文件并将其用于合并后提交。
答案 2 :(得分:2)
另一种解决方案,受@ 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
答案 3 :(得分:0)
我有一些类似的问题,即合并并提交从trunk到branch的更改,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"