開発フロー コントリビューター編

baserCMSプロジェクトに GitHub コラボレーターとして登録されていない場合は、
コントリビューターとして一旦、自分の GitHub プロジェクトにフォークしてから開発にとりかかります。
※ 事前に GitHub アカウントを取得し、ローカルPCに公開鍵の設定が完了している必要があります。

1. GitHub Webサイトで、レポジトリをフォークする

ブラウザで、 https://github.com/baserproject/basercms/ を開き、ページ右上の「Fork」ボタンをクリックし、
baserCMS のレポジトリをフォークします。(自分のプロジェクトに baserCMS レポジトリのコピーを作成します)

2. フォークしたレポジトリをクローンする

ローカルにフォークしたレポジトリのクローンを作成します。

git clone :{ユーザー名}/basercms.git {フォルダ名}

3. ローカルブランチの作成

リモートのブランチをローカルのブランチとしてコピーします。
次のコマンドでリモートブランチをローカルブランチとしてコピーした上で、チェックアウトします。
git checkout -b {ローカルブランチ名} remotes/origin/{リモートのブランチ名}

(例)開発ブランチ dev-3 をローカルブランチ dev-3 としてコピー&チェックアウト
git checkout -b dev-3 remotes/origin/dev-3

4. ローカルブランチで開発&コミット

開発を行う場合は、ローカルの開発ブランチからさらにトピックブランチを作成した上で取り掛かります。
baserCMSは、基本的にチケット駆動開発の為、トピックブランチの名称には、チケット番号を含める事をおすすめします。

また、トピックブランチからさらに作業用ブランチを作成し、そちらで開発し、開発が完了した時点でトピックブランチに squash オプション付きでマージする流れにすると、開発中に安心して随時コミットができ、不要なコミットログを残さなくてすみます。

(例)バグチケットNO 3333 用のブランチを作成し改修する場合
git checkout -b 3333
git checkout -b 3333-work
修正作業...
git commit -a -m "◯◯を調整"
git commit -a -m "◯◯を調整中、一旦コミット"
git checkout 3333
git merge --squash 3333-work
git commit -a -m "◯◯の不具合を修正 fixes #3333"

※ マージの際に、「--squash」オプションを利用すると、マージした内容をコミットせず、変更だけを取り込む事ができます。
これにより、作業用ブランチでコミットした際のメッセージをリモートブランチに含めず、マージしたタイミングでのメッセージだけをリモートブランチに送る事ができます。
※ マージしたタイミングでのメッセージに、「fixes #チケットNO」という内容を含めると、Redmineのチケットと連携させる事ができますので必ず入れるようにしましょう。
具体的には、チケット詳細ページに、コミットしたリビジョンへのリンクが張られます。

5. リモートにプッシュ

ローカルでの開発が完了したら、リモートのフォークレポジトリに変更内容を送信します。

git push origin {トピックブランチ名}

(例)フォークしたブランチ 3333 を送信
git push origin 3333

6. baserCMSプロジェクトにプルリクエストを送る

あなたが修正したプログラムコードをbaserCMSのプロジェクトに反映させるには、baserCMSプロジェクトにプルリクエストを送る必要があります。
ブラウザで、フォークしたbaserCMSのレポジトリページを開きます。
https://github.com/{ユーザー名}/basercms

ページ右上の「Pull Request」ボタンをクリックします。
内容を確認し問題なければ、どのような変更を行ったのかをメッセージ欄に入力し、「Send」ボタンを押すと、プルリクエストが送信され、リードデベロッパーにメールが送信されます。
※ ここで申請先が master に設定されている場合は、開発ブランチ(dev-x)に設定しなおしてください。

7. baserCMS プロジェクトに変更を反映する

リードデベロッパーがコードレビューを行い問題がなければ、あなたの変更内容をbaserCMSのレポジトリに反映させます。
その際、コミットメッセージに fixes を記載している場合、Redmineのチケットにも反映されます。

8. baserCMS プロジェクトの変更内容を取り込む

あなたが開発している間に、baserCMS のプロジェクトには、他の方の変更が取り込まれていきます。
それらの変更を取り込むためには、baserCMS プロジェクトのレポジトリをリモートとして設定しておく必要があります。
もちろん、こちらに直接プッシュできるのはコラボレーターだけですので、プッシュは行えず、プルのみが可能となります。

リモートを追加

git remote add {リモート名} :basercms/basercms.git
(例)リモート名 basercms として追加する
git remote add basercms :basercms/basercms.git

リモートの変更内容を取り込む

git pull {リモート名} {開発ブランチ名}
(例)リモート名 basercms から、dev-3 ブランチの内容を取り込む
git pull basercms dev-3