svn 同時に同じファイルの編集

muroiです。今日はsvnについて書きたいと思います。
今回で全3回のsvn研修も終わってしまい、後はしっかり使いこなせるよう復習と学習をしておかねばなりません。

主な内容は、まず前回の復習から行い新しいsvnコマンドもいくつか学習しました。
新しく学習したもの

  • svn revert
  • svn update(同じファイルを編集した時)
  • conflictとその解決
  • svnでの注意点

・svn revert

この『svn revert』とは、自分の編集したファイルを元に戻したいときに使用するものです。消して戻せるならそれでいいかもしれませんが、大量に変更したものを間違っていたからとちまちま修正していくのは大変なんで、そういった時に使用すると便利かもしれません。
使い方例:

svn revert もとに戻したいファイル名

このような記述で、コミットしていなければ指定したファイルを元に戻す事が出来ます。


・svn update(同じファイルを編集した時)

使い方は前回の研修と同じなのですが、今回は他の人と同時に同じファイルを編集した場合どうなるかと、その対処方法みたいなものを学習していきました。
まず、任意のファイルを他の人と同時に変更し保存しました。確認してみると状態は以下のようになります。

M hoge.txt

今度は、これを他に編集してる人と同じく『svn commit』しようとした所エラーとなり失敗しました。実際に今日は5人でやっていたのですが、1人だけ成功してあとの4人は失敗してしまいました。
リポジトリにあるのは、他の人が編集したファイルになっているのでこのままcommitできてしまうと上書きになってしまうので・・・。svnを利用していなければ、その変更部分を自分の編集したファイルにつけ解決できるかもしれませんが、それは結構大変な作業です。
しかしsvnでは、この差分の部分を適応する事ができるみたいで・・すごいですね。
commitではエラーが出たので、一度『svn update』をしてみます。すると以下のような状態になりました。

G hoge.txt

このように、『G』(=『merge』)されたという状態になり、他の人が編集した部分を自分の編集したファイルに適用する事ができました。この状態になった後もう一度commitを行うと無事成功でき、変更する事ができました。実際にファイルを確認してみると、自分では編集していない部分が追加されていて感激しました。


・conflictとその解決

このconflictとは、自分の編集した部分が、他の人の編集した部分とかぶった場合に発生した状態です。上記の『svn update』は、同じファイルでも編集した部分が異なったので、差分を適用する事で解決できましたが、同じ部分を編集しているとupdateでも解決する事はできませんでした。

C hoge.txt

updateすると、このような状態となりました。
この状態でファイルを確認してみると以下の様になっています。

<<<<<<<<<<<<<
自分の編集内容
========
他の人の編集内容
>>>>>>>>>>>>>

このようになっているので、まずはファイルを修正して、

svn resolved hoge.txt

とコマンドをうつと、conflictを解決する事ができました。


・svnでの注意点

  • ひとつの修正や機能追加等の変更はまとめてコミットする!
    • リビジョン管理をしやすくするため。
  • リビジョン(コミット)は目的ごとにする!(あとあとの管理のため)
    • 機能は機能、バグの修正はバグの修正ごとにというように
  • コミットのログメッセージは何を変えたかわかりやすく書く!
    • ただファイルを変更した等のメッセージでなく、処理の条件や変更を加えた理由や変更した事等を他の人が見てもわかるように
    • 変更箇所をわかりやすくするため

これからの業務でもsvnは利用していくかと思うのでしっかりと復習をしておき、いざ使うときになってもちゃんと使いこなせるようにしておきたいです!

(2008/07/03 irisawa追記)

お待たせしました。動画上がりました。

2 件のコメント so far »

  1. by tamaten, on 07.02.08 @ 12:53 AM

     

    今日はずいぶん時間がかかってたね。お疲れ様でした。svnはおもしろいですね。
    自分はまだコンフリクトの場合の処理に関してはあやふやだったので明日解決してみようと思います。
    授業以外にsvnをみんなでいじってみてもいろいろ発見がありそうだね。

    ひとつ不思議だったのが、衝突するのとしないのをsvnが判断している基準。

    一度はみなそれぞれのファンクションをいじっているときは衝突しなかったけど、
    その中をいじっただけでどうして衝突したのだろう。

    行数で判断しているのではないなとわかったのですが、どうしてそれが同じ部分の修正として扱われたれ、衝突という判断をしたのか、不思議でなりません。

  2. by artn, on 07.03.08 @ 7:48 PM

     

    > 行数で判断しているのではないなとわかったのですが、どうしてそれが同じ部分の修正として扱われたれ、衝突という判断をしたのか、不思議でなりません。
    初回でdiffを紹介しましたが、diffを調べるとその疑問は解消することでしょう。

Comment RSS · TrackBack URI

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree