GitBucket – Pull Request機能を利用した開発手法

2015/04/10 admin
Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0Share on Tumblr0

 

こんにちは、ユニトラストの稲邑です。

今回はGitbucketの紹介と、導入方法、Pull Request機能を利用した開発手法の一例を紹介します。

 

■経緯

GitHubを利用してプロジェクトのソースコードを管理することが多くなっていますが、

コードを外部サービスに配置してはいけないといったことがよくあります。

GitHubを使いたいけど、お金がかかる、Gitで管理し、さらにWebの使い勝手の良いUIが欲しい!

という方に使ってみて欲しいのがGitBucketです。

 

■GitBucketとは

  • GitHubクローンなリポジトリ管理システム
  • GitHubと同じようにPull Requestを利用した開発フローが中心
  • 自前のサーバにインストール出来る
  • Scalaで開発されている。

→要約すると、自前サーバにGitHubっぽいものが立てて使えます!というものです。

 

さっそくですが、GitBucketをインストールしてみましょう。

ここでは、簡単にインストールし、動作を体験してもらうためにMac上でインストールします。

 

■インストール方法

※環境

  • Mac OSX
  • Java7

 

gitbucket.warをGitHubよりダウンロードし、

ダウンロードしたディレクトリにて以下のコマンドでjavaを使って実行します。

※ここでは、GitBucket 2.4.1のバージョンをインストールしました。

・JavaでGitBucketを起動

java -jar gitbucket.war

・起動ログ

2015-04-06 21:20:37.086:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
4 06, 2015 9:20:37 grizzled.slf4j.Logger info
2015-04-06 21:20:38.268:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

上記の通り起動したのを確認したら、ブラウザから「http://localhost:8080」へアクセスします。

スクリーンショット 2015-04-06 20.38.10

上記ログイン画面が表示されたら起動成功。root/rootでログインできます、簡単ですね。

 

■リポジトリの作成

rootでログインできたら、[New Repository] ボタンを押下し、

以下の画面にならってtestリポジトリを作成します。

リポジトリ作成

[Create repository]で新規リポジトリ作成

リポジトリ作成後

上記の通り、testリポジトリが作成されました。

■プロジェクトのソースコードのcommit&push

testプロジェクトを作成し、GitBucketへcommit,pushします。

任意のディレクトリにtestディレクトリを作成し、

リポジトリのトップ画面に記載してある通り、以下のコマンドを順に実行します。

touch README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin http://localhost:8080/git/root/test.git
git push -u origin master

push後に以下のようにGitBucket上でmasterブランチが生成されていればOKです。

root 画面

 

—————————————————————————-

ここで、Pull Requestを利用した開発手法について紹介します。

■Pull Requestとは?

  • Pull Requestとは、gitのブランチをリポジトリ管理者(コミッタ)にマージする依頼のこと。
  • 開発者はissueごとにマスターブランチから派生させたトピックブランチで開発を行い、開発完了後にPull Requestを発行する。
  • リポジトリ管理者はPull Requestの内容を精査しmasterブランチに適宜マージ/Rejectを行う。

 

■Pull Requestを利用した開発フローの例

図1

  1. 開発者はマスターブランチからトピックブランチを作成し、トピックブランチで改修を行う。
  2. 改修完了後、Pull Requestを行うことでマスターブランチへのマージを依頼する。
  3. リポジトリ管理者は、Pull Requestの内容を確認し、マージ/リジェクトを行う。

 

では、実際にGitBucket上でPull Requestを行ってみましょう。

 

■ブランチの生成

・以下のコマンドで、masterからdev-testブランチを生成します。

$ git checkout -b dev-test origin/master

・以下のコマンドで、カレントブランチがdev-testになっていることを確認。

$ git branch
* dev-test
   master

・ファイルの作成、git追加、commit、pushの実施

同ディレクトリで以下のコマンドを実行する。

$ vi test.txt ←”this is test!”という内容で保存 
$ git add test.txt 
$ git commit -m "test commit”
$ git push origin dev-test

以下はpush時のログ

Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Updating references: 100% (1/1)
To http://localhost:8080/git/root/test.git
 * [new branch]      dev-test -> dev-test

これでdev-testブランチがpushされました。
以下のようにpushされたブランチがGitBucket上で表示されることを確認します。
スクリーンショット 2015-04-07 12.18.37

↑新しいdev-testブランチがGitBucket上に展開されることが確認できました。

 

■GitBucket上でのPull Requestの発行

では、実際にGitBucket上でのPull Requestの発行してみます。

以下の手順で、pull requestを発行できます。

・testプロジェクトのトップ画面で[pull request]リンクを押下

スクリーンショット 2015-04-07 19.47.40

・[New pull request]ボタンを押下

スクリーンショット 2015-04-07 19.48.07

・[Edit]を押下し、左側にマージ先ブランチ[master]、右側にマージ元ブランチ[dev-test]を選択する。

スクリーンショット 2015-04-07 19.48.35

スクリーンショット 2015-04-07 19.48.49

↑左がマージ先(master)、右がマージ元(dev-test)となります。

・差分が表示されたら、[Click to create a pull request for this comparison]を押下する。

マージ元でdev-testブランチを選択されると、以下のようにマージ対象の差分が表示されます。

(dev-testブランチにtest.txtが追加されたことが確認できる。)

スクリーンショット 2015-04-07 19.48.58

・↑の画面で[Click to create a pull request for this comparison]を押下し、

pull requestのタイトル、メッセージを入れて[Send Pull Request]を押下します。

スクリーンショット 2015-04-07 19.50.00

・↑の画面で[Send pull request]を押下すると、pull requestが発行されます。

スクリーンショット 2015-04-07 19.50.22

↑の通り、pull requestが発行されました!

 

上記画面で管理者がpull requestの内容と、ソースコードを確認し、

[Merge pull request]ボタンを押下すれば、Gitによる自動マージが行われます。

逆にpull requestによるマージ拒否する場合は、[Close]ボタンでpull requestの却下、クローズとなります。

 

なお、pull requestのマージ後については、作成したブランチは適宜削除するなどの対応を行った方が良いです。

(開発ブランチが増えすぎると、わかりずらく、重くなってしまうため。)

 

■あとがき

実運用する際は、Gitバージョン管理の安定稼働、複数ユーザーアクセスによる負荷を考慮すると、

Linux上でアプリケーション・サーバー(Tomcat 7.x、Jetty 8.x等)と組み合わせて構築する形が望ましいです。

 

また、GitBucketはJenkinsのGitBucket Pluginを入れて連携することや、

Redmineでチケットとコミットを関連づけることも可能です。

 

以上です。

みなさんもGitBucketを使ってみてはいかがでしょうか。

 

Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0Share on Tumblr0