OpenPNEを使ったカスタマイズ開発プロジェクトをGitで管理する方法
# まだまだGit勉強中なので、あくまで現時点の私のレベルでのメモです。
状況とやりたいこと
- 状況
- OpenPNE3はGitでソース管理されている(GitHub)
- OpenPNE3の画面などを大きくカスタマイズする場合、コア部分のファイルに手を入れる必要がある
- やりたいこと
Gitのサブモジュール(submodule)とサブツリーマージ(subtree merge)のうち、サブツリーマージの方を使うと上手くできそうだということが分かりました。
Gitのサブツリーマージを使ったOpenPNE3プロジェクトの管理
まず、masterブランチでプロジェクト全体の基本構造を作ります。ドキュメント格納用ディレクトリdocsと、プログラム関連格納用ディレクトリprojectsを作成し、仮にデータベース仕様ドキュメントをファイルを作ってコミットします。
$ mkdir prj $ cd prj $ git init $ git mkdir docs projects $ git touch docs/database_spec.txt $ git add . $ git commit -m 'added database_spec'
次に、OpenPNE3のリポジトリをリモートとして登録し、リポジトリデータをフェッチします。フェッチが完了したら、リモートブランチをチェックアウトします。
$ git add remote openpne3 git://github.com/openpne/OpenPNE3.git $ git fetch openpne3 $ git checkout -b openpne3master openpne3/master
masterブランチに戻り、openpne3masterブランチの内容をサブツリーとしてマージします。
$ git read-tree --prefix=projects/OpenPNE3/ -u openpne3master
この時点で、masterブランチは以下のようになっています。
サブツリーマージをコミットします。
$ git commit -m 'merged OpenPNE3 subtree from openpne3master branch'
これで、プロジェクトの基本構造ができあがりました。
OpenPNE3の更新を取得する
OpenPNE3側の更新を取得して開発しているプロジェクトに適用するには、まずopenpne3masterブランチへ移動して、ブランチの内容を更新します。
$ git checkout openpne3master $ git pull
次にmasterブランチに戻り、openpne3masterブランチの変更をマージします。
$ git checkout master $ git merge --squash -s subtree --no-commit openpne3master
OpenPNE3自体の修正をOpenPNE3リポジトリ側へマージする
開発を行っていて、まれにOpenPNE3本体へパッチを送った方がよい修正などがでてきます。
この場合、openpne3masterブランチへ該当する修正を適用します。
★検証中・・・
- git cherry-pick を使う git cherry-pickというのを初めて知った - すぎゃーんメモ
- git rebase の onto を使う rebase で本番用の設定と開発用の設定を簡単に切り替える - ぐるぐる~