Changes between Version 30 and Version 31 of pne-book-9-2-note

Show
Ignore:
Author:
imoto (IP: 124.44.163.130)
Timestamp:
02/15/08 20:17:40 (9 years ago)
Comment:

--

Legend:

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

    v30 v31  
    33横幅指定しているので見にくいかも。 
    44 
    5  
    6  
    7 = ブランチとマージ = 
    8  
    9 解説:海老原[[BR]] 
    10  
    11 文:井本 
    12  === 概要 === 
    13 OpenPNE開発では、SVNを用いてソースコードの管理やバグの修正の管理などを行っています。なかでも、これから紹介するブランチとマージはOpenPNE開発において非常に効率よく開発を進める手段として使っています。 
    14  
    15 そこで、今回は、OpenPNE開発で実際に使われているSVNの使い方をOpenPNEのTracを一部参照しながらブランチとマージを紹介していきます。 
    16 {{{ 
    17 OpenPNE開発情報 
    18 http://trac.openpne.jp/ 
    19 }}} 
    20  
    21  === 目次 === 
    22  
    23 == OpenPNEのTrac == 
    24  === 概要 === 
    25 それではまず、OpenPNEのTracを見てみましょう。[[BR]] 
    26 OpenPNEのTrac(http://trac.openpne.jp)にアクセスすると、TracのTOP画面に来ます。 
    27  
    28 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/1-trac-top.jpg,650)]] 
    29  
    30  
    31  
    32  
    33  === root === 
    34 次に、上のグローバルメニューから「Browse Source」をクリックすると、Tracで管理されているOpenPNEのソースを見ることが出来ます。(http://trac.openpne.jp/browser) 
    35 ここはrootディレクトリで一番上にのディレクトリです。 
    36 このrootディレクトリは、大きく分けて二種類のディレクトリ構成になっています。一つ目がOpenPNE本線開発のディレクトリ(/OpenPNE)で、もう一つはOpenPNE本線開発とはことなるプロジェクトです。(NEKOGET_PNESKIN、PNEMonster) 
    37  
    38 {{{ 
    39 root 
    40  
    41 NEKOGET_PNESKIN 
    42 OpenPNE 
    43 OpenPNE_specification 
    44 PNEMonster 
    45 prj 
    46 sandbox 
    47 smtp2pne 
    48 work 
    49 }}} 
    50  
    51  === root/OpenPNE === 
    52 それでは、OpenPNE本線開発のディレクトリを見ていきましょう。[[BR]] 
    53 OpenPNE以下のディレクトリにはbranches、tags、trunkと3つのディレクトリがあります。まず、一番下にあるtrunkはOpenPNE本線開発のメインディレクトリです。基本的に開発版のリリースはこのtrunkでされます。 
    54  
    55 次に、一番上にあるbranchesですが、直訳すると「枝」です。このbranchesは安定したバージョンの開発や、各個人がもっている機能追加やプロジェクトなどに使われている作業用ディレクトリです。[[BR]] 
    56 最後に、tagsはOpenPNEの開発でバージョンを固定した場合にこのディレクトリにソースコードを残しておくためのディレクトリです。 
    57  
    58 {{{ 
    59 root/OpenPNE 
    60  
    61 branches 
    62 tags 
    63 trunk 
    64 }}} 
    65  
    66  === root/OpenPNE/branches === 
    67 まず、一番上にある、branchesから見ていきましょう。[[BR]] 
    68 branchesディレクトリは安定したバージョンの開発や、各個人がもっている機能追加やプロジェクトなどに使われている作業用ディレクトリです。[[BR]] 
    69 主に三種類のディレクトリがあります。[[BR]] 
    70  
    71 {{{ 
    72 prj:プロジェクトとしてチームで開発するためのディレクトリ 
    73 stable-x.x.x:安定版のバグ修正などを行うディレクトリ 
    74 work:個人で行う小さな機能開発を行うディレクトリ 
    75 }}} 
    76  
    77 prjディレクトリとworkディレクトリは基本的には新しい機能の開発に使われるディレクトリです。[[BR]] 
    78 具体的にどのようにprjディレクトリとworkディレクトリが使われているか実際のOpenPNE開発事例を参照しながら説明していきます。[[BR]] 
    79 stable-x.x.xは安定版の機能修正やバグ修正などを行うためのディレクトリです。[[BR]] 
    80 例えば、stable-2.10.0で何かバグが発見されたとします。するとまず、stable-2.10.xディレクトリで発見されたバグなどを修正します。そして、一通り修正が終わったら、tagsディレクトリ(root/OpenPNE/tags)にソースを移して、stable-2.10.1として正式にリリースされます。[[BR]] 
    81 この様に、stable-x.x.xディレクトリでは、安定版のバグ修正などを行う一時的なディレクトリとなります。 
    82  
    83 それでは、具体的にどのようにprjディレクトリとworkディレクトリがどの様に使われているか実際のOpenPNE開発事例を参照しながら説明していきます。 
    84  
    85 {{{ 
    86 root/OpenPNE/branches 
    87  
    88 prj 
    89 stable-2.6.x 
    90 stable-2.8.x 
    91 stable-2.10.x 
    92 work 
    93 }}} 
    94  
    95  
    96  
    97  === root/OpenPNE/branches/prj === 
    98 まず、prjディレクトリから見ていきます。[[BR]] 
    99 現在prjディレクトリには以下のような主要プロジェクトがあります。[[BR]] 
    100  
    101 このprjディレクトリはプロジェクトごとの機能開発に使用されているディレクトリです。ですので、そのプロジェクトに所属しているメンバーであれば基本的に誰でもソースコードを修正することが許されています。 
    102  
    103 現在OpenPNEではOpenIDを外部認証として使うことが出来ます。そのときに開発用ディレクトリとして使用されていたディレクトリがこのprjディレクトリにあるopenidディレクトリです。[[BR]] 
    104 このopenidのディレクトリのリビジョンを見てもらうと分かると思いますが、ogawa、maruyama、ebiharaなど複数の人でチームを組んでOpenIDの機能開発を行っていたことが分かります。 
    105  
    106  
    107 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/2-openid.jpg,650)]] 
    108  
    109 この様に、prjディレクトリは複数人で行う大きな機能追加や機能修正をプロジェクトとしてこのディレクトリで管理しています。 
    110  
    111 {{{ 
    112 root/OpenPNE/branches/prj 
    113  
    114 openid 
    115 opensocial 
    116 pne-api 
    117 slavepne2 
    118 xhtmlcss 
    119  
    120  
    121  
    122 }}} 
    123  
    124  === root/OpenPNE/branches/work === 
    125  
    126 次に、workディレクトリを見ていきましょう。 
    127 まず、このディレクトリを見て分かるのは個人名が多いということです。基本的にこのworkディレクトリは個人で行う小さな機能開発を行うディレクトリです。 
    128 ですので個人が比較的自由にこのディレクトリを使うことが出来るので、小さな機能開発以外にも、OpenPNEで追加してみたい実験的な機能開発や、プロジェクトの機能開発だがprjにソースをマージ(あとで説明)させるほど完成度が高くないソースをここで改良するなどの使い方があります。 
    129 prjディレクトリにあったxhtmlcssディレクトリはこのworkディレクトリである程度開発したあとで、prjディレクトリに移動したという経緯があります。 
    130 また、workディレクトリは基本的には各個人のディレクトリですので、他の人がソースを書き換えるということはありません。 
    131  
    132 {{{ 
    133 root/OpenPNE/branches/work 
    134  
    135 ebihara 
    136 imoto 
    137 ishida 
    138 kimura 
    139 kiwa 
    140 ogawa 
    141  
    142  
    143  
    144 }}} 
    145  
    146 例として、work以下のebiharaディレクトリを見てみます。[[BR]] 
    147 主にebiharaディレクトリでは、プロジェクトに移す前段階でのソースコードを管理しています。ディレクトリのprj_というのは「プロジェクトに移行させるためのディレクトリですよ」ということを表しています。[[BR]] 
    148 現在はすべてprj_がついたディレクトリ名ですが、個人的にOpenPNEに取り込んで欲しい機能などがあれば分かりやすい機能名のディレクトリを作って開発することもあります。[[BR]] 
    149 prj_dashboadというディレクトリは主にダッシュボード改善プロジェクトの個人開発用として作ったディレクトリです。ダッシュボード改善プロジェクトというプロジェクトが立ち上がった段階でまず、このebiharaディレクトリにprj_dashboadというディレクトリを作ります。ここである程度ソースコードが完成した段階で、prjにソースコードを移してプロジェクトを進めています。[[BR]] 
    150  
    151 リビジョンを見てもらうと分かると思いますが、ここはebiharaディレクトリで、ebiharaが管理しているので、修正は基本的にebiharaしか行っていません。[[BR]] 
    152  
    153 {{{ 
    154 root/OpenPNE/branches/work/ebihara 
    155  
    156 prj_auth_container_mybox 
    157 prj_dashboad 
    158 prj_debug_2_6_7 
    159 prj_dev26_bizfix 
    160 prj_dev28_bizfix 
    161  
    162  
    163  
    164 }}} 
    165  
    166 この様に、prjとworkにはプロジェクトで開発するか個人で開発するかかという大きな特徴があります。 
    167 この特徴に注目しながらtrac.openpne.jpを見ていただけると、「お!この機能はプロジェクトとして動いてるんだ」「この機能はogawaさんが個人で開発しているけど本線に取り込まれるのかな」などまたOpenPNEの最新の動向と今後の方向性も見えてくるかも知れません。 
    168  
    169 == ブランチ == 
    170  === 概要 === 
    171 それでは、OpenPNE開発ではどのようにしてブランチを作っているか、どのような方法でブランチを作っているかを実際にブランチを作りながら紹介します。 
    172 現在、OpenPNE開発者は主に二種類の方法でブランチを作っています。二種類の方法とは「TortoiseSVNでブランチを作る方法」と「SVNコマンドでブランチを作る方法」です。 
    173 OpenPNE開発者には、Eclipseなどの開発環境を使っている人もいますし、vimなどを使ってコマンドラインで開発している人もいます。ですので、それぞれに適したブランチの作り方があります。 
    174 そこでこの章ではWindowsクライアントであるTortoiseSVNでブランチを作る方法とsvnコマンドでブランチを作る方法の二種類の方法を紹介するので、ぜひ環境に合わせて使いやすい方法でブランチを作ってみてください。 
    175  
    176 今回、Subversionの詳しいインストールは割愛しますが、 
    177 Debian系であればapt-get、CentOS系であれば、yumで取得できると思います。 
    178 {{{ 
    179 Debian系 
    180 apt-get install subversion 
    181 }}} 
    182  
    183 {{{ 
    184 CentOS系 
    185 yum install subversion 
    186 }}} 
    187 詳しくは、マニュアルを参照してください。 
    188 {{{ 
    189 Debian ユーザ文書 
    190 http://www.debian.org/doc/index.ja.html 
    191  
    192 CentOS Documentation 
    193 http://www.centos.org/docs/ 
    194 }}} 
    195  
    196  === TortoiseSVNでブランチを作る方法 === 
    197   ==== 概要、前提条件(TortoiseSVNのインストール) ==== 
    198 「TortoiseSVNでブランチを作る方法」では、TortoiseSVNというSubversionのWindowsクライアントソフトを使用します。ですので、ここではTortoiseSVNがインストールされていることを前提条件としています。まだインストールをされていない人はTortoiseSVNの日本語翻訳マニュアルがあるのでそちらを参考にしてインストールしてください。 
    199  
    200 {{{ 
    201 TortoiseSVN Subversion クライアント for Windows 
    202 http://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/index.html 
    203 }}} 
    204  
    205   ==== ブランチの作成 ==== 
    206 それでは早速ブランチの作成に入ります。 
    207 今回はroot/OpenPNE/branches/work/ebihara以下に個人用ブランチを実際に作りながら、説明していきます。 
    208  
    209 {{{ 
    210 root/OpenPNE/branches/work/ebihara 
    211  
    212 prj_auth_container_mybox 
    213 prj_dashboad 
    214 prj_debug_2_6_7 
    215 prj_dev26_bizfix 
    216 prj_dev28_bizfix 
    217  
    218  
    219  
    220 }}} 
    221  
    222  
    223 例として、ここにOpenPNEグローバル変数改善プロジェクトを作っていくことにします。 
    224  
    225 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/3-drectory.png,650)]] 
    226  
    227 まず、ローカル環境でOpenPNEのソースをコピーしてきたいディレクトリに移動します。[[BR]] 
    228 次に、そのディレクトリで右クリックして、メニューの中から「Repo-browser」をクリックします。[[BR]] 
    229 ※ディレクトリを移動しなくても右クリックでメニューが出ますが後にその場所にチェックアウト(ソースのダウンロード)することになるので移動しておいたほうがいいと思います。 
    230  
    231  
    232 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/4-repo.png,650)]] 
    233  
    234 クリック後に、URLというウィンドウが出てくるので、そのURL欄にSVNのURLを入力します。 
    235  
    236 {{{ 
    237 https://trac.openpne.jp/svn/ 
    238 }}} 
    239  
    240 入力後に「Repository Browser」という新しいウィンドウが開きSVNを見ることが出来る様になります。[[BR]] 
    241  
    242 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/5-repo2.png,650)]] 
    243  
    244  
    245 次に、OpenPNEの最新安定版からブランチを作ります。[[BR]] 
    246  
    247 現在OpenPNEプロジェクトでは、タグ(OpenPNE/tags)からブランチを作ることを推奨しているので今回はOpenPNE/tags/stable/OpenPNE-2.10.3からブランチを作ることにします。OpenPNE-2.10.3上で、右クリックをすると、下記の画像のようなメニューが表示されるので、今回は「Copy to...」を選択します。[[BR]] 
    248  
    249  
    250 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/6-copy_to.png,650)]] 
    251  
    252  
    253 この「Copy to...」を選択したら、「New name:」という入力フォームが出るのでコピー先を指定します。[[BR]] 
    254  
    255 今回は、workディレクトリ以下のebiharaディレクトリに作業用ディレクトリ(prj_remove_globals)を作るので下記のURLを指定して「OK」ボタンを押します。[[BR]] 
    256  
    257 Logが出るのでprj_remove_globalsを追加したメッセージを残します。[[BR]] 
    258  
    259 このログを残したら、prj_remove_globalsディレクトリが作成され、OpenPNE-2.10.3のソースコードがコピーされています。[[BR]] 
    260  
    261 指定したバージョンがコピーされているか不安な場合はwebapp/version.phpを開いてOPENPNE_VERSIONを確認してみるといいと思います。[[BR]] 
    262  
    263  
    264 {{{ 
    265 https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ 
    266 }}} 
    267  
    268 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/7-input_url.png,650)]] 
    269  
    270 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/8-url.png,650)]] 
    271  
    272 {{{ 
    273 <?php define('OPENPNE_VERSION', '2.10.3'); ?> 
    274 }}} 
    275  
    276  
    277   ==== チェックアウト ==== 
    278 これで、SVN上ではブランチを作ることが出来ました。[[BR]] 
    279  
    280 後は、このSVN上にあるソースコードを先ほどのローカルディレクトリに移動してチェックアウトします。[[BR]] 
    281  
    282 チェックアウトとは、 Subversionリポジトリ上で管理されたファイルをローカルファイルに取得する作業のことです。[[BR]] 
    283  
    284 それではチェックアウトしていきます。[[BR]] 
    285  
    286 まず、チェックアウトしたいローカルディレクトリに移動して、右クリックでメニューを表示し、「SVN Checkout...」をクリックします。[[BR]] 
    287  
    288 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/9-checkout_migi.png,650)]] 
    289  
    290 クリックすると、Caeckoutという新しいウィンドウが表示されます。[[BR]] 
    291  
    292 「Repository」の中に「URL of repository」「Checkout directory」とあるので項目を入力します。 
    293  
    294 {{{ 
    295 URL of repository 
    296 リポジトリのURL 
    297 例)https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ 
    298 Checkout directory 
    299 チェックアウトしたいローカルディレクトリ 
    300 例)\\colinux\co3k\Programming\sns\prj_remove_globals 
    301 }}} 
    302  
    303 OKを押すと、チェックアウトが始まります。[[BR]] 
    304  
    305 チェックアウトが終了すると、ローカルのprj_remove_globalsディレクトリにソースがコピーされています。 
    306 あとは、このソースコードを修正などしたりし、コミットすれば、branches/work/ebihara/prj_remove_globals/のソースコードが修正されています。[[BR]] 
    307  
    308 コミットとは作業した結果をリポジトリに登録することです。[[BR]] 
    309 フォルダ上で右クリックから「SVN Commit...」メニューを選択し、OKを押せば簡単に作業した結果をリポジトリに反映することが出来ます。 
    310  
    311  
    312   ==== コメント ==== 
    313   この様に、TortoiseSVNを使用することで、GUIで簡単にブランチの作成、チェックアウト、コミットを行うことが出来ます。[[BR]] 
    314  
    315 今回の事例ではcolinuxを使用していますが、XAMPPなどを用いてWindowsで開発している人でもTortoiseSVNを使用することが出来るの非常に導入しやすく、使いやすいツールだと思います。 
    316  
    317  
    318  === SVNコマンドでブランチを作る方法 === 
    319   ==== 概要 ==== 
    320 次に、SVNコマンドでブランチを作る方法を紹介していきます。 
    321  
    322  
    323   ==== ブランチの作成 ==== 
    324 まずは、作業ディレクトリに移動してください。 
    325  
    326 {{{ 
    327 co3k@colinux:~/Programming/sns$ 
    328 }}} 
    329  
    330  
    331 次に、SVNのsvn copyコマンドを使ってコピーします。[[BR]] 
    332  
    333 svn copyコマンドは半角スペースの後にSVNのコピー元URL、また半角スペースの後に続けてSVNのコピー先URLを指定します。これで、リポジトリのコピーが完了しました。[[BR]] 
    334  
    335  
    336 {{{ 
    337 svn copy SVNのコピー元URL SVNのコピー先URL 
    338  
    339 例) 
    340 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/ 
    341 }}} 
    342  
    343  
    344   ==== チェックアウト ==== 
    345 次に、リポジトリのソースをローカルにチェックアウトします。 
    346 先ほどはcopyコマンドを使いましたが、チェックアウトはcheckoutコマンドを使用します。チェックアウトしたいディレクトリに移動して、チェックアウトコマンドを実行するだけでそのディレクトリにチェックアウトすることが出来ます。 
    347  
    348 {{{ 
    349 svn checkout SVNのリポジトリURL 
    350  
    351 例) 
    352 co3k@colinux:~/Programming/sns/ $ svn co https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ prj_remove_globals 
    353 }}} 
    354  
    355   ==== コマンドの説明 ==== 
    356  
    357 SVNにはsvnコマンドと呼ばれるさまざまコマンドがあります。 
    358 詳しくはSVNのヘルプを参照してください。 
    359 SVNのコマンドヘルプ 
    360 {{{ 
    361 svn --help 
    362 }}} 
    363  
    364 SVNのコピーコマンドヘルプ 
    365  
    366 {{{ 
    367 svn copy --help 
    368 }}} 
    369  
    370  
    371   ==== コメント ==== 
    372  
    373 SVNコマンドでブランチを作る方法は非常にシンプルでコマンドを覚えればすばやくブランチを作ったりチェックアウトすることが可能になります。[[BR]] 
    374 普段vimなどで開発している人はsvnコマンドを使う方が効率が上がると思います。 
    375 実際、OpenPNE開発者はsvnコマンドを使っている人が多くいます。 
    376    
    377 == マージ == 
    378  === 概要 === 
    379  
    380 マージする方法を説明していきます。[[BR]] 
    381  
    382 マージは直訳すると、「合併する」「融合する」といった意味がありますが、ここでは、ソースコードとソースコードを融合させることをいいます。[[BR]] 
    383 基本的には、先ほどブランチとしてtrunkから派生させたコードをまたtrunkに融合させるという作業をOpenPNEでは使っています。しかし、マージはその他にもさまざまな使い方があります。[[BR]] 
    384 例えば、2.10.0から派生した個人作業ディレクトリのブランチでのんびり機能追加を開発していたが、trunkが2.11.6になっていたときに、その追加機能をtrunkに取り込んでも動かないということがないように、ある程度trunkの開発が進んだときに、個人作業ディレクトリにtrunkをマージさせておけばtrunkにマージさせたときに現在のtrunkのバージョンと相性が悪いから動かないということがなくなります。 
    385  
    386 マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業になります。ファイルをそれぞれ変更するのではなく、修正されている箇所だけ取り込むという作業です。 
    387  
    388 それでは、ブランチと同じく、「TortoiseSVNでマージする方法」と「SVNコマンドでマージする方法」の2種類を紹介します。[[BR]] 
    389 マージにはさまざまな種類がありますが、ここでのマージは、個人のローカル作業用ディレクトリにTrunkの変更箇所をマージする方法を紹介します。 
    390  
    391  === TortoiseSVNでマージする方法 === 
    392   ==== 概要 ==== 
    393   ==== マージ ==== 
    394 まず、TortoiseSVNでマージする方法ですが、先ほどのブランチでの使い方同様TortoiseSVNのメニューは右クリックをすることでメニューを開くことが出来ます。 
    395 今回はマージさせたいディレクトリの上で、右クリックをし、「TortoiseSVN」を選択し「Merge...」を選択します。 
    396  
    397 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/11-merge_migi.png,650)]] 
    398  
    399 「Merge...」を選択したらMergeウィンドウが表示されます。 
    400 マージをする上で一番分かりにくい点は、このFromとToだと思います。先ほど、「マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業」の述べましたが、それがここと一致します。このFromとToの間で変更された箇所を取り込みます。URLには、取り込みたい先のリビジョンのURLを指定します。 
    401  
    402 {{{ 
    403 From:マージしたい範囲の最初のリビジョン 
    404 To:マージしたい範囲の最後のリビジョン 
    405 }}} 
    406  
    407 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/12-merge.png,650)]] 
    408  
    409 この様にFromとTo指定して、Mergeを押すだけで、そのリビジョン間の変更箇所がローカルの作業ディレクトリにマージされます。 
    410  
    411 ここで悩む人が多いのが一箇所の変更です。一箇所のリビジョンを変更したいときは、その前のリビジョンから変更したいリビジョンをFromとTo指定に指定します。 
    412 例えば、リビジョン5115の修正を取り込みたいときは、画像のように、 
    413 {{{ 
    414 From:5114 
    415 To:5115 
    416 }}} 
    417  
    418  
    419 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/13-merge2.png,650)]] 
    420  
    421  
    422  
    423  
    424  === SVNコマンドでマージする方法 === 
    425   ==== 概要 ==== 
    426   SVNコマンドでマージする方法を紹介していきます。[[BR]] 
    427   それではTortoiseSVNと同じように、リビジョンを指定して変更箇所をローカルの開発ディレクトリにマージしていきます。 
    428  
    429   ==== マージ ==== 
    430  
    431 まずは、作業ディレクトリに移動してください。 
    432  
    433 {{{ 
    434 co3k@colinux:~/Programming/sns$ 
    435 }}} 
    436  
    437  
    438 次に、SVNのsvn mergeコマンドを使ってマージします。[[BR]] 
    439  
    440 svn mergeコマンドは下記のように指定します。この-rオプションというのはリビジョン指定をするときには必要なので忘れない様に注意が必要です。[[BR]] 
    441 この例を解説すると、trunkの5114から5115の変更点をローカルのprj_remove_globalsディレクトリにマージするという意味になります。 
    442  
    443 {{{ 
    444 svn merge -r 最初のリビジョン:最後のリビジョン SVNのURL マージ先のローカルディレクトリ名 
    445  
    446 例) 
    447 co3k@colinux:~/Programming/sns$ merge -r 5114:5115 https://trac.openpne.jp/svn/OpenPNE/trunk/ prj_remove_globals 
    448 }}} 
    449  
    450  
    451  
    452  === 逆マージ === 
    453   ==== 概要 ==== 
    454 逆マージとはマージの逆をすることで、SVNで誤った操作などをしたときに修正する方法です。[[BR]] 
    455 なぜ、削除ではなく逆マージをするのかというと、記録を残すためです。誰が何をどう変更したかという記録を残すために修正も逆マージをして誰が修正したのかということをログとして残します。[[BR]] 
    456 ここでは、TortoiseSVNを用いた逆マージを紹介します。 
    457   ==== マージ==== 
    458  
    459  
    460 マージをするときに、「マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業」と説明しましたが、このマージの性質を利用して逆マージを行います。[[BR]] 
    461 逆マージは、FromとToのリビジョンを変えるだけです。[[BR]] 
    462 先ほどのリビジョン5115のマージを失敗して違うところにマージしてしまったというときには。先ほどは、Fromを5114、Toを5115にしていましたが、逆マージはその逆のリビジョンを指定します。 
    463  
    464 {{{ 
    465 From:5115 
    466 To:5114 
    467 }}} 
    468  
    469 この様に、FromとToを逆に指定するだけで、失敗などを取り消す逆マージをすることが出来ます。[[BR]] 
    470 また、svnコマンドを使用した場合の逆マージも同じくFromとToを逆に指定するだけで逆マージをすることが出来ます。 
    471  
    472 (画像 逆マージ) 
    473  
    474  
    475  
    476  === tags間でのマージ === 
    477   ==== 概要 ==== 
    478   その他にも、OpenPNE開発でよく使われるのがtags間でのマージです。[[BR]] 
    479   簡単にバージョンアップをすることが出来て、便利な機能です。[[BR]] 
    480  
    481     例えば、ローカルの開発環境にあるOpenPNE-2.10.3をOpenPNE-2.10.4にバージョンアップしたいときに使用すると、非常に簡単にバージョンを上げることが出来ます。[[BR]] 
    482   それでは実際にOpenPNE-2.10.3をOpenPNE-2.10.4にバージョンアップする方法を見ていきましょう。 
    483  
    484   ==== マージ ==== 
    485   これまでのマージと同じように、マージしたいディレクトリ上で右クリックしてメニューをだし、Margeウィンドウを出してください。[[BR]] 
    486   先ほどまでは、リビジョンを指定していましたが、このtags間でのリビジョンは基本的にHEAD Rebisionです。ですので、ラジオボタンがRebisionに指定されている場合はFrom、To共にHEAD Rebisionに変更してください。[[BR]] 
    487   そして、次にURLですが、Fromに前のバージョンのURLを指定し、Toに更新したいバージョンのURLを指定します。[[BR]] 
    488   あとは、普通のマージと同じで、「Merge」ボタンでマージしてください。[[BR]] 
    489  
    490   このとき、Toの「Use"From:"URL(revision range is selectable in the above log dialog)」というチェックボックスが外れていないと、URLを入力できないので注意が必要です。 
    491    
    492 {{{ 
    493 例) 
    494 From:https://trac.openpne.jp/svn/OpenPNE/tags/stable/OpenPNE-2.10.3/ 
    495 To:https://trac.openpne.jp/svn/OpenPNE/tags/stable/OpenPNE-2.10.4/ 
    496 }}} 
    497  
    498  
    499 [[Image(https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-2/14-merge_tags.png,650)]] 
    500  
    501 == まとめ ==