2014-04-03 50 views
1

命令行颠覆了在执行svn ci造就了各种各样的签入的“模板”(在环境变量SVN_EDITOR指定的编辑器)的便捷功能:前置颠覆签入模板

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

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

我喜欢这个功能,因为它提供了无需运行svn status并通过?结果进行筛选而提交的更改的快速摘要。

我希望做的是grep的从以前的一些东西,提交的日志信息,以及它前面加上的消息,像这样:

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的输出来手动解析,然后在实际提交之前将其删除,但似乎它可能过于复杂或者搞砸了签入工具的其他功能。有更好/更简单的方法吗?

回答

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使得从stdincheckin读:

$ 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 

现在当你做了一个提交,它应该有一些额外的行在那里。这是一种拙劣的解决方案,但它很有用。