100を超えるファイルをチェックアウトしたとします。 1つずつ指定したり、ファイルに追加せずにすべての変更リストに追加する方法はありますか?
答え1
どのオペレーティングシステムを使用していますか?
私はLinuxを仮定します。次のようにしてみてください。
ls *.c *.h */*.c */*.h | xargs svn cl source
これにより、現在のサブディレクトリとそのサブディレクトリにあるすべてのCファイルとヘッダファイルが変更リストソースに追加されます。上記のコマンドは、ファイル名の空白が原因で問題が発生する可能性があります。もっと複雑な場合は、次元を試してみてください。
find . -name .svn -type d -prune -o -type f -print0 | xargs -0 svn cl source
これにより、.svnディレクトリにないすべての一般ファイルがチェンジリストソースに追加されます。これはファイル名の空白にも当てはまります。
答え2
何が欲しいのかわからない。私は100を超えるファイルをチェックアウトしましたが、そのファイルをリポジトリに追加したいと言いました。ワークスペースにすでに存在するファイルを追加し、ワークスペースで変更をコミットする方法を紹介します。
チェックアウトされた作業コピーにディレクトリツリーを追加するには、svn add --force .
現在のディレクトリから始めて、作業コピーにバージョンがないすべてのファイルを追加します(現在のディレクトリにバージョンがある場合でも)。追加されたファイルはまだストレージにコミットする必要があります。
変更をコミットするには、svn commit -m "*insert comment here* .
これを実行して、現在のディレクトリからリポジトリに作業コピーのすべての変更をコミットします。
答え3
私はこれを行うために通常テキストエディタに頼っています。なぜなら、私は正しい道を進んでいるという視覚的な確認が必要だからです。ここではvimを使用していますが、emacsも同様にそれを行います。
プロジェクトルートで新しいバッファでvimを起動します。
それからvimで実行します。
:r !svn st
これにより、出力がsvn st
バッファに読み込まれます。これを確認して、予想と一致することを確認したり、変更リストにないエントリを削除したりできます。
M project/path/to/file1
M project/path/to/file2
M project/path/to/file3
M project/path2/to/file1
M project/path23/to/file1
その後、エディタの魔法を使用してコマンドに変換できます。たとえば::
:%s/^M/svn cl change/
これにより、上記の行が次のように変更されます。
svn cl change project/path/to/file1
svn cl change project/path/to/file2
svn cl change project/path/to/file3
svn cl change project/path2/to/file1
svn cl change project/path23/to/file1
その後、次のコマンドをシェルに送信できます。
:w !bash
これにより、クイックリストウィンドウに各コマンドの出力が返されます。
これは他の解決策よりも冗長に見えるかもしれませんが、検証のためにプロセス全体を視覚的に見ることができます(emacs diredモードを考えてください)、svnは履歴を書き換えることができないのでエラーを防ぎます。
これらのコマンドは前の履歴に残るので、通常は再入力する必要はなく、履歴から呼び出すだけです。