2014-04-03 51 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 

現在當你做了一個提交,它應該有一些額外的行在那裏。這是一種拙劣的解決方案,但它很有用。