こんにちは。情熱開発課の若尾です。プログラムやってます。パッション!
現在私はSVNでソース管理をしているプロジェクトで仕事をしています。
SVNはgitと比較すると、ブランチ(枝)が一つしかないので管理がシンプルでわかりやすいです。しかしながら、バージョンを分けて保持や検証をするのが困難です。これを少しでも解消するために、SVNのパッチ機能を使ってみたところ思った以上に利便性があったので、ブログに書いてみます。
今回はSVNパッチの使い方と、プロジェクトの際に便利だったことを書きます。
SVNパッチ(patch)の使い方
Patchという言葉から察せられるように、このpatchを作る側と適応する側に分かれて使われます。
Patchの作り方
作る際の注意点として、必ずソース管理の一番上(親)のフォルダで行ってください。
Patchを適応する際に、どのフォルダからみて適応するのかというのもキーになるので
作る際も予め一番上で作るといった決め事をしておくことを推奨します。
- ソース管理の一番上(親)のフォルダ内、もしくはそのフォルダを右クリックしてTortoiseSVNを選択
- Create patch… を選択する
- 編集や追加したファイル、つまり変更履歴として残したいファイルを選択します。このファイル選択はcommitの選択画面と似ているため、わかりやすいです。
- 任意のファイル名で保存します。これがpatchとなります。
Patch適応の仕方
- 作成された.patchファイルを作成者から受け取ります。
- ソース管理の一番上(親)のフォルダ内、もしくはそのフォルダを右クリックしてTortoiseSVNを選択
- Apply patch… を選択する
- 受け取った.pacthファイルを選択します。
- 変更差分の一覧が表示されます。同時にTortoiseMergeも起動します。”Patch selected item”は選択されたファイルの差分を適応、”Patch all items”は全てのファイルの差分を適応します。
これで.patchに記載された変更、差分を適応することができます。
注意点
svnに登録されてないファイル(addコミット前のファイル)に関しては.patchで取り扱うことはできません。ただし、.patchファイルをテキストエディタで開くと新規作成されたファイルの存在を確認することができます。
新規作成されたファイルも含む場合は、それらのファイルがどこに配置されるかを共有者に確認し、ファイルをコピーして配置してください。
便利だったケースの紹介
代理でコミットする際、双方が便利
プロジェクトに新たにメンバーが参入する際に、svnのアカウントがまだ発行されていない状態が続いていました。
新メンバーにスタンドアロンでソースを持ってもらい、その人のsvnが繋がるまでは代理で私が新メンバーの作業を代理でコミットするという場面がありました。
この時2つの問題があります。1つは変更ファイルを漏れなく貰うということです。変更したファイルが多くなるほど、それらのファイルを受け取る際に漏れが生まれやすいです。これはsvn patchを使うことで防ぐことができます。patch作成の際に変更ファイルの確認をして作成、その後渡す・受け取るファイルは.patchひとつだけなのでスムーズに受け渡しができ、漏れを防ぎます。
2つ目は、代理コミットをする側が変更したファイルが受け取ったファイル及びアプリケーションに影響を及ぼす可能性があるということです。その為、一度代理コミット者が変更ソースをどこかにバックアップしてrevertする…という方法を取りたいですが、バックアップを漏れなくかつどこかに置く必要がある手間があります。これを防ぐのに、代理コミット者自身の変更ファイル状況をsvn patchとして作成して、その後revertします。そうすることで、代理コミット後に自身のsvnに作成しておいたpatchを適応することで作業状態を戻すことができます。
この2つ目の対策に用いた、自分自身の変更ソースのバックアップというのが非常に便利でした。作業中に見つかったバグやエラーが、自身の作業によるものなのか、svnのソースから発生したものなのかを棲み分けて発見したいときに容易に行えるのが良かったです。
機能結合の確認が容易
上記と似ていますが
自分の作業と他作業者の機能を結合して確認するのが容易になります。
それぞれの変更が入ったうえで、コミットするかどうかを検討するというケースは、稀に存在するのでこういったケースを解決できるのはとても良かったです。
SVN パッチが便利
SVNでのプロジェクトが進む場合、patchのような使える機能は駆使するべきだと感じました。是非使ってみてください。
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。