SVN CLIを効果的に使用する方法

SVN CLIを効果的に使用する方法

SVN CLIを使用して作業効率を向上させるには?次の繰り返し操作を完了する必要があります。

  • ディレクトリで変更されたファイルを探す
  • その一部のみを提出
    • 何らかの方法で選択して名前を覚えてください。
  • バージョン指定されていないファイルのリスト
    • 機能するものを使っていくつか追加し、覚えておいてください。
  • 特定のディレクトリの一部のファイルのみを回復

私はWindows上でTortoiseSVNに精通していますが、OSX(Linuxと非常によく似ています)に切り替えると、他のクライアントが不便または非常に高価なので、SVNのCLIを使用する必要があります。

ベストアンサー1

同様の問題が発生しました。私のアプローチは、私が実行する最も一般的な操作のためのシェルエイリアスまたは関数を書くことです。ちなみにZSHシェル関数です。機能自体はbashでも機能するはずですが、シェルが行うことは異なります。

使い方を見てみると、実行したい「いくつかの選択」操作が私とは異なり、どのような方法でも規定されていません。実際には、コミットをより頻繁に実行し、リポジトリの複数の作業コピーまたはブランチを利用して、オプションの変更セットを追跡するようにリビジョン制御の使用を変更することをお勧めします。ディレクトリで作業している場合、ディレクトリで実行するすべての操作はオプションでコミットまたは戻す必要がありますが、あまり残してはいけません。いつでも持っているものをコミットし、バージョン管理機能を使用して製品に含まれていない項目を処理します。

動作させるには、コードを~/.zshrcファイル(または~/.bashrcbash)に配置できます。

私が毎日使用する主な機能は次のとおりです。

function svnlist () {
    if [ -z "$2" ]; then
        case $1 in
            clobered)
                svn status | grep '^~' | cut -c9-
                ;;
            missing)
                svn status | grep '^\!' | cut -c0-
                ;;
            unknown)
                svn status | grep '^\?' | cut -c9-
                ;;
            conflicted)
                svn status | grep '^C' | cut -c9-
                ;;
        esac
    else
        case $2 in
            add)
                $0 unknown | xargs -iX svn add "X"
                ;;
            del)
                $0 missing | xargs -iX svn del "X"
                ;;
            revert) $0 conflicted | xargs -iX svn revert "X"
                ;;
            resolved) $0 conflicted | xargs -iX svn resolved "X"
                ;;
            unclober)
                mkdir _tmp
                $0 clobered | while read item; do
                    mv "$item" _tmp
                    svn del "$item"
                done
                svn ci -m "Unclobering files. (removing old)"
                mv _tmp/* .
                rmdir _tmp
                $0 unknown add
                svn ci -m "Unclobering files. (adding new)"
                ;;
        esac
    fi
}

alias svndiff="svn diff -x -b | colordiff"
compctl -x 'p[1]' -k '(missing unknown conflicted clobered)' - 'p[2]' -k '(add del revert resolved)' -- svnlist

svnlist unknownこれにより、現在のディレクトリでバージョン管理されていないすべてのファイルを検索し、オプションですべて追加するsvnlist unknown addためにこのようなタスクを実行できます。svnlist clobered revert更新後に破損したすべてのファイルを見つけて復元します。svnlist conflicted resolvedすべての競合は解決済みとしてマークされます。svnlist missing del操作中に失われたすべてのファイルは、リポジトリから削除されたとマークされます。

また、このような状況が発生した場合、特定のリビジョンのログメッセージを編集する方法は次のとおりです。使用しなくなりましたが、当初は多くの間違いを犯し、ログメッセージをきれいに保つことを好みます。

function svneditlog () {
    rev=$1
    if ! echo $rev | pcregrep '^[0-9]+$'; then
        echo "Invalid usage. svneditlog REV"
        return
    fi
    svn info | grep ^URL: | awk '{print $2}' | read url
    svn propedit -r $rev --revprop svn:log $url
}

このコードを見ると、私はこのコードを数年前にバージョンコントロールを使い始めたときに書いたことがわかります。

おすすめ記事