ฉันเขียนสิ่งนี้เป็นสคริปต์ทุบตีของ cygwin เพื่อแก้ปัญหานี้
อย่างไรก็ตามต้องการให้คำค้นหาอยู่ในไฟล์ระบบไฟล์ สำหรับไฟล์ทั้งหมดที่ตรงกับ grep ของระบบไฟล์ grep ของ svn ทั้งหมดที่แตกต่างกันสำหรับไฟล์นั้นจะถูกดำเนินการ ไม่สมบูรณ์แบบ แต่ควรจะดีพอสำหรับการใช้งานส่วนใหญ่ หวังว่านี่จะช่วยได้
/ usr / local / bin / svngrep
#!/bin/bash
# Usage: svngrep $regex @grep_args
regex="$@"
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="$@"
svn log "$file" 2> /dev/null | awk '/^r[[:digit:]]+ \|/ { sub(/^r/,"",$1); print $1 }'
--search
อาร์กิวเมนต์สำหรับsvn log
คำสั่ง ดูคำตอบของฉันที่stackoverflow.com/a/17473516/761095