我寫了這是一個cygwin bash腳本來解決這個問題。
但是它要求搜索項目前在文件系統文件中。對於與文件系統grep匹配的所有文件,然後執行該文件的所有svn diffs的grep。不完美,但對大多數用法應該足夠好。希望這可以幫助。
在/ usr/local/bin目錄/ svngrep
#!/bin/bash
# Usage: svngrep $regex @grep_args
regex="[email protected]"
pattern=`echo $regex | perl -p -e 's/--?\S+//g; s/^\\s+//;'` # strip --args
if [[ ! $regex ]]; then
echo "Usage: svngrep \$regex @grep_args"
else
for file in `grep -irl --no-messages --exclude=\*.tmp --exclude=\.svn $regex ./`; do
revs="`svnrevisions $file`";
for rev in $revs; do
diff=`svn diff $file -r$[rev-1]:$rev \
--diff-cmd /usr/bin/diff -x "-Ew -U5 --strip-trailing-cr" 2> /dev/null`
context=`echo "$diff" \
| grep -i --color=none -U5 "^\(+\|-\).*$pattern" \
| grep -i --color=always -U5 $pattern \
| grep -v '^+++\|^---\|^===\|^Index: ' \
`
if [[ $context ]]; then
info=`echo "$diff" | grep '^+++\|^---'`
log=`svn log $file -r$rev`
#author=`svn info -r$rev | awk '/Last Changed Author:/ { print $4 }'`;
echo "========================================================================"
echo "========================================================================"
echo "$log"
echo "$info"
echo "$context"
echo
fi;
done;
done;
fi
在/ usr/local/bin目錄/ svnrevisions
#!/bin/sh
# Usage: svnrevisions $file
# Output: list of fully numeric svn revisions (without the r), one per line
file="[email protected]"
svn log "$file" 2> /dev/null | awk '/^r[[:digit:]]+ \|/ { sub(/^r/,"",$1); print $1 }'
的Apache Subversion的1.8接受`svn log`命令的`--search`參數。在http://stackoverflow.com/a/17473516/761095查看我的答案 – bahrep 2013-07-04 15:06:13
`svn log --search`不執行@rjmunro所要求的全文搜索,但只搜索作者,日期,日誌消息和改變路徑。 – zb226 2016-04-15 10:25:54