1. はじめに
仕事で使うバージョン管理がSVN(Subversion)で、操作は TortoiseSVN(エクスプローラー上で右クリックして使うGUIツール)でやっている、という人向けのメモです。
最近はGitが主流なので、SVNの情報は古い記事が多く、最初は戸惑いがちです。この記事では、TortoiseSVNの画面操作を中心に、最低限これだけ知っておけば困らないことをまとめます。コマンドで操作する人向けに、各操作には対応するコマンドもカッコ書きで添えています。
ちなみにこの記事は、自分が「外で編集してドラッグ&ドロップで持ち込む」運用をしていて更新できずに困った経験がきっかけです。同じところでつまずいている人の参考になればと思います。
扱うのは日常的に使う操作だけです。「ファイルを履歴を残しながら共有する」用途で困らないことを目標にします。
※メニュー名は英語表記(SVN Update / SVN Commit など)で記載しています。TortoiseSVNのバージョンや言語設定によって表記が多少異なる場合があります(日本語UIだと「更新」「コミット」などと表示されます)。
2. 一番大事な違い:集中型 vs 分散型
SVNとGitの一番の違いはここです。
- SVN(集中型):リポジトリはサーバー上に1つだけ。手元(作業フォルダ)にあるのは「最新を取ってきたファイル」であって、履歴そのものではない。
-
Git(分散型):手元にも完全な履歴のコピーがある。
ここから、押さえておきたい点が2つあります。
ローカルにリポジトリの歴史がない
履歴はサーバー側にあります。手元のフォルダにあるのは作業中のファイルだけです。「ログを見る」操作も、実際にはサーバーの履歴を見にいっています。
コミットは即サーバー反映(pushがない)
SVNには「push」がありません。TortoiseSVNで「SVN Commit」した瞬間に、その内容がサーバーに反映され、他のメンバーにも見える状態になります。
Git: add → commit(手元) → push(共有)
SVN: SVN Commit(この1回で共有まで完了)
中途半端な状態でコミットすると、すぐ全員に影響します。送る前にダイアログの内容を確認するクセをつけましょう。
3. やりたいこと → TortoiseSVNの操作 → コマンド
TortoiseSVNでの操作と、対応するコマンドの早見表です。基本はフォルダやファイルを右クリックしてメニューから選びます。
| やりたいこと | TortoiseSVNの操作 | 対応コマンド |
|---|---|---|
| 初回取得 | 空フォルダで右クリック → SVN Checkout | svn checkout |
| 最新を取り込む | フォルダを右クリック → SVN Update | svn update |
| 変更を共有する | 右クリック → SVN Commit → 送る項目にチェック → OK | svn commit |
| ファイルを新規追加 | ファイルを右クリック → TortoiseSVN → Add(その後Commit) | svn add |
| 状態・差分を見る | 右クリック → Check for Modifications |
svn status / svn diff
|
| 履歴を見る | 右クリック → TortoiseSVN → Show Log | svn log |
| 変更を取り消す | 右クリック → TortoiseSVN → Revert | svn revert |
| ファイルを削除 | 右クリック → TortoiseSVN → Delete | svn delete |
| ファイルを移動・リネーム | 右クリック → TortoiseSVN → Rename / 右ドラッグで移動 | svn move |
日常でいちばん使うのは SVN Update → 編集 → SVN Commit の繰り返しです。まずはこれだけ手に馴染ませれば十分です。
アイコン(オーバーレイ)の意味
TortoiseSVNは、管理下のファイルにマークを重ねて状態を教えてくれます。代表的なものだけ覚えておけば十分です。
- 緑のチェック:変更なし(最新と同じ)
- 赤のビックリマーク:変更あり(コミットすると反映される)
- 青のプラス:新しく追加した(まだコミットしていない)
- 疑問符(青):SVNの管理外(Addしないとコミットされない)
4. 作業の始め方:Checkoutして「中で」作業する
ここが一番大事な前提です。SVNは、Checkoutしてきたフォルダ(=作業コピー)の中で編集したときだけ、変更を追いかけられます。逆に言うと、別の場所で作ったファイルを後から持ち込んでも、SVNはそれを「同じファイルの更新」とは認識してくれません。
正しい始め方(最初の1回)
- 作業用の空フォルダを作る。
- そのフォルダの中で右クリック → SVN Checkout(
svn checkout)。 - リポジトリのURL(サーバーの場所)を入れてOK。サーバーからファイル一式が落ちてきます。
- これで、このフォルダが「作業コピー」になりました。以降の編集は、必ずこのフォルダの中のファイルを直接開いて行います。
日々の流れ
- 作業前に、フォルダを右クリック → SVN Update(最新を取り込む)。
- 作業コピーの中のファイルを直接開いて編集し、上書き保存する(場所も名前も変えない)。
- 右クリック → SVN Commit → 変更されたファイルにチェック → OK。
これだけです。外で作ってドラッグ&ドロップで持ち込む工程は、そもそも要りません。
補足:「clone」はGitの言葉です。 SVNに clone という操作はなく、サーバーから一式を取ってくるのは Checkout です。(git-svn など特殊なケースを除けば)SVNでは「最初に1回 Checkout、あとは Update と Commit」と覚えておけばOKです。
5. ここで陥りやすいポイント
実際に詰まりやすい点です。1つ目が本記事の核です。
1. 外で編集して、ドラッグ&ドロップで持ち込むと更新できない ←最重要
次のような運用は、SVNと相性が悪くハマりやすいです。
- 作業フォルダの外でファイルを編集する
- それを作業フォルダにドラッグ&ドロップで持ち込む
- 更新したくなったら、また外で編集してドロップで持ち込む
この場合、2回目以降で「更新できない(コミットに出てこない/Addからやり直しになる)」という状態に陥りがちです。
原因は4章のとおりです。ドロップで持ち込むと、SVNからは「前のファイルが消えて、別の新しいファイルが現れた」ように見えます。ファイル名が同じでも、SVNにとっては別物なので、「同じファイルの更新」として扱われません。そのため履歴も切れ、素直にコミットもできなくなります。
対策は「外で編集せず、作業フォルダの中のファイルを直接編集して上書き保存する」ことです。 これにより、更新できない問題も履歴が切れる問題も起きなくなります。
どうしても外で編集してしまった場合は、ファイルごと置き換えるのではなく、作業フォルダの中の同じ名前のファイルに、中身だけ上書きコピーしてください(「置き換えますか?」で上書きする形)。ファイルを消して入れ直すのとは別物です。
2. 新規ファイルは「置いただけ」では共有されない
新しく作ったファイルは、置いただけだとSVNの管理外(疑問符アイコン)です。右クリック → TortoiseSVN → Add して、さらに Commit して、初めてサーバーに上がります。「置いたのに他の人に見えない」はこれが原因のことが多いです。
3. コミットは即共有(取り消しにくい)
SVN Commitした瞬間に全員に反映されます。手元で試しにコミット、はできません。Revertは「手元の未コミットの変更を捨てる」操作で、サーバーに送ったコミットを消すものではない点に注意してください。
4. 移動・リネームはドラッグだけだと履歴が切れる
普通にドラッグして移動すると、1と同じく「消えて、別の場所に現れた」扱いになりがちです。履歴を保ったまま動かすなら、右ドラッグして「SVN Move」、またはRenameメニューを使います。
5. コミット前に「最新化」が必要
他の人が先に更新していると、古い状態のままではコミットできず、先にSVN Updateを求められます(「out of date」など)。コミット前にUpdateが基本の流れです。
6. SVN現場で生き延びる実践Tips
- 編集は「作業フォルダの中のファイルを、消さずに上書き」。 外で作って持ち込まない。(4章・5-1のとおり)
- コミット前に必ずSVN Update。 最新を取り込んでから送る。
- コミット前にCheck for Modifications。 何を変更したか、Addし忘れがないかを確認する。
- アイコンの色を信じる。 赤=要コミット、疑問符=Addが必要、の2つを意識するだけでミスが減ります。
- コミットメッセージは一言でも残す。 後から履歴を見たとき、自分が一番助かります。
7. まとめ
- SVNは集中型。手元にあるのはファイルで、履歴はサーバー側。
- 作業は Checkoutしたフォルダの中で、ファイルを直接編集するのが大原則。
- 外で編集してドラッグ&ドロップで持ち込むと、更新できず履歴も切れる。 中で直接いじる運用に変えれば解決。
- 新規ファイルは Add → Commit して初めて共有される。
- 日常は Update → 編集 → Commit の繰り返しでほぼ足りる。
GitとはSVNの考え方は違いますが、日常で使う操作はそれほど多くありません。特に「Checkoutしたフォルダの中で、消さずに上書き編集する」だけ押さえておけば、更新や履歴で困ることはほぼなくなります。
参考文献
- TortoiseSVN 日常の使用ガイド(公式・日本語) — TortoiseSVNの日々の操作をまとめた公式ドキュメント。本記事の各操作の正確な動作を確認するならまずここ。
- TortoiseSVN Daily Use Guide(公式・英語) — 同上の英語版。アイコンオーバーレイ、コンテキストメニュー、ドラッグ&ドロップの章があります。
- TortoiseSVN 公式サイト — 本体・日本語言語パックのダウンロードはこちら。
- Subversionによるバージョン管理(オンライン版) — SVNそのものの定番解説書。仕組みを深く知りたいとき向け。