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

Changes between Version 8 and Version 9 of pne-book-9-2-note


Ignore:
Timestamp:
Feb 14, 2008, 9:05:11 PM (12 years ago)
Author:
imoto
Comment:

--

Legend:

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

    v8 v9  
    1 = ブランチとマージ概要 =
     1= ブランチとマージ概要 [[BR]]
     2=[[BR]]
     3
    24解説:海老原
    35文:井本
     
    4244
    4345 === root/OpenPNE ===
     46それでは、OpenPNE本線開発のディレクトリを見ていきましょう。[[BR]]
     47OpenPNE以下のディレクトリにはbranches、tags、trunkと3つのディレクトリがあります。まず、一番下にあるtrunkはOpenPNE本線開発のメインディレクトリです。基本的に開発版のリリースはこのtrunkでされます。
     48
     49次に、一番上にあるbranchesですが、直訳すると「枝」です。このbranchesは安定したバージョンの開発や、各個人がもっている機能追加やプロジェクトなどに使われている作業用ディレクトリです。[[BR]]
     50最後に、tagsはOpenPNEの開発でバージョンを固定した場合にこのディレクトリにソースコードを残しておくためのディレクトリです。
     51
     52{{{
     53root/OpenPNE
     54
     55branches
     56tags
     57trunk
     58}}}
     59
    4460 === root/OpenPNE/branches ===
    45   ==== root/OpenPNE/branches/prj ====
    46   ==== root/OpenPNE/branches/prj ====
     61まず、一番上にある、branchesから見ていきましょう。[[BR]]
     62branchesディレクトリは安定したバージョンの開発や、各個人がもっている機能追加やプロジェクトなどに使われている作業用ディレクトリです。[[BR]]
     63主に三種類のディレクトリがあります。[[BR]]
     64
     65{{{
     66prj:プロジェクトとしてチームで開発するためのディレクトリ
     67stable-x.x.x:安定版のバグ修正などを行うディレクトリ
     68work:個人で行う小さな機能開発を行うディレクトリ
     69}}}
     70
     71prjディレクトリとworkディレクトリは基本的には新しい機能の開発に使われるディレクトリです。[[BR]]
     72具体的にどのようにprjディレクトリとworkディレクトリが使われているか実際のOpenPNE開発事例を参照しながら説明していきます。[[BR]]
     73stable-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{{{
     80root/OpenPNE/branches
     81
     82prj
     83stable-2.6.x
     84stable-2.8.x
     85stable-2.10.x
     86work
     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
     100(画像必要??)
     101
     102この様に、prjディレクトリは複数人で行う大きな機能追加や機能修正をプロジェクトとしてこのディレクトリで管理しています。
     103
     104{{{
     105root/OpenPNE/branches/prj
     106
     107openid
     108opensocial
     109pne-api
     110slavepne2
     111xhtmlcss
     112
     113
     114
     115}}}
     116
     117 === root/OpenPNE/branches/work ===
     118
     119次に、workディレクトリを見ていきましょう。
     120まず、このディレクトリを見て分かるのは個人名が多いということです。基本的にこのworkディレクトリは個人で行う小さな機能開発を行うディレクトリです。
     121ですので個人が比較的自由にこのディレクトリを使うことが出来るので、小さな機能開発以外にも、OpenPNEで追加してみたい実験的な機能開発や、プロジェクトの機能開発だがprjにソースをマージ(あとで説明)させるほど完成度が高くないソースをここで改良するなどの使い方があります。
     122prjディレクトリにあったxhtmlcssディレクトリはこのworkディレクトリである程度開発したあとで、prjディレクトリに移動したという経緯があります。
     123また、workディレクトリは基本的には各個人のディレクトリですので、他の人がソースを書き換えるということはありません。
     124
     125{{{
     126root/OpenPNE/branches/work
     127
     128ebihara
     129imoto
     130ishida
     131kimura
     132kiwa
     133ogawa
     134
     135
     136
     137}}}
     138
     139例として、work以下のebiharaディレクトリを見てみます。[[BR]]
     140主にebiharaディレクトリでは、プロジェクトに移す前段階でのソースコードを管理しています。ディレクトリのprj_というのは「プロジェクトに移行させるためのディレクトリですよ」ということを表しています。[[BR]]
     141現在はすべてprj_がついたディレクトリ名ですが、個人的にOpenPNEに取り込んで欲しい機能などがあれば分かりやすい機能名のディレクトリを作って開発することもあります。[[BR]]
     142prj_dashboadというディレクトリは主にダッシュボード改善プロジェクトの個人開発用として作ったディレクトリです。ダッシュボード改善プロジェクトというプロジェクトが立ち上がった段階でまず、このebiharaディレクトリにprj_dashboadというディレクトリを作ります。ここである程度ソースコードが完成した段階で、prjにソースコードを移してプロジェクトを進めています。[[BR]]
     143
     144リビジョンを見てもらうと分かると思いますが、ここはebiharaディレクトリで、ebiharaが管理しているので、修正は基本的にebiharaしか行っていません。[[BR]]
     145
     146{{{
     147root/OpenPNE/branches/work/ebihara
     148
     149prj_auth_container_mybox
     150prj_dashboad
     151prj_debug_2_6_7
     152prj_dev26_bizfix
     153prj_dev28_bizfix
     154
     155
     156
     157}}}
     158
     159この様に、prjとworkにはプロジェクトで開発するか個人で開発するかかという大きな特徴があります。
     160この特徴に注目しながらtrac.openpne.jpを見ていただけると、「お!この機能はプロジェクトとして動いてるんだ」「この機能はogawaさんが個人で開発しているけど本線に取り込まれるのかな」などまたOpenPNEの最新の動向と今後の方向性も見えてくるかも知れません。
     161
    47162== ブランチ ==
    48163 === 概要 ===
     164それでは、OpenPNE開発ではどのようにしてブランチを作っているか、どのような方法でブランチを作っているかを実際にブランチを作りながら紹介します。
     165現在、OpenPNE開発者は主に二種類の方法でブランチを作っています。二種類の方法とは「TortoiseSVNでブランチを作る方法」と「SVNコマンドでブランチを作る方法」です。
     166OpenPNE開発者には、Eclipseなどの開発環境を使っている人もいますし、vimなどを使ってコマンドラインで開発している人もいます。ですので、それぞれに適したブランチの作り方があります。
     167そこでこの章ではWindowsクライアントであるTortoiseSVNでブランチを作る方法とsvnコマンドでブランチを作る方法の二種類の方法を紹介するので、ぜひ環境に合わせて使いやすい方法でブランチを作ってみてください。
     168
     169今回、Subversionの詳しいインストールは割愛しますが、
     170Debian系であればapt-get、CentOS系であれば、yumで取得できると思います。
     171{{{
     172Debian系
     173apt-get install subversion
     174}}}
     175
     176{{{
     177CentOS系
     178yum install subversion
     179}}}
     180詳しくは、マニュアルを参照してください。
     181{{{
     182Debian ユーザ文書
     183http://www.debian.org/doc/index.ja.html
     184
     185CentOS Documentation
     186http://www.centos.org/docs/
     187}}}
     188
    49189 === TortoiseSVNでブランチを作る方法 ===
    50190  ==== 概要、前提条件(TortoiseSVNのインストール) ====
     191「TortoiseSVNでブランチを作る方法」では、TortoiseSVNというSubversionのWindowsクライアントソフトを使用します。ですので、ここではTortoiseSVNがインストールされていることを前提条件としています。まだインストールをされていない人はTortoiseSVNの日本語翻訳マニュアルがあるのでそちらを参考にしてインストールしてください。
     192
     193{{{
     194TortoiseSVN Subversion クライアント for Windows
     195http://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/index.html
     196}}}
     197
    51198  ==== ブランチの作成 ====
     199それでは早速ブランチの作成に入ります。
     200今回はroot/OpenPNE/branches/work/ebihara以下に個人用ブランチを実際に作りながら、説明していきます。
     201
     202{{{
     203root/OpenPNE/branches/work/ebihara
     204
     205prj_auth_container_mybox
     206prj_dashboad
     207prj_debug_2_6_7
     208prj_dev26_bizfix
     209prj_dev28_bizfix
     210
     211
     212
     213}}}
     214
     215
     216例として、ここにOpenPNEグローバル変数改善プロジェクトを作っていくことにします。
     217
     218(ローカルの個人ディレクトリの画像)
     219
     220まず、ローカル環境でOpenPNEのソースをコピーしてきたいディレクトリに移動します。[[BR]]
     221次に、そのディレクトリで右クリックして、メニューの中から「Repo-browser」をクリックします。[[BR]]
     222※ディレクトリを移動しなくても右クリックでメニューが出ますが後にその場所にチェックアウト(ソースのダウンロード)することになるので移動しておいたほうがいいと思います。
     223
     224(レポブラウザの画像)
     225
     226クリック後に、URLというウィンドウが出てくるので、そのURL欄にSVNのURLを入力します。
     227
     228{{{
     229https://trac.openpne.jp/svn/
     230}}}
     231
     232入力後に「Repository Browser」という新しいウィンドウが開きSVNを見ることが出来る様になります。[[BR]]
     233
     234
     235(Repository Browserの画像)
     236
     237次に、OpenPNEの最新安定版からブランチを作ります。[[BR]]
     238
     239現在OpenPNEプロジェクトでは、タグ(OpenPNE/tags)からブランチを作ることを推奨しているので今回はOpenPNE/tags/stable/OpenPNE-2.10.3からブランチを作ることにします。OpenPNE-2.10.3上で、右クリックをすると、下記の画像のようなメニューが表示されるので、今回は「Copy to...」を選択します。[[BR]]
     240
     241
     242(Copy to...の画像)
     243
     244
     245この「Copy to...」を選択したら、「New name:」という入力フォームが出るのでコピー先を指定します。[[BR]]
     246
     247今回は、workディレクトリ以下のebiharaディレクトリに作業用ディレクトリ(prj_remove_globals)を作るので下記のURLを指定して「OK」ボタンを押します。[[BR]]
     248
     249Logが出るのでprj_remove_globalsを追加したメッセージを残します。[[BR]]
     250
     251このログを残したら、prj_remove_globalsディレクトリが作成され、OpenPNE-2.10.3のソースコードがコピーされています。[[BR]]
     252
     253指定したバージョンがコピーされているか不安な場合はwebapp/version.phpを開いてOPENPNE_VERSIONを確認してみるといいと思います。[[BR]]
     254
     255
     256{{{
     257https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/
     258}}}
     259
     260(URL指定の画像)
     261(確認の画像)
     262
     263{{{
     264<?php define('OPENPNE_VERSION', '2.10.3'); ?>
     265}}}
     266
     267
    52268  ==== チェックアウト ====
    53   ==== TortoiseSVNを使うメリット ====
    54  
     269これで、SVN上ではブランチを作ることが出来ました。[[BR]]
     270
     271後は、このSVN上にあるソースコードを先ほどのローカルディレクトリに移動してチェックアウトします。[[BR]]
     272
     273チェックアウトとは、 Subversionリポジトリ上で管理されたファイルをローカルファイルに取得する作業のことです。[[BR]]
     274
     275それではチェックアウトしていきます。[[BR]]
     276
     277まず、チェックアウトしたいローカルディレクトリに移動して、右クリックでメニューを表示し、「SVN Checkout...」をクリックします。[[BR]]
     278
     279
     280(チェックアウトの画像)
     281
     282クリックすると、Caeckoutという新しいウィンドウが表示されます。[[BR]]
     283
     284「Repository」の中に「URL of repository」「Checkout directory」とあるので項目を入力します。
     285
     286{{{
     287URL of repository
     288リポジトリのURL
     289例)https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/
     290Checkout directory
     291チェックアウトしたいローカルディレクトリ
     292例)\\colinux\co3k\Programming\sns\prj_remove_globals
     293}}}
     294
     295OKを押すと、チェックアウトが始まります。[[BR]]
     296
     297チェックアウトが終了すると、ローカルのprj_remove_globalsディレクトリにソースがコピーされています。
     298あとは、このソースコードを修正などしたりし、コミットすれば、branches/work/ebihara/prj_remove_globals/のソースコードが修正されています。[[BR]]
     299
     300コミットとは作業した結果をリポジトリに登録することです。[[BR]]
     301フォルダ上で右クリックから「SVN Commit...」メニューを選択し、OKを押せば簡単に作業した結果をリポジトリに反映することが出来ます。
     302
     303
     304  ==== コメント ====
     305  この様に、TortoiseSVNを使用することで、GUIで簡単にブランチの作成、チェックアウト、コミットを行うことが出来ます。[[BR]]
     306
     307今回の事例ではcolinuxを使用していますが、XAMPPなどを用いてWindowsで開発している人でもTortoiseSVNを使用することが出来るの非常に導入しやすく、使いやすいツールだと思います。
     308
     309
    55310 === SVNコマンドでブランチを作る方法 ===
    56311  ==== 概要 ====
     312次に、SVNコマンドでブランチを作る方法を紹介していきます。
     313
     314
    57315  ==== ブランチの作成 ====
     316まずは、作業ディレクトリに移動してください。
     317
     318{{{
     319co3k@colinux:~/Programming/sns$
     320}}}
     321
     322
     323次に、SVNのsvn copyコマンドを使ってコピーします。[[BR]]
     324
     325svn copyコマンドは半角スペースの後にSVNのコピー元URL、また半角スペースの後に続けてSVNのコピー先URLを指定します。これで、リポジトリのコピーが完了しました。[[BR]]
     326
     327
     328{{{
     329svn copy SVNのコピー元URL SVNのコピー先URL
     330
     331例)
     332co3k@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/
     333}}}
     334
     335
    58336  ==== チェックアウト ====
     337次に、リポジトリのソースをローカルにチェックアウトします。
     338先ほどはcopyコマンドを使いましたが、チェックアウトはcheckoutコマンドを使用します。チェックアウトしたいディレクトリに移動して、チェックアウトコマンドを実行するだけでそのディレクトリにチェックアウトすることが出来ます。
     339
     340{{{
     341svn checkout SVNのリポジトリURL
     342
     343例)
     344co3k@colinux:~/Programming/sns/ $ svn co https://trac.openpne.jp/svn/OpenPNE/branches/work/ebihara/prj_remove_globals/ prj_remove_globals
     345}}}
     346
    59347  ==== コマンドの説明 ====
     348
     349SVNにはsvnコマンドと呼ばれるさまざまコマンドがあります。
     350詳しくはSVNのヘルプを参照してください。
     351{{{
     352svn --help
     353}}
     354SVNのコピーコマンドのヘルプ
     355{{{
     356svn copy --help
     357}}}
     358
     359
     360  ==== コメント ====
     361
     362SVNコマンドでブランチを作る方法は非常にシンプルでコマンドを覚えればすばやくブランチを作ったりチェックアウトすることが可能になります。[[BR]]
     363普段vimなどで開発している人はsvnコマンドを使う方が効率が上がると思います。
     364実際、OpenPNE開発者はsvnコマンドを使っている人が多くいます。
    60365 
    61366== マージ ==
    62367 === 概要 ===
     368
     369マージする方法を説明していきます。[[BR]]
     370
     371マージは直訳すると、「合併する」「融合する」といった意味がありますが、ここでは、ソースコードとソースコードを融合させることをいいます。[[BR]]
     372基本的には、先ほどブランチとしてtrunkから派生させたコードをまたtrunkに融合させるという作業をOpenPNEでは使っています。しかし、マージはその他にもさまざまな使い方があります。[[BR]]
     373例えば、2.10.0から派生した個人作業ディレクトリのブランチでのんびり機能追加を開発していたが、trunkが2.11.6になっていたときに、その追加機能をtrunkに取り込んでも動かないということがないように、ある程度trunkの開発が進んだときに、個人作業ディレクトリにtrunkをマージさせておけばtrunkにマージさせたときに現在のtrunkのバージョンと相性が悪いから動かないということがなくなります。
     374
     375マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業になります。ファイルをそれぞれ変更するのではなく、修正されている箇所だけ取り込むという作業です。
     376
     377それでは、ブランチと同じく、「TortoiseSVNでマージする方法」と「SVNコマンドでマージする方法」の2種類を紹介します。[[BR]]
     378マージにはさまざまな種類がありますが、ここでのマージは、個人のローカル作業用ディレクトリにTrunkの変更箇所をマージする方法を紹介します。
     379
    63380 === TortoiseSVNでマージする方法 ===
    64381  ==== 概要 ====
    65   ==== ブランチの作成 ====
    66   ==== チェックアウト ====
     382  ==== マージ ====
     383まず、TortoiseSVNでマージする方法ですが、先ほどのブランチでの使い方同様TortoiseSVNのメニューは右クリックをすることでメニューを開くことが出来ます。
     384今回はマージさせたいディレクトリの上で、右クリックをし、「TortoiseSVN」を選択し「Merge...」を選択します。
     385
     386(画像右クリック)
     387
     388「Merge...」を選択したらMergeウィンドウが表示されます。
     389マージをする上で一番分かりにくい点は、このFromとToだと思います。先ほど、「マージは基本的に、あるリビジョンからあるリビジョンでの変更箇所を取り込む作業」の述べましたが、それがここと一致します。このFromとToの間で変更された箇所を取り込みます。URLには、取り込みたい先のリビジョンのURLを指定します。
     390
     391{{{
     392From:マージしたい範囲の最初のリビジョン
     393To:マージしたい範囲の最後のリビジョン
     394}}}
     395
     396(画像リビジョンを選択する)
     397
     398この様にFromとTo指定して、Mergeを押すだけで、そのリビジョン間の変更箇所がローカルの作業ディレクトリにマージされます。
     399
     400ここで悩む人が多いのが一箇所の変更です。一箇所のリビジョンを変更したいときは、その前のリビジョンから変更したいリビジョンをFromとTo指定に指定します。
     401例えば、リビジョン5115の修正を取り込みたいときは、画像のように、
     402{{{
     403From:5114
     404To:5115
     405}}}
     406
     407(画像リビジョンを選択する2)
     408
     409
    67410
    68411 === SVNコマンドでマージする方法 ===
    69412  ==== 概要 ====
    70   ==== ブランチの作成 ====
    71   ==== チェックアウト ====
    72   ==== コマンドの説明 ====
     413  ==== マージ ====
     414
    73415
    74416 === 逆マージ ===
    75417  ==== 概要 ====
    76   ==== ブランチの作成 ====
    77   ==== チェックアウト ====
    78   ==== コマンドの説明 ====
     418  ==== マージ====