prepend to subversion checkin模板

时间:2014-04-03 22:32:34

标签: svn

命令行颠覆具有提出签到模板的便利功能。在执行svn ci时排序(在使用环境变量SVN_EDITOR指定的编辑器中):

(blank line)
--This line, and those below, will be ignored--

M   src/myfile.c
A   src/otherfile.c

我喜欢这个功能,因为它可以快速汇总要提交的更改,而无需运行svn status并过滤?个结果。

我想做的是从上一次提交的日志消息中获取一些内容并将其添加到消息中,如下所示:

Some stuff I grepped from the previous log message.
--This line, and those below, will be ignored--

M   src/myfile.c
A   src/otherfile.c

我考虑创建一个脚本,通过解析svn status的输出手动创建此日志消息,然后在实际提交之前将其删除,但这似乎可能过于复杂或螺旋签入工具的其他一些功能。有更好/更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。 svn ci将提交消息作为带有-m标志的参数,以便您可以准备消息并将其作为字符串传递。像这样:

$ svn ci -m "$(svn log | grep Magic\ Text)"

checkin也会使用-F的文件名,所以你也可以这样做:

$ svn log | grep Magic\ Text > temp.log
$ svn ci -F temp.log
$ rm temp.log

或者,如果您不想处理临时文件,仅将-作为参数传递给-F,则checkin会从stdin读取:< / p>

$ svn log | grep Magic\ Text | svn ci -F -

---编辑---

看起来这并不是你想要的。如果您想要一种基本上“挂钩”到提交并编辑提交消息模板的方法,这应该适合您。运行svn commit时,它会在当前目录中创建一个名为svn-commit.tmp的文件。我们可以覆盖$SVN_EDITOR环境变量,以使用编辑svn-commit.tmp文件的自定义脚本,然后让我们对其进行更多编辑。这对我有用。

在某处创建一个文件(可能在$ HOME / bin或其他内容中),这将是您的新$SVN_EDITOR。把它放在里面:

#!/bin/bash

svn log | grep Whatever > svn-commit2.tmp
cat svn-commit.tmp >> svn-commit2.tmp
mv svn-commit2.tmp svn-commit.tmp
vi svn-commit.tmp

现在在你的shell中,或在~/.bashrc中放入以下行:

export SVN_EDITOR="$HOME/bin/your_editor.sh"

如果您将bashrc放入其中,请务必提供来源。

$ source ~/.bashrc

现在当你进行提交时,它应该有一些额外的行。这是一种hacky解决方案,但它确实有效。