SVN CLIを使用して作業効率を向上させるには?次の繰り返し操作を完了する必要があります。
- ディレクトリで変更されたファイルを探す
- その一部のみを提出
- 何らかの方法で選択して名前を覚えてください。
- バージョン指定されていないファイルのリスト
- 機能するものを使っていくつか追加し、覚えておいてください。
- 特定のディレクトリの一部のファイルのみを回復
私はWindows上でTortoiseSVNに精通していますが、OSX(Linuxと非常によく似ています)に切り替えると、他のクライアントが不便または非常に高価なので、SVNのCLIを使用する必要があります。
ベストアンサー1
同様の問題が発生しました。私のアプローチは、私が実行する最も一般的な操作のためのシェルエイリアスまたは関数を書くことです。ちなみにZSHシェル関数です。機能自体はbashでも機能するはずですが、シェルが行うことは異なります。
使い方を見てみると、実行したい「いくつかの選択」操作が私とは異なり、どのような方法でも規定されていません。実際には、コミットをより頻繁に実行し、リポジトリの複数の作業コピーまたはブランチを利用して、オプションの変更セットを追跡するようにリビジョン制御の使用を変更することをお勧めします。ディレクトリで作業している場合、ディレクトリで実行するすべての操作はオプションでコミットまたは戻す必要がありますが、あまり残してはいけません。いつでも持っているものをコミットし、バージョン管理機能を使用して製品に含まれていない項目を処理します。
動作させるには、コードを~/.zshrc
ファイル(または~/.bashrc
bash)に配置できます。
私が毎日使用する主な機能は次のとおりです。
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
}
このコードを見ると、私はこのコードを数年前にバージョンコントロールを使い始めたときに書いたことがわかります。