Changes between Version 12 and Version 13 of pne-book-9-2

Show
Ignore:
Author:
ebihara (IP: 124.44.163.130)
Timestamp:
03/31/08 20:33:28 (9 years ago)
Comment:

とりあえず一通り修正

Legend:

Unmodified
Added
Removed
Modified
  • pne-book-9-2

    v12 v13  
    11[[TOC]] 
    22 
    3 = ブランチとマージ
     3= OpenPNE開発のSubversion活用法
    44 
    55解説:海老原[[BR]] 
    6  
    76文:井本 
     7 
     8 
    89 == 概要 == 
    9 OpenPNEの開発では、SVNを用いてソースコードの管理やバグの修正の管理などを行っています。なかでも、これから紹介するブランチとマージはOpenPNE開発において非常に効率よく開発を進める手段として使っています。 
    10  
    11 そこで、今回は、OpenPNE開発で実際に使われているSVNの使い方をOpenPNEのTracを一部参照しながらブランチとマージを紹介していきます。 
    12  
     10 
     11OpenPNEでは、Subversionというバージョン管理システムを用いてソースコードの管理をおこなっています。[[BR]] 
     12ここでは、OpenPNE開発でSubversionがどのように使われてるか、OpenPNEのTracを見ながら紹介していきます。 
    1313{{{ 
    1414OpenPNE開発情報 
    1515http://trac.openpne.jp/ 
    1616}}} 
    17  
    18 == OpenPNEのTrac == 
    19 それではまず、OpenPNEのTracを見てみましょう。[[BR]] 
    20 OpenPNEのTrac(http://trac.openpne.jp)にアクセスすると、TracのTOP画面に来ます。 
    21  
    2217[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/1-trac-top.jpg,650)]] 
    2318 
    2419 
    25  
    26  
    27  === root === 
    28 次に、上のグローバルメニューから「Browse Source」をクリックすると、Tracで管理されているOpenPNEのソースを見ることができます。(http://trac.openpne.jp/browser) 
    29 ここはrootディレクトリで一番上のディレクトリです。 
    30 このrootディレクトリは、大きく分けて二種類のディレクトリ構成になっています。一つ目はOpenPNE本線開発のディレクトリ(/OpenPNE)で、もう一つはOpenPNE本線開発とはことなるプロジェクトです。(NEKOGET_PNESKIN、PNEMonster) 
    31  
    32 {{{ 
    33 root 
    34  
    35 NEKOGET_PNESKIN 
     20まず、上のグローバルメニューから「Browse Source」をクリックすると、Subversionで管理されているファイルの一覧を見ることができます。(http://trac.openpne.jp/browser)[[BR]] 
     21OpenPNE本体のソースコードは、ルートディレクトリ(一番上のディレクトリ)にある「OpenPNE」という名前のディレクトリに格納されています。[[BR]] 
     22(注:ルートディレクトリにはこの以外にも、作業用のディレクトリ(work)やOpenPNEに関わる仕様書やドキュメント類用のディレクトリ(OpenPNE_specification)などがあり、用途に応じて使い分けています) 
     23{{{ 
    3624OpenPNE 
    3725OpenPNE_specification 
    38 PNEMonster 
    3926prj 
    4027sandbox 
    41 smtp2pne 
    4228work 
    4329}}} 
    4430 
    45  === root/OpenPNE === 
    46 それでは、OpenPNE本線開発のディレクトリを見ていきましょう。[[BR]] 
    47 OpenPNE以下のディレクトリにはbranches、tags、trunkと3つのディレクトリがあります。まず、一番下にあるtrunkがOpenPNE本線開発のメインディレクトリです。基本的に開発版のリリースはこのtrunkでリリースされます。 
    48  
    49 次に、一番上にあるbranchesですが、直訳すると「枝」です。このbranchesは安定したバージョンの開発や、各個人がもっている機能追加やプロジェクトなどに使われている作業用のディレクトリです。[[BR]] 
    50 最後に、tagsはOpenPNEの開発でバージョンを固定した場合に、このディレクトリにソースコードを残しておくためのディレクトリです。 
    51  
    52 {{{ 
    53 root/OpenPNE 
    54  
     31== OpenPNE開発用ディレクトリ == 
     32「OpenPNE」以下は、Subversionでソースコードが管理されている多くのプロジェクトと同様に、次のような構造になっています。 
     33{{{ 
     34trunk 
    5535branches 
    5636tags 
    57 trunk 
    58 }}} 
    59  
    60  === root/OpenPNE/branches === 
    61 まず、一番上にある、branchesから見ていきましょう。[[BR]] 
    62 branchesディレクトリは安定したバージョンの開発や、各個人がもっている機能追加やプロジェクトなどに使われている作業用ディレクトリです。[[BR]] 
    63 主に三種類のディレクトリがあります。[[BR]] 
    64  
    65 {{{ 
    66 prj:プロジェクトとしてチームで開発を行うディレクトリ 
    67 stable-x.x.x:安定版のバグ修正などを行うディレクトリ 
    68 work:個人で行う小さな機能開発を行うディレクトリ 
    69 }}} 
    70  
    71 prjディレクトリとworkディレクトリは基本的には新しい機能の開発に使われるディレクトリです。[[BR]] 
    72 具体的にどのようにprjディレクトリとworkディレクトリが使われているか実際のOpenPNE開発事例を参照しながら解説していきます。[[BR]] 
    73 stable-x.x.xは安定版の機能修正やバグ修正などを行うためのディレクトリです。[[BR]] 
    74 例えば、stable-2.10.0で何かバグが発見されたとします。するとまず、stable-2.10.xディレクトリで発見されたバグなどを修正します。そして、一通り修正が終わったら、tagsディレクトリ(root/OpenPNE/tags)にソースを移して、stable-2.10.1として正式にリリースされます。[[BR]] 
    75 この様に、stable-x.x.xディレクトリでは、安定版のバグ修正などを行う一時的なディレクトリとなります。 
    76  
    77 それでは、具体的にどのようにprjディレクトリとworkディレクトリがどの様に使われているか実際のOpenPNE開発事例を参照しながら解説していきます。 
    78  
    79 {{{ 
    80 root/OpenPNE/branches 
    81  
    82 prj 
    83 stable-2.6.x 
    84 stable-2.8.x 
    85 stable-2.10.x 
    86 work 
    87 }}} 
    88  
    89  
    90  
    91  === root/OpenPNE/branches/prj === 
    92 まず、prjディレクトリから見ていきます。[[BR]] 
    93 現在prjディレクトリには以下のような主要プロジェクトがあります。[[BR]] 
    94  
    95 このprjディレクトリはプロジェクトごとの機能開発に使用されているディレクトリです。ですので、そのプロジェクトに所属しているメンバーであれば基本的に誰でもソースコードを修正することが許可されています。 
    96  
    97 現在OpenPNEではOpenIDを外部認証として使うことができます。そのときに開発用ディレクトリとして使用されていたディレクトリがこのprjディレクトリにあるopenidディレクトリです。[[BR]] 
    98 このopenidのディレクトリのリビジョンを見てもらうと分かりますが、ogawa、maruyama、ebiharaなど複数の人でチームを組んでOpenIDの機能開発を行っていたことが分かります。 
    99  
     37}}} 
     38 
     39 
     40trunkとは「幹」を意味する英単語です。このtrunkディレクトリがOpenPNE開発の本流となります。開発版の機能追加やバグフィックス、成果物のマージ(取り込み)などがおこなわれています。[[BR]] 
     41一方、branchesは「枝」を意味します。「幹」であるtrunkから派生したソースコードが、「枝」であるbranchesに格納されています。安定したバージョンのメンテナンスや、各個人による機能追加やプロジェクトの進行など、OpenPNE開発の本流とは別の用途に使われるディレクトリです。[[BR]] 
     42tagsはある特定の時点のソースコードを残しておくためのものです。 
     43 
     44 
     45=== ブランチの構造 === 
     46branchesディレクトリには、以下のようなブランチがあります。 
     47 
     48{{{ 
     49prj:プロジェクトとしてチームで開発をおこなうブランチ 
     50stable-x.x.x:安定版のバグ修正などをおこなうブランチ 
     51work:個人での機能開発をおこなうブランチ 
     52}}} 
     53 
     54 
     55=== stableブランチ === 
     56stable-x.x.xは安定版のメンテナンス(バグ修正など)をおこなうためのブランチです。あるバージョンで修正するべきバグなどの対応が一通り完了した場合、このブランチの特定リビジョンをtagsディレクトリにコピーし、リリースされます。[[BR]] 
     57stableブランチは、そのバージョンをメンテナンスするべき期間(次の次のバージョンのベータ版リリースまで)、保守され続けます。[[BR]] 
     58 
     59=== プロジェクト開発用ブランチ === 
     60prjブランチは、プロジェクトごとの開発に使用されているブランチです。大きな機能開発や、複数人での開発がここでおこなわれています。[[BR]] 
     61OpenPNE2.12ではXHTML+CSSプロジェクトの成果物が入っていますが、これはxhtmlcssブランチの中で開発されていたものです。[[BR]] 
     62このブランチのログを見れば、takai,nakasone,ogawa,tomizawa,kiwa,ebiharaなど複数人が協力して開発していることがわかります。[[BR]] 
     63このプロジェクトの開発がある程度落ち着いた段階で、trunkに成果物が取り込まれました。取り込まれた成果物は、トランクコミッターが検証・修正したうえで、問題がなければ、新機能としてリリースされます。 
    10064 
    10165[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/2-openid.jpg,650)]] 
    10266 
    103 この様に、prjディレクトリは複数人で行う大きな機能追加や機能修正をプロジェクトとしてこのディレクトリで管理しています。 
    104  
    105 {{{ 
    106 root/OpenPNE/branches/prj 
    107  
    108 openid 
    109 opensocial 
    110 pne-api 
    111 slavepne2 
    112 xhtmlcss 
    113 ・ 
    114 ・ 
    115 ・ 
    116 }}} 
    117  
    118  === root/OpenPNE/branches/work === 
    119  
    120 次に、workディレクトリを見ていきましょう。 
    121 まず、このディレクトリを見てディレクトリ名に個人名が使われていることが多いということが分かります。基本的にこのworkディレクトリは個人で行う小さな機能開発を行うディレクトリだからです。 
    122 ですので、個人が比較的自由にこのディレクトリを使うことができるので、小さな機能開発以外にも、OpenPNEで追加してみたい実験的な機能開発や、プロジェクトの機能開発だがprjにソースをマージ(後ほど解説)させるほど完成度が高くないソースをここで改良するなどの使い方があります。 
    123 prjディレクトリにあったxhtmlcssディレクトリはこのworkディレクトリである程度開発したあとで、prjディレクトリに移動したという経緯があります。 
    124 また、workディレクトリは基本的には各個人のディレクトリですので、他の人がソースを書き換えるということはありません。 
     67=== 個人開発用ブランチ === 
     68 
     69 
     70workブランチは各個人が自由に機能開発や改善、バグ修正などをおこなうためのブランチです。[[BR]] 
     71各個人が自分の名前のついたブランチで開発をおこなっています(海老原の場合、ebihara以下)。[[BR]] 
     72trunkやstableブランチなどはコードの品質やUI、使い勝手などを充分配慮して開発をおこなう必要がありますが、個人開発用ブランチにはこのような制約はありません。自由に使えるスペースなので、OpenPNEで追加してみたい実験的な機能開発など、様々な使い方をすることができます。 
    12573 
    12674{{{ 
    13078imoto 
    13179ishida 
    132 kimura 
    13380kiwa 
    13481ogawa 
    13986 
    14087例として、work以下のebiharaディレクトリを見てみます。[[BR]] 
    141 主にebiharaディレクトリでは、プロジェクトに移す前段階のソースコードを管理しています。ディレクトリの【prj_】というのは「プロジェクトに移行させるためのディレクトリですよ」ということを表しています。[[BR]] 
    142 現在はすべて【prj_】がついたディレクトリ名ですが、個人的にOpenPNEに取り込んで欲しい機能などがあれば分かりやすい機能名のディレクトリを作って開発しています。[[BR]] 
    143 prj_dashboadというディレクトリは主にダッシュボード改善プロジェクトの個人開発用として作ったディレクトリです。ダッシュボード改善プロジェクトというプロジェクトが立ち上がった段階でまず、このebiharaディレクトリにprj_dashboadというディレクトリを作ります。ある程度ソースコードが完成した段階で、prjにソースコードを移してプロジェクトを進めています。[[BR]] 
    144  
    145 リビジョンを見てもらうと分かると思いますが、ここはebiharaディレクトリで、ebiharaが管理しているので、修正は基本的にebiharaしか行っていません。[[BR]] 
    146  
    147 {{{ 
    148 root/OpenPNE/branches/work/ebihara 
    149  
    150 prj_auth_container_mybox 
    151 prj_dashboad 
    152 prj_debug_2_6_7 
    153 prj_dev26_bizfix 
    154 prj_dev28_bizfix 
    155 ・ 
    156 ・ 
    157 ・ 
    158 }}} 
    159  
    160 この様に、prjとworkにはプロジェクトで開発するか個人で開発するかかという大きな特徴があります。 
    161 この特徴に注目しながらtrac.openpne.jpを見ていただけると、「お!この機能はプロジェクトとして動いてるんだ」「この機能はogawaさんが個人で開発しているけど本線に取り込まれるのかな」など、OpenPNEの最新の動向と今後の方向性も見えてくるかも知れません。 
    162  
    163 == ブランチ == 
    164 それでは、OpenPNE開発ではどのようにしてブランチを作っているか、どのような方法でブランチを作っているかを実際にブランチを作りながら紹介します。 
    165 現在、OpenPNE開発者は主に二種類の方法でブランチを作っています。二種類の方法とは「TortoiseSVNでブランチを作る方法」と「SVNコマンドでブランチを作る方法」です。 
    166 OpenPNE開発者には、Eclipseなどの開発環境を使っている人もいますし、vimなどを使ってコマンドラインで開発している人もいます。よって、それぞれの開発者に適した方法でブランチを作っています。 
    167 そこでこの章ではWindowsクライアントであるTortoiseSVNでブランチを作る方法とsvnコマンドでブランチを作る方法の二種類の方法を紹介するので、適宜環境に合わせて使いやすい方法でブランチ作成に取り組んでください。 
    168  
    169 今回、Subversionの詳しいインストールは割愛しますが、Debian系であればapt-get、CentOS系であれば、yumで取得できます。 
    170  
    171 {{{ 
    172      
    173 Debian系 
    174 apt-get install subversion 
    175  
    176 }}} 
    177  
    178 {{{ 
    179  
    180 CentOS系 
    181 yum install subversion 
    182  
    183 }}} 
    184 詳しくは、マニュアルを参照してください。 
    185 {{{ 
    186  
    187 Debian ユーザ文書 
    188 http://www.debian.org/doc/index.ja.html 
    189  
    190 CentOS Documentation 
    191 http://www.centos.org/docs/ 
    192  
    193 }}} 
    194  
    195  === TortoiseSVNでブランチを作る方法 === 
    196 「TortoiseSVNでブランチを作る方法」では、TortoiseSVNというSubversionのWindowsクライアントソフトを使用します。ですので、ここではTortoiseSVNがインストールされていることを前提条件としています。まだインストールをされていない人はTortoiseSVNの日本語翻訳マニュアルがあるのでそちらを参考にしてインストールしてください。 
     88海老原はトランクコミッターなので、OpenPNE開発版に実装される予定の大きな機能開発のためにブランチを利用していることが比較的多いのですが、OpenPNEフレームワークのリファクタリング用ブランチなど、実験的な取り組みにも積極的に個人開発用ブランチを利用しています。[[BR]] 
     89 
     90 
     91この様に、prjとworkにはプロジェクトで開発するか個人で開発するかかという大きな特徴があります。[[BR]] 
     92この特徴を念頭に置きながらtrac.openpne.jpを見ていただくと、「お! この機能はプロジェクトとして動いてるんだ」「この機能はogawaさんが個人で開発しているけど本線に取り込まれるのかな」など、OpenPNEの最新の動向と今後の方向性も見えてくるかも知れません。 
     93 
     94== ブランチの作り方 == 
     95それでは、海老原が実際にどのようにしてブランチを作っているか、実際に作業をしながら紹介します。[[BR]] 
     96ここでは、「svnコマンドを使った方法」と「TortoiseSVNを使った方法」の二種類を紹介します。ここで紹介するのはほんの一例ですので、それぞれが気に入った方法でチャレンジしてみてください。[[BR]] 
     97 
     98 
     99 === TortoiseSVNを使った方法 === 
     100TortoiseSVNは、SubversionのWindowsクライアントソフトを使用します。まだインストールをされていない人は次に紹介するサイトからダウンロードしてみてください。 
    197101 
    198102{{{ 
    201105}}} 
    202106 
    203   ==== ブランチの作成 ==== 
    204 それでは早速ブランチの作成に入ります。 
    205 今回はroot/OpenPNE/branches/work/ebihara以下に個人用ブランチを実際に作りながら、解説していきます。 
    206  
    207 {{{ 
    208 root/OpenPNE/branches/work/ebihara 
    209  
    210 prj_auth_container_mybox 
    211 prj_dashboad 
    212 prj_debug_2_6_7 
    213 prj_dev26_bizfix 
    214 prj_dev28_bizfix 
    215 ・ 
    216 ・ 
    217 ・ 
    218 }}} 
    219  
    220  
    221 例として、ここにOpenPNEグローバル変数改善プロジェクトを作成していきます。 
     107==== ブランチの作成 ==== 
     108それでは早速ブランチの作成に入ります。[[BR]] 
     109OpenPNE/branches/work/ebihara以下に実際にブランチを作りながら、解説していきます。 
    222110 
    223111[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/3-drectory.png,650)]] 
    224112 
    225 まず、ローカル環境でOpenPNEのソースをコピーしてきたいディレクトリに移動します。[[BR]] 
    226 次に、そのディレクトリで右クリックして、メニューの中から「Repo-browser」をクリックします。[[BR]] 
    227 ※ディレクトリを移動しなくても右クリックでメニューが出ますが後にその場所にチェックアウト(ソースのダウンロード)することになるので移動しています。 
    228  
     113適当なディレクトリで右クリックして、メニューの中から「Repo-browser」をクリックします。 
    229114 
    230115[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/4-repo.png,650)]] 
    232117クリック後に、URLというウィンドウが出てくるので、そのURL欄にSVNのURLを入力します。 
    233118 
     119 
    234120{{{ 
    235121https://trac.openpne.jp/svn/ 
    236122}}} 
    237123 
     124 
    238125入力後に「Repository Browser」という新しいウィンドウが開きSVNを見ることができるようになります。[[BR]] 
    239  
    240126[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/5-repo2.png,650)]] 
    241  
    242  
    243127次に、OpenPNEの最新安定版からブランチを作ります。[[BR]] 
    244  
    245 現在OpenPNEプロジェクトでは、タグ(OpenPNE/tags)からブランチを作ることを推奨しているので今回はOpenPNE/tags/stable/OpenPNE-2.10.3からブランチを作ることにします。OpenPNE-2.10.3上で、右クリックをすると、下記の画像のようなメニューが表示されるので、今回は「Copy to...」を選択します。[[BR]] 
    246  
    247  
     128タグ(OpenPNE/tags)からコピーすることで、特定のバージョンから派生したブランチを作成することができます。今回はOpenPNE/tags/stable/OpenPNE-2.10.3からブランチを作ることにします。画面内で「OpenPNE-2.10.3」とある箇所で右クリックをすると、下記の画像のようなメニューが表示されるので、「Copy to...」を選択します。[[BR]] 
    248129[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/6-copy_to.png,650)]] 
    249130 
    250  
    251 この「Copy to...」を選択したら、「New name:」という入力フォームが出るのでコピー先を指定します。[[BR]] 
    252  
    253 今回は、workディレクトリ以下のebiharaディレクトリに作業用ディレクトリ(prj_remove_globals)を作るので下記のURLを指定して「OK」ボタンを押します。[[BR]] 
    254  
    255 Logが出るのでprj_remove_globalsを追加したメッセージを残します。[[BR]] 
    256  
    257 このログを残したら、prj_remove_globalsディレクトリが作成され、OpenPNE-2.10.3のソースコードがコピーされています。[[BR]] 
    258  
    259 指定したバージョンがコピーされているかの確認はwebapp/version.phpを開いてOPENPNE_VERSIONを確認してください。[[BR]] 
    260  
    261  
     131「New name:」という入力フォームが出るので、レポジトリ上のコピー先URLを指定します。今回は、work以下のebiharaブランチにOpenPNE2.10.3からの派生ブランチ(prj_remove_globals)を作るので下記のURLを指定して「OK」ボタンを押します。[[BR]] 
     132「Log:」という入力フォームが出るので、どのようなブランチを作成したのかという説明を書きます。これは、trac.openpne.jpのTimelineに記録されます。何も書かずに作成することもできますが、後から流れが追いづらくなるので、できるだけ記述するようにしてください。[[BR]] 
     133 
     134[[BR]] 
     135これで、ブランチを作成することができました。[[BR]] 
     136指定したバージョンがコピーされているかの確認はwebapp/version.phpを開いてOPENPNE_VERSIONを確認すると一目瞭然かと思われます。[[BR]] 
    262137{{{ 
    263138https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ 
    272147}}} 
    273148 
    274  
    275   ==== チェックアウト ==== 
    276 これで、SVN上ではブランチを作ることが出来ました。[[BR]] 
    277  
    278 後は、このSVN上にあるソースコードを先ほどのローカルディレクトリに移動してチェックアウトします。[[BR]] 
    279  
    280 チェックアウトとは、 Subversionリポジトリ上で管理されたファイルをローカルファイルに取得する作業のことです。[[BR]] 
    281  
    282 それではチェックアウトしていきます。[[BR]] 
    283  
    284 まず、チェックアウトしたいローカルディレクトリに移動して、右クリックでメニューを表示し、「SVN Checkout...」をクリックします。[[BR]] 
    285  
     149==== チェックアウト ==== 
     150これでレポジトリにブランチを作成することができました。[[BR]] 
     151あとは作業用にレポジトリにあるソースコードをチェックアウトします。[[BR]] 
     152チェックアウトとは、 リポジトリで管理されたファイルをローカルディレクトリに取得する作業のことです。[[BR]] 
     153 
     154まず、チェックアウトしたいローカルディレクトリに移動して、右クリックメニューを表示し、「SVN Checkout...」をクリックします。[[BR]] 
    286155[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/9-checkout_migi.png,650)]] 
    287156 
    288157クリックすると、Checkoutという新しいウィンドウが表示されます。[[BR]] 
    289158 
     159 
    290160「Repository」の中に「URL of repository」「Checkout directory」とあるので項目を入力します。 
    291  
    292161{{{ 
    293162URL of repository 
    296165Checkout directory 
    297166チェックアウトしたいローカルディレクトリ 
    298 例)\\colinux\co3k\Programming\sns\prj_remove_globals 
     167例)C:\\example\prj_remove_globals 
    299168}}} 
    300169 
    301170OKを押すと、チェックアウトが始まります。[[BR]] 
    302171 
    303 チェックアウトが終了すると、ローカルのprj_remove_globalsディレクトリにソースがコピーされています。 
     172チェックアウトが終了すると、ローカルのprj_remove_globalsディレクトリにソースがコピーされています。[[BR]] 
    304173あとは、このソースコードを修正などしたりし、コミットすれば、branches/work/ebihara/prj_remove_globals/のソースコードが修正されています。[[BR]] 
    305  
    306174コミットとは作業した結果をリポジトリに登録することです。[[BR]] 
    307 フォルダ上で右クリックから「SVN Commit...」メニューを選択し、OKを押せば簡単に作業した結果をリポジトリに反映することができます。 
    308  
    309  
    310   ==== まとめ ==== 
    311   この様に、TortoiseSVNを使用することで、GUIで簡単にブランチの作成、チェックアウト、コミットを行うことができます。[[BR]] 
    312  
    313 今回の事例ではcolinuxを使用していますが、XAMPPなどを用いてWindowsで開発している人でもTortoiseSVNを使用することが出来るの非常に導入しやすく、使いやすいツールだと思います。 
    314  
    315  
    316  === SVNコマンドでブランチを作る方法 === 
    317 次に、SVNコマンドでブランチを作る方法を紹介していきます。 
    318  
    319  
    320   ==== ブランチの作成 ==== 
    321 まずは、作業ディレクトリに移動してください。 
    322  
    323 {{{ 
    324 co3k@colinux:~/Programming/sns$ 
    325 }}} 
    326  
    327  
    328 次に、SVNのsvn copyコマンドを使ってコピーします。[[BR]] 
    329  
    330 svn copyコマンドは半角スペースの後にSVNのコピー元URL、また半角スペースの後に続けてSVNのコピー先URLを指定します。これで、リポジトリのコピーが完了しました。[[BR]] 
    331  
    332  
    333 {{{ 
    334 svn copy SVNのコピー元URL SVNのコピー先URL 
    335  
     175フォルダ上で右クリックから「SVN Commit...」メニューを選択し、OKを押せば簡単に作業した結果をリポジトリに反映することができます。[[BR]] 
     176 
     177==== まとめ ==== 
     178この様に、TortoiseSVNを使用することで、GUIで簡単にブランチの作成、チェックアウト、コミットを行うことができます。[[BR]] 
     179チェックアウトしたソースコードはWindowsのエクスプローラー上で、通常のファイルと同じように扱うことができるので、是非おすすめしたいツールです。 
     180 
     181=== svnコマンドを使った方法 == 
     182svnコマンドを使用するには、Subversionをインストールする必要があります。詳しいインストール方法は割愛しますが、Debian系のデストリビューションであればapt-getコマンド、CentOS系のデストリビューションであれば、yumコマンドで取得できます。 
     183 
     184{{{ 
     185     
     186Debian系 
     187apt-get install subversion 
     188 
     189}}} 
     190 
     191{{{ 
     192 
     193CentOS系 
     194yum install subversion 
     195 
     196}}} 
     197 
     198 
     199 
     200==== ブランチの作成 ==== 
     201svn copyコマンドを使ってブランチを作成します。[[BR]] 
     202レポジトリ上のコピー元URL、コピー先URL(作成したいブランチのURL)を引数として指定します。[[BR]] 
     203{{{ 
    336204例) 
    337 co3k@colinux:~/Programming/sns$ svn copy https://trac.openpne.jp/svn/OpenPNE/tags/stable/OpenPNE-2.10.3/ https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ 
    338  
    339 }}} 
    340  
    341  
    342   ==== チェックアウト ==== 
    343 次に、リポジトリのソースをローカルにチェックアウトします。 
    344 先ほどはcopyコマンドを使用しましたが、チェックアウトはcheckoutコマンドを使用します。チェックアウトしたいディレクトリに移動して、チェックアウトコマンドを実行するだけでそのディレクトリにチェックアウトすることができます。 
    345  
    346 {{{ 
    347 svn checkout SVNのリポジトリURL 
    348  
     205$ svn copy https://trac.openpne.jp/svn/OpenPNE/tags/stable/OpenPNE-2.10.3/ https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ 
     206}}} 
     207 
     208 
     209==== チェックアウト ==== 
     210次に、リポジトリのソースコードをチェックアウトします。[[BR]] 
     211チェックアウトにはsvn coコマンド(svn checkoutコマンドでも可)を使用します。チェックアウトしたいレポジトリのURLと、チェックアウト先のディレクトリを引数に指定します。 
     212{{{ 
    349213例) 
    350 co3k@colinux:~/Programming/sns/ $ svn co https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ prj_remove_globals 
    351 }}} 
    352  
    353   ==== コマンドの説明 ==== 
    354  
    355 SVNにはsvnコマンドと呼ばれるさまざまコマンドがあります。 
    356 詳しくはSVNのヘルプを参照してください。 
    357 SVNのコマンドヘルプ 
     214$ svn co https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ prj_remove_globals 
     215}}} 
     216 
     217==== コマンドの説明 ==== 
     218Subversion には前に使ったもの以外にも様々なコマンドがあります。詳しくはSubversionのヘルプを参照してください。 
     219 
     220 
     221Subversion のコマンドヘルプ 
    358222{{{ 
    359223     
    362226}}} 
    363227 
    364 SVNのコピーコマンドヘルプ 
     228Subversion のコピーコマンドヘルプ 
    365229 
    366230{{{ 
    371235 
    372236 
    373   ==== まとめ ==== 
    374  
    375 SVNコマンドでブランチを作る方法は非常にシンプルでコマンドを覚えればすばやくブランチを作ったりチェックアウトすることが可能になります。[[BR]] 
    376 普段vimなどで開発している人はsvnコマンドを使う方が効率が上がると思います。 
    377 実際、OpenPNE開発者はsvnコマンドを使っている人が多くいます。 
    378    
    379    
    380237== マージ == 
    381238 
    382239マージする方法を説明していきます。[[BR]] 
    383  
    384 マージは直訳すると、「合併する」「融合する」といった意味があります。ここでは、ソースコードとソースコードを融合させることの意味だと考えてください。[[BR]] 
    385 基本的には、先ほどブランチとしてtrunkから派生させたコードをまたtrunkに融合させるという作業をOpenPNEでは使っています。しかし、マージはその他にもさまざまな使い方があります。[[BR]] 
    386  
    387 マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業です。ファイルをそれぞれ変更するのではなく、修正されている箇所だけ取り込みます。 
     240マージを直訳すると、「合併する」「融合する」といった意味なります。つまり、Subversionでは、ソースコードとソースコードを融合させるといった意味になります。マージとは、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業です。[[BR]] 
     241先ほどブランチとしてtrunkから派生させたコードをまたtrunkにマージするなど、様々な作業にマージを活用しています。[[BR]] 
    388242 
    389243それでは、ブランチと同じく、「TortoiseSVNでマージする方法」と「SVNコマンドでマージする方法」のニ種類を紹介します。[[BR]] 
    390 マージにはさまざまな種類がありますが、ここでのマージは、個人のローカル作業用ディレクトリにTrunkの変更箇所をマージする方法を紹介します。 
     244マージにはさまざまな種類がありますが、ここでのマージは、個人のローカル作業用ディレクトリにtrunkの変更箇所をマージする方法を紹介します。 
    391245 
    392246 === TortoiseSVNでマージする方法 === 
    399253 
    400254「Merge...」を選択したらMergeウィンドウが表示されます。 
    401 マージをする上で一番分かりにくい点は、この【From】と【To】だと思います。先ほど、「マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業」述べましたが、それがここと一致します。この【From】と【To】の間で変更された箇所を取り込みます。URLには、取り込みたい先のリビジョンのURLを指定します。 
    402  
    403 {{{ 
    404 From:マージしたい範囲の最初のリビジョン 
     255マージをする上で一番分かりにくい点は、この【From】と【To】だと思います。先ほど、「マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業」述べましたが、それがここと一致します。この【From】と【To】の間で変更された箇所を取り込みます。URLには、取り込みたい先のリビジョンのURLを指定します。 
     256 
     257{{{ 
     258From:マージしたい範囲の最初のリビジョンの一つ手前のリビジョン 
    405259To:マージしたい範囲の最後のリビジョン 
    406260}}} 
    410264この様にFromとTo指定して、Mergeを押すだけで、そのリビジョン間の変更箇所がローカルの作業ディレクトリにマージされます。 
    411265 
    412 ここで悩む人が多いのが一箇所の変更です。一箇所のリビジョンを変更したいときは、その前のリビジョンから変更したいリビジョンをFromとTo指定に指定します。 
    413 例えば、リビジョン5115の修正を取り込みたいときは、画像のように、 
     266ここで悩む人が多いのが「From」の指定です。リビジョン5115の修正を取り込みたいときは、画像のように、 
    414267{{{ 
    415268From:5114 
    416269To:5115 
    417270}}} 
    418  
     271と指定する必要があります。 
    419272 
    420273[[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/13-merge2.png,650)]] 
    421274 
    422275 
    423  
    424  
    425  === SVNコマンドでマージする方法 === 
    426   SVNコマンドでマージする方法を紹介していきます。[[BR]] 
    427   それではTortoiseSVNと同じように、リビジョンを指定して変更箇所をローカルの開発ディレクトリにマージしていきます。 
     276=== SVNコマンドでマージする方法 === 
     277SVNコマンドでマージする方法を紹介していきます。[[BR]] 
     278それではTortoiseSVNと同じように、リビジョンを指定して変更箇所をローカルの開発ディレクトリにマージしていきます。 
    428279 
    429280まずは、作業ディレクトリに移動してください。 
    430281 
    431282{{{ 
    432 co3k@colinux:~/Programming/sns$ 
     283$ cd ./working-directory 
    433284}}} 
    434285 
    435286 
    436287次に、SVNのsvn mergeコマンドを使ってマージします。[[BR]] 
    437  
    438288svn mergeコマンドは下記のように指定します。この-rオプションというのはリビジョン指定をするときには必要なので忘れないように注意が必要です。[[BR]] 
    439289この例を解説すると、trunkの5114から5115の変更点をローカルのprj_remove_globalsディレクトリにマージするという意味になります。 
    442292svn merge -r 最初のリビジョン:最後のリビジョン SVNのURL マージ先のローカルディレクトリ名 
    443293 
    444 例) 
    445 co3k@colinux:~/Programming/sns$ merge -r 5114:5115 https://trac.openpne.jp/svn/OpenPNE/trunk/ prj_remove_globals 
    446 }}} 
    447  
    448  
    449  === 逆マージ === 
    450  OpenPNEの開発ではこの逆マージをよく使います。 
    451  逆マージとはマージの逆をすることで、SVNで誤った操作などをしたときに修正する方法です。[[BR]] 
    452  なぜ、削除ではなく逆マージをするのかというと、記録を残すためです。誰が何をどう変更したかという記録を残すために修正も逆マージをして誰が修正したのかということをログとして残します。[[BR]] 
    453  ここでは、TortoiseSVNを用いた逆マージを紹介します。 
    454  
    455 マージをするときに、「マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業」と説明しましたが、このマージの性質を利用して逆マージを行います。[[BR]] 
    456 逆マージは、FromとToのリビジョンを変えるだけです。[[BR]] 
    457 先ほどのリビジョン5115のマージを失敗して違うところにマージしてしまったというときには。先ほどは、Fromを5114、Toを5115にしていましたが、逆マージはその逆のリビジョンを指定します。 
    458  
    459 {{{ 
    460 From:5115 
    461 To:5114 
    462 }}} 
    463  
    464 この様に、FromとToを逆に指定するだけで、失敗などを取り消す逆マージをすることができます。[[BR]] 
    465 また、svnコマンドを使用した場合の逆マージも同じくFromとToを逆に指定するだけで逆マージをすることができます。 
    466  
    467 (画像 逆マージ) 
    468  
    469  === tags間でのマージ === 
    470   その他にも、OpenPNE開発でよく使われるのがtags間でのマージです。[[BR]] 
    471   このtags間でのマージを使用すると簡単にバージョンアップをすることができて、便利です。[[BR]] 
    472  
    473   例えば、ローカルの開発環境にあるOpenPNE-2.10.3をOpenPNE-2.10.4にバージョンアップしたいときに使用すると、非常に簡単にバージョンを上げることができます。[[BR]] 
    474   それでは実際にOpenPNE-2.10.3をOpenPNE-2.10.4にバージョンアップする方法を見ていきましょう。 
    475  
    476   これまでのマージと同じように、マージしたいディレクトリ上で右クリックしてメニューをだし、Margeウィンドウを出してください。[[BR]] 
    477   先ほどまでのマージでは、リビジョンを指定していましたが、このtags間でのリビジョンは基本的にHEAD Rebisionです。ですので、ラジオボタンがRebisionに指定されている場合はFrom、Toの両方をHEAD Rebisionに変更してください。[[BR]] 
    478   そして、次にURLですが、Fromに前のバージョンのURLを指定し、Toに更新したいバージョンのURLを指定します。[[BR]] 
    479   あとは、通常のマージと同じで、「Merge」ボタンでマージしてください。[[BR]] 
    480  
    481   このとき、Toの「Use"From:"URL(revision range is selectable in the above log dialog)」というチェックボックスが外れていないと、URLを入力できないので注意が必要です。 
    482  
    483 {{{ 
    484  
    485 例) 
    486 From:https://trac.openpne.jp/svn/OpenPNE/tags/stable/OpenPNE-2.10.3/ 
    487 To:https://trac.openpne.jp/svn/OpenPNE/tags/stable/OpenPNE-2.10.4/ 
    488  
    489 }}} 
    490  
    491  
    492 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/14-merge_tags.png,650)]] 
     294$ merge -r 5114:5115 https://trac.openpne.jp/svn/OpenPNE/trunk/ prj_remove_globals 
     295}}}