チェックインするファイルを指定していないことを呼び出す$ svn ci -m "some message"
と、怒鳴るようにする方法はありますか?
ディレクトリ全体をチェックインすることを確認するように求めるだけでも、操作をキャンセルするだけでもかまいません。
通常は、SVN にチェックインするファイルを詳細に伝えようとしますが、場合によっては忘れてしまい、必要以上にチェックインしてしまうこともあります。
チェックインするファイルを指定していないことを呼び出す$ svn ci -m "some message"
と、怒鳴るようにする方法はありますか?
ディレクトリ全体をチェックインすることを確認するように求めるだけでも、操作をキャンセルするだけでもかまいません。
通常は、SVN にチェックインするファイルを詳細に伝えようとしますが、場合によっては忘れてしまい、必要以上にチェックインしてしまうこともあります。
あなたの答えにたどり着く前に、Subversion がどのように機能するかを理解してもらいたいと思います。
Subversion は、個々のファイルの変更としてではなく、変更リストとして変更を調べます。そのため、個々のファイルだけでなく、コミットがあるたびにリポジトリ全体のリビジョンがインクリメントされます。
変更リストを処理しないバージョン管理システムに慣れている多くの人々は、次のようなことをしています:
$ svn commit file1
$ svn commit file2
$ svn commit file3
これは、変更リストの概念を壊すため、悪いことです。file1
、file2
、およびがすべて単一の変更に関連している場合は、file3
一緒にコミットする必要があります。
Subversion を使用して一度に 1 つの変更リストを操作する標準的な方法。バグの修正や機能の追加に取り組み、変更をコミットしてから、次のバグや機能に取り組みます。同時に 2 つの個別のバグまたは機能に取り組んでいる場合は、実際には 2 つの個別のチェックアウトが必要です。
svn commit
そのようにすると、変更リストを単一のユニットとしてコミットするために使用できるようになります。
そうは言っても、ファイルをリストしない場合、Subversion コミットの動作を変更する方法があります。それは、独自の関数とコマンドsvn
のエイリアスを定義することです。svn
たとえば、Kornshell では、現在cd
のディレクトリを反映するためにプロンプトを変更する簡単な方法はありません。これを回避するに_cd
は、ディレクトリとプロンプトを変更する関数を作成します。次に、cd
コマンドを_cd
関数にエイリアスします。
あなたの場合、_svn
最初のパラメーターを見て、それが であるかどうかを確認する関数を定義しますcommit
。svn
そうでない場合は、実際のコマンドを安全に実行できます。最初のパラメーターが の場合commit
、2 番目のパラメーターがあるかどうかを確認できます。存在しない場合は、ファイルを一覧表示するのを忘れたと見なして終了できます。関数は次のようになります。
function _svn {
if [[ $1 == "commit" ]] && [[ -z $2 ]]
then
echo "You need to specify the exact files to commit"
exit 2
else
\svn $*
fi
次に、エイリアスを作成します。
alias svn="_svn"
現在、実行svn
してもコマンドは実行されませんsvn
(少なくとも直接)。代わりに、エイリアスが_svn
関数を実行します。
ところで、私は自分の関数でパラメーター処理を想定していません。-m "this is a test") or
(コマンドに --username bob --password swordfish`を追加するとどうなりますか?) パラメータを処理する関数を commit コマンドに拡張する必要があります。ただし、これにより、コマンドの機能を変更してこのようなことを行う方法の一般的なアイデアが得られます。
SVNコミットの代わりに呼び出すbashスクリプトを思いつきました。これは、パラメーターのチェックを行います
#!/bin/bash
# usage: ci -[file1...fileN] [-m message]]
# a wrapper for svn ci with some extra features
# - If no message is given, will prompt user for message
# - If no files are given, will show user list of files that
# will be checked in and ask them to confirm or select files
# they want to check in
FILES=""
MESSAGE=""
MESSAGE_FLAG=0
# parse files and message from input
for var in "$@"
do
if [ $MESSAGE_FLAG -eq 1 ]
then
MESSAGE="$var"
break
elif [ "$var" = "-m" ]
then
MESSAGE_FLAG=1 # Indicates message is coming next
else
FILES="$FILES $var"
fi
done
# ask for message if not present
if [ "$MESSAGE" = "" ]
then
echo "Enter a message:"
read MESSAGE
fi
# Check files have been specified
if [ "$FILES" = "" ]
then
echo "No files have been specified"
# call to svn st to print out list of modified files
svn st
echo "Do you want to check in all of these files (y/n/q):"
read override
if [ "$override" != "y" ]
then
if [ "$override" = "q" ]
then
exit
fi
echo "What files do you want to check in?"
read FILES
fi
fi
svn ci $FILES -m "$MESSAGE"
私は JavaScript プログラマーなので、これを機能させるために BASH の本をよごす必要があったので、注意して使用してください。
私はこのファイルを PATH に入れて ci と呼んだので、呼び出す代わりに を呼び出しsvn ci
ます。これci
により、長時間のキーストロークも節約できます。