新入社員と一緒に学ぶTortoiseSVNの使い方

#はじめに
新入社員にバージョン管理ツールの[Subversion](https://ja.wikipedia.org/wiki/Apache_Subversion)を教える事になった！
どうせなら[Qiita](https://qiita.com)で情報シェアした方が、同じような（教える側の）境遇の人たちへの教育教材の助けとなるかもって思ってまとめています。
私の都合でWindowsをベースとし[TortoiseSVN](https://tortoisesvn.net/)機能を中心に、とっかかりの部分の使い方を中心に説明していきます。
同じ境遇の人は、「svnのForceを感じるのだ！」って言う前に、こちらを案内してもらえればいいかもです。

#バージョン管理の目的
さっそくですが、~~手抜き~~分かりやすくまとめているページがありましたので、こちらを参照してください。

> [バージョン管理の目的](https://qiita.com/MasayaMizuhara/items/9503eb66d3125d8c5f41)

#TortoiseSVNとは/インストール方法
さぁ、バージョン管理の必要性は、マスターしたと思います。便利ですよね～バージョン管理。
もう入れるしかないでしょう！って事でSubversion(svn)のクライアントであるTortoiseSVNをいれてみましょう。

gitやMercurialを使っている人は、残念。教えてもらう上司にQiitaに書いてもらいましょう。きっと皆が幸せになれると思います。

TortoiseSVNの説明や、インストールについては、ここでも~~手抜きゴホゴホ~~分かりやすくまとめているページがありますので、こちらを参照してください。

> [TortoiseSVNの使い方](https://qiita.com/takecho123/items/7d1d97ca6871453378d3)


#つかってみようTortoiseSVN
さっそく使ってみましょう。
きっとこれを見せている上司は、すでに[リポジトリ](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA)を作成してくれていて使える状態にしているはずです。
私は信じています。作ってあげてよね！

（閉口休話）

まずは、リポジトリからチェックアウトしてみましょう。
##リポジトリからのチェックアウト([svn checkout](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.checkout.html))
リポジトリから、Suvbersionに登録されている内容を、自分のローカルへ作業コピーとして情報を持ってくることをチェックアウトといいます。

チェックアウトするリポジトリの情報は、作業コピーを持ってくるディレクトリのところで右クリックし、
「TortoiseSVN」-「リポジトリブラウザー(R)」
を選択します。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/46863c3d-dec1-a1b5-652b-5600a95d88ae.png)

指定されたリポジトリのtrunk[^1]を選択して、「チェックアウト(K)...」を選択してみましょう。
[^1]: [TortoiseSVNの使い方 - 基本用語](https://qiita.com/takecho123/items/7d1d97ca6871453378d3#girl_tone2%E5%9F%BA%E6%9C%AC%E7%94%A8%E8%AA%9E　"TortoiseSVNの使い方 - 基本用語")で説明があった、トランクの事です。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/0c70b34a-718a-dc24-48fa-d699ea8358cf.png)

チェックアウトの画面が出てきたと思います。

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/a1e6746e-47fd-3818-05f3-eb00c1564adc.png)

|項目|内容|
|:--|:--|
|リポジトリのURL | 先ほど選択したリポジトリURLです。|
|チェックアウト先のディレクトリ(D)|ローカルの作業コピー先を指定します。<br>組込機器等の開発をおこなっていると統合開発環境が絶対パスでMakefileを作成します。複数の開発者で同じMakefileを使う場合を考慮し、subst等で決めうちでドライブ名を作成。その下にリポジトリURLと同じディレクトリ構成で作成します。この運用により同じpathのディレクトリ構成で開発することができます。<br>また、ここではリポジトリで指定しているtrunkは不要です。|

そのまま「OK」を押してみましょう。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/a575c0f3-fe4b-72a3-865c-26611754b753.png)

おめでとうございます！完了のメッセージが出ていれば、チェックアウト完了です！

##作業コピーの変更点をリポジトリへ送信([svn commit](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.commit.html))
あなたの上司は既に課題を与えており、それコミットしといてねって気楽な感じでお願いしてくると思います。
めげちゃいけません。私がちゃんと説明します。
自分のローカルである作業コピーの内容をリポジトリへ送信することをコミットといいます。

先ほどチェックアウトしたディレクトリに作成したコードを入れ、右クリックし「SVNコミット(C)...」を選択します。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/6e0eba76-b9ff-1584-fcdd-aac43fb6768d.png)

1. リポジトリに追加する対象のファイルにチェックを入れます。
2. コミットのコメントを書きます。

![06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/92a82340-1014-5073-f01b-6bcb6f71ba77.png)


注意点としてリポジトリに登録ファイルは、、

* コミット対象にbuild時に生成されたオブジェクトファイルなどの中間ファイルなど。
* 特定の用途で使用しているユーザー毎に異なるログ、キャッシュファイルなど。

等は、登録するとコミット毎に差分がでてしまうので登録はしないのが一般的です。
また、コミット時のメッセージのフォーマットは一般的に以下のようにします。

```
1行目    変更内容の要約（タイトル、概要）
2行目     (空行)
3行目以降 変更した理由（内容、詳細）
```

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/5c8497e0-2682-8625-572d-bfb9f85da47f.png)

コミット終了画面にて、「完了　リビジョン＊＊＊となりました」
と出てれば、Subversionサーバーへコミット終了です。

##リポジトリへの追加準備([svn add](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.add.html))
さぁ、ドヤ顔で上司に報告してみましょう。
すると上司は、あっゴメン。README.md入れてもらうの忘れてた（テヘペロ
っと真顔で悪気もなく言ってくるかもしれません。
~~なるべく首から下を狙って、確実にグーで仕留める~~ここは大人の対応をして、すぐにREADME.mdを作成してコミットしましょう。
作業コピーに新たに追加したファイルやディレクトリを管理対象としてマークすることを、add(追加)といいます。

新しくファイルを管理対象として追加するなら、追加したいファイルを選択後に右クリック
「TortoiseSVN」-「追加（A)」
で追加が可能です。

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/7e86fc58-c6db-3ed5-75fe-4cc46d0e05a7.png)

先ほど、チェックアウトしたディレクトリを右クリックし、「SVNコミット(C)...」を選択します。

##ログの表示([svn log](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.log.html))
さぁ、ここまで出来たら自分のやった事に対して自画自賛をしていきましょう。
バージョン管理ツールは、変更を全て記憶しています。
いままで行ってきた作業は、全て記憶されているはずなので、変更内容をみていきましょう。
作業コピーのTOPディレクトリ（.svnディレクトリがある場所）で右クリック
「TortoiseSVN」-「ログを表示(L)」

![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/1e073558-e4d7-04ac-ebb1-eb911fe75c15.png)

おおおお、ちゃんと記憶されてる！！
5分ぐらい悦に至るぐらいなら、あなたの優しい上司なら許してくれるでしょう。
しっかりドヤ顔しながら、悦に入ってください。

##tagの作成([svn copy](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.copy.html))
悦に入っている中、またまた上司が、あっゴメン。タグ付けしといてっと言ってきました。
やるしかありません、もうあなたはTortoiseSVNのマスターです。

タグ付けとは、リポジトリのとある状態を人間が管理しやすいようにリポジトリに目印としてマーキングしていくことです。
つまりタグ(tag)やブランチ(branch)とは、リポジトリのとある状態をコピーすることを指します。
唯一違いがあるは、

|項目|内容|
|:--|:--|
|ブランチ(branch) | ブランチとしてコピーしたリポジトリに対して変更を運用上許容**する**。|
|タグ(tag)|ブランチとしてコピーしたリポジトリに対して変更を運用上許容**しない**。|

となっています。
具体的にはソフトウェアのリリース後、その状態を保持する事を目的として**"タグ"**付けをおこない、
ブランチは、本流とは異なるトピック的な作業を進めたいときに使用します。

ここでは、タグ付けを行うので、作業コピーのディレクトリTOPで、右クリック
「TortoiseSVN」-「ブランチ/タグの作成(T)」
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/67cbf95d-0495-0989-1ed8-df05bb3c7361.png)

コミットの設定を行います。

1. 宛先パスの設定<br>宛先は、リポジトリのtagディレクトリです。tag/**** とし、"****"には何をタグ付けしたかが分かるようにソフトウェアのバージョンなどを設定します。何を指定するかは、会社やプロジェクトのポリシーによって異なるので、一度確認した方がいいでしょう。
2. ログメッセージ<br>何をコミットしたかを分かるようにコメントを付与します。
3. コピー元のリビジョンの指定<br>ブランチ/タグ共に、どのリビジョンからコピー（派生）しかたを明確にする必要がある為、特定のリビジョンとして指定を行います。
4. タグ/ブランチを作成したら、そのリポジトリの宛先へ作業コピーの参照先を変更します。<br>タグ付けの時には、チェックをはずします。ブランチの場合は、チェックを入れると一手間減るのでお勧めです。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/f13bd809-4186-f500-75b6-6b4072703e66.png)


---

ここまでできれば、当面の開発は乗り切れるかもしれません。ここからは知っておいて欲しい内容をちょっとだけ記載しています。

##作業コピーにあるファイルやディレクトリ変更状態の確認([svn status](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.status.html))
いろいろ作業していくと、何をどんな風に変更をかけたのか分からなくなる事が、きっと出てくると思います。
そんなときは、作業コピーのTOPディレクトリで、右クリック
「TortoiseSVN」-「変更をチェック(F)」
にて作業コピー内の変更内容を確認することができます。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/7e9888ae-9b14-deff-ba7b-e61b5c54c892.png)
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/9456d554-76ef-2b15-0086-ef225cd256cc.png)


##作業コピーが参照しているリポジトリURLリビジョンの確認([svn info](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.info.html))
作業コピーディレクトリを右クリック、プロパティ表示にて、「Subversion」タグが追加されています。
そこを参照することにより、

* 現在の参照しているリポジトリURL
* 作業コピーのリビジョン
* リポジトリの最終変更リビジョン

の確認ができます。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/8f5c1b68-d174-361e-02f1-903d023413e2.png)

##リポジトリの変更点を作業コピーに適用([svn update](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.update.html))
ソフトウェアを複数人で開発する場合、自分以外の人がリポジトリにコミットをする事が多々あります。
その変更内容を作業コピーに反映させる場合に使用します。
[「作業コピーの変更点をリポジトリへ送信」](#作業コピーの変更点をリポジトリへ送信svn-commit)では、言及しませんでしたがコミットの前には必ず実施してください。

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7975/ce2bd254-4f0e-c4ae-cd49-dff2ff68530d.png)

# さいごに
最低限これだけ知っておけば、開発死しないだろうレベルで説明をしていきました。
個人的には、

* 右クリック「TortoiseSVN」-「切り替え(W)...」 ([svn switch](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.switch.html))
* 右クリック「TortoiseSVN」-「マージ(M)...」　([svn merge](http://www.thekyo.jp/manual/subversion/svn.ref.svn.c.merge.html))

あたりは開発時の必要に迫られた時にでも、上司や仲間に聞いてもらえると開発が捗ると思います。
おいおい、この使い方（コマンド）忘れてないかいって事があれば、コメント歓迎してます（追記するとは言ってないｗ）。