NetBeans Git操作¶
NetBeansは標準でGitリポジトリを扱う機能を搭載しています。Git機能の実現には外部のGitコマンドを使わず、内蔵のGit機能(JGit)を使っています。
本記事は、NetBeans 8.0ベータ版(2014-01)に基づいています。
チーム開発者の日常作業¶
作業ストーリー¶
共有リポジトリを介して開発者が成果の共有をする構成での日常作業でのGitの使い方をNetBeansで行います。
ここでは、共有リポジトリのmasterブランチを開発ブランチとし、自分の担当する作業はローカルでフィーチャーブランチ(トピックブランチ)を作成してそこで行い、結果を共有リポジトリのmasterに上げるというワークフローを想定します。
- 共有リポジトリのmasterブランチにローカルリポジトリのmasterを整合させる
- ローカルリポジトリにこれから開発するある作業用のフィーチャーブランチを作成する
- 作業用のフィーチャーブランチにある開発作業の経過を随時コミットする
- ある開発作業が完了したので作業用のフィーチャーブランチを共有リポジトリのmasterブランチに上げる
共有リポジトリのmasterブランチにローカルリポジトリを整合¶
共有リポジトリのmasterブランチとローカルブランチのmasterを整合させます。
操作を次に示します。
Gitの実行結果等は、[出力]ウィンドウの使用しているリポジトリ名のタブのところに出ています。
ローカルリポジトリにこれから開発する作業のためのブランチを作成¶
ローカルリポジトリのmasterブランチは、共有リポジトリのmasterの同期専用に使うので、開発作業はかならずブランチを作って行います。
操作を次に示します。
- 分岐名は任意ですが、ここではフィーチャーブランチにスラッシュ、シャープ記号に続けてチケット番号を記載するルールを採用した例で示します。
- 作成した分岐をチェックアウトしておくと、ブランチ作成と同時にmasterブランチではなくここで作成したブランチに移ります。ブランチを作成したものの移動を忘れてmasterで修正をコミットしてしまうといった誤りを防止できます。
ブランチの状況を調べる¶
作成されているブランチや、今どこのブランチにいるかを見るには、リポジトリブラウザが使えます。
リポジトリブラウザを表示するには次のメニュー操作をします。
コンソール出力などのならびにリポジトリブラウザが表示されます。
ローカルおよびリモートに作成されているブランチ、いまいるブランチが表示されます。
フィーチャーブランチでのファイル修正作業¶
NetBeansで通常どおり開発作業を実施します。その際、NetBeansのプロジェクトウィンドウおよびファイルウィンドウに表示されるファイルにバージョン管理状況に応じた色が付きます。
変更したファイルは、バージョン管理の各種状態との差分を見ることが出来ます。
差分は、一般的なdiff、mergeツールのように横並びで見ることが出来ます。
フィーチャーブランチでのコミット¶
フィーチャーブランチで随時コミットを行います。
メニュー操作は次です。
コミット・メッセージを記載してコミットします。
コミットされたかどうかをログで確認します。
履歴を表示で、次の履歴検索画面が表示されます。
とりあえず条件は指定せずに[検索]をクリックします。次の履歴結果が表示されます。
フィーチャーブランチでの作業成果をローカルのmasterブランチにマージする¶
まず、いったん共有リポジトリのmasterとローカルのmasterを整合させます。これは、フィーチャーブランチの作業成果をローカルのmasterにマージする前に行います。さもないと、共有リポジトリのmasterとローカルのmasterとの整合が困難になるためです。
ブランチをmasterに移動します。
次のメニュー操作をします。
分岐に列挙されているブランチから移動先のmasterを選択し、[切替え]ボタンをクリックします。
リポジトリブラウザの分岐(ローカル)でmasterが太字になっていればmasterに切り替わっています。
リモートの共有リポジトリからpullし、共有リポジトリのmasterとローカルリポジトリのmasterを整合させます。
この操作は最初に実施した共有リポジトリのmasterブランチにローカルリポジトリを整合手順のときと同じです。
ローカルのmasterブランチが共有リポジトリのmasterと整合したら、ローカルのmasterへローカルのフィーチャーブランチをマージします。
メニュー操作を次に示します。
リビジョンをマージ画面が表れます。次に画面を示します。
マージ対象リビジョン(ブランチ)を選択するため、選択ボタンを押すと、リビジョンを選択画面が表れます。次に画面を示します。
マージ対象リビジョンを選択します。選択したリビジョン(ブランチ)の情報に切り替わります。
リビジョンをマージ画面に選択したブランチが入ります。
マージが実行されます。マージ状況は出力ウィンドウに表示されます。
マージが完了したローカルのmasterブランチを共有リポジトリのmasterブランチに上げる¶
共有リポジトリのmasterブランチへローカルリポジトリのmasterブランチの内容を上げます。
メニュー操作を次に示します。
共有リポジトリ(プッシュ先)の指定画面が出るので、大抵はデフォルトのままで次にいきます。
次にローカルのブランチを聞かれます。
- [C]とコンフリクトのようなマークが付いていると、コンフリクト発生しpushが失敗するかもしれません。
pushが成功したら、ローカルリポジトリのフィーチャーブランチは不要なので削除します(心配なら少し取っておいても)。
共有リポジトリへのpushでエラーになったとき¶
共有リポジトリのmasterブランチの内容をローカルリポジトリのmasterブランチへ取り込んだ以降、共有リポジトリのmasterブランチに他のコミットが追加されてしまうと、このローカルリポジトリのmasterブランチからのpushが失敗します。
push実行時、次のエラーダイアログが表示され、プッシュは失敗してしまいました。
プッシュの実行詳細は出力ウィンドウにあります。
ちなみに、このときコミットグラフは次のようになっていました。
9538e1b ---> 5064f79 ---> 4add3c9 (共有リポジトリのmaster) | +---------> 29f7220 (master, feature/#55)
どうやら、コミット5064f79に基づきローカルのマージ作業をしているときに、共有リポジトリに新たなコミット4add3c9が追加され、整合が崩れたようです。
まず、もう一度pullします(pullは使うべきではなく、fetchとmergeを使えという意見があります)。
すると、マージかリベースかを聞いてきます。
今回はリベースを試してみました。
コンフリクトは発生せずに終了しました。この時点でのコミットグラフは次のようになっていました。
(origin/master) (master) 9538e1b ---> 5064f79 ---> 4add3c9 ---> fb438d4 | +---------> 29f7220 (feature/#55)
リベースによって、コミット29f7220の修正を、4add3c9に対して適用した新たなコミットfb438d4が作成されました。
ここでpushをすると受け入れられると思います。