2024.12.05
【弊社紹介】社内勉強会開催!2024上期総集編
2015.03.26
開発環境・ツールSVNをコマンド操作する際の便利なコマンド
こんにちは、KTです。
MacのいいSVNクライアントが見つからず、最近はずっとコマンドでSVN操作してます。
Windowsの方々は、あまりコマンドから操作すること無いと思うので、良さそうなコマンドをいくつか紹介します。
他にこのコマンドいいよっていうのがあれば教えて下さい!
gitだと、今更新中の内容を
git stash
とすることで一旦退避することができます。
退避した修正内容は
git stash pop
とすることで、戻すことができます。
作業を中断して別の作業を始める時なんかに非常に便利です。
しかし、SVNにはstashコマンドなぞ用意されていないため、自分で退避する必要があり、とても手間です。
そこで、下記のようにすることで、作業内容をコマンド一発で退避できます。
svn diff --force > stash.patch svn revert -R .
まぁ、diffの内容をpatchに落としこんで、修正内容をrevertしてるだけなんですが。。。汗
ちなみに、戻すときは
patch -p0 < stash.patch
としましょう。
なお、追加したファイルは退避できないことに注意してください。
svn commit
としてしまうと、更新した全てのファイルがコミットされてしまいます。
svn commit file1 file2 ...
とすることで、ファイルを指定してコミットすることは出来ますが、1つのコマンド内でコミットするファイルを1つ1つ指定するのは面倒ですし、間違いも起きやすいですよね。間違えて途中でEnter押しちゃうと即コミットされちゃうし。。
SVNには変更リスト(changelist)という機能が用意されているので、それを使いましょう。
svn cl {changelist name} /path/to/addfile
とすることで、{changelist name}という名称の変更リストが生成され、指定したファイルが変更リストに加えられます。
ちなみに、私はよく以下のコマンドで特定のファイルを纏めて変更リストに追加しています。
svn st | grep "xxx" | awk '{print $2}' | xargs svn cl yyy
svn st で現在のステータスを取得し、grep で変更リストに追加したいファイルのみを絞り込んでawkで余分な部分を削って xargs svn cl で変更リストに追加、という感じですね。
grepを幾つかパイプすれば、追加したいファイルのみを絞り込むのはそう難しくはありません。
ちなみに、変更リストの内容は
svn st
でいつでも確認出来ますし、間違えたファイルを変更リストに加えてしまったら
svn cl --remove {changelist name} /path/to/delfile
とすれば、変更リストから除外されます(変更内容が消えたりはしないのでご安心を)
変更リストをコミットする際は
svn commit --changelist {changelist name}
とすればOKです。もちろん、-mオプションと併用してコメントも付けられます。
なお、コミットしたら変更リストは消えてしまうので、コミット後も変更リストを残したい場合は–keep-changelistsオプションをつけましょう。
他に、変更リストの修正内容を確認したいときは
svn diff --changelist {changelist name}
とすれば変更リストのファイルのみの修正内容を確認出来ます。
なお、svn commit や svn diff の –changelist オプションは –cl と短縮することが出来ます。(-clじゃないのでご注意を)
svn commit --cl {changelist name} -m "コメント" svn diff --cl {changelist name}
のような感じですね。
上でちょろっと紹介した
svn st | grep "xxx" | awk '{print $2}' | xargs svn 〜
という書き方は、変更リスト以外にもいろいろなコマンドで使えます。
別枠にくくりだして書くほどのことでも無いかもですが、結構便利なので紹介します。
1. 未追加ファイルを追加svn st | grep ^? | awk '{print $2}' | xargs svn add 2. 削除済みファイルをSVNから削除 svn st | grep ^! | awk '{print $2}' | xargs svn rm 3. 変更リストに追加(上で紹介した内容) svn st | grep "xxx" | awk '{print $2}' | xargs svn cl yyy などなど
「いろいろなコマンドで」なんて言っておきながら、3つしかいい例が浮かばなかったですが、どれもよく使うので良しとしましょう(笑
とりあえず以上。また良いネタがあれば追加します。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索