すでに説明したメソッドは再帰的なルックアップを行いますが、同じアクションを再度実行すると失敗します (既存のツリーにサブツリーを追加する場合)。そのため、ディレクトリがまだ追加されていないことを確認し、追加されていないファイルのみを追加する必要があります。まだ追加されています。これを行うには、 の出力を使用して、cvs up
まだ追加されていない要素を確認します。行頭に疑問符が表示されます。
options を使用-0
し-print0
て -zZ
、ファイル名のスペースを正しく処理するようにします。--no-run-if-empty
また、何も追加する必要がない場合は実行を避けるために使用します。
CVS_PATTERN=/tmp/cvs_pattern
cvs -z3 -q up | egrep '^\?.*' | sed -e 's/^? //' > $CVS_PATTERN
find . -type d \! -name CVS -print0 | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
find . \( -type d -name CVS -prune \) -o \( -type f -print0 \) | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
cvs commit -m 'commiting tree recursively'
このアプローチにより、このようなエラーを回避できます。
cvs add: cannot add special file `.'; skipping
cvs [add aborted]: there is a version in ./dirname1 already
と
cvs add: `./dirname2/filename' already exists, with version number 1.1.1.1