ここの情報は古いです。ご理解頂いた上でお取り扱いください。

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


Ignore:
Timestamp:
Mar 31, 2008, 8:33:28 PM (14 years ago)
Author:
ebihara
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}}}