34

ファイルで削除されたテキスト文字列を検索して、SVN リビジョンを見つける方法はありますか? 検索する正確なテキストと検索するファイルはわかっていますが、何百ものリビジョンがあります。

4

5 に答える 5

32

khmarbaise のスクリプトに基づいて、私はこれを思いつきました:

#!/bin/bash
file="$1"
REVISIONS=`svn log $file -q --stop-on-copy |grep "^r" | cut -d"r" -f2 | cut -d" " -f1`
for rev in $REVISIONS; do
    prevRev=$(($rev-1))
    difftext=`svn diff --old=$file@$prevRev --new=$file@$rev | tr -s " " | grep -v " -\ \- " | grep -e "$2"`
    if [ -n "$difftext" ]; then
        echo "$rev: $difftext"
    fi
done

コマンドラインでファイル名と検索文字列を渡します。

xyz.sh "filename" "text to search"

svn diff は、追加された場所と削除された場所の両方のリビジョンを提供します。誰にとっても役立つ場合に備えて、ここに残します。最後のリビジョンにはエラーメッセージがあり、それを取り除く方法がわかりません (まだ多くの bash を学ぶ必要があります :)) が、リビジョン番号は正しいです。

于 2010-04-30T07:07:15.810 に答える
9

変更された行を除外するほんの少しのbashスクリプト... pom.xmlをファイルに変更すると、必要なものが得られる場合があります...(Unixのようなシステムを使用している場合)。以下をスクリプト ファイル (xyz.sh) に入れ、出力に対してフィルター処理を行います。

#!/bin/bash
REVISIONS=`svn log pom.xml -q|grep "^r" | cut -d"r" -f2 | cut -d" " -f1`
for rev in $REVISIONS; do
    svn blame -r$rev:$rev pom.xml | tr -s " " | grep -v " -\ \- "
done


xyz.sh | grep "Text you are searching for"

印刷物は次のようになります。

256 ......

256 は、変更が加えられたリビジョンです。

于 2010-04-29T09:06:54.627 に答える
1

私はBlameall.pyが好きです。

ファイルの出力には、既存の行と削除された行がすべて含まれているため、周囲のコンテキストで削除された行を確認できます。

于 2013-12-12T12:57:44.353 に答える