プロジェクト

全般

プロフィール

NetBeans Git操作

NetBeansは標準でGitリポジトリを扱う機能を搭載しています。Git機能の実現には外部のGitコマンドを使わず、内蔵のGit機能(JGit)を使っています。
本記事は、NetBeans 8.0ベータ版(2014-01)に基づいています。

チーム開発者の日常作業

作業ストーリー

共有リポジトリを介して開発者が成果の共有をする構成での日常作業でのGitの使い方をNetBeansで行います。
ここでは、共有リポジトリのmasterブランチを開発ブランチとし、自分の担当する作業はローカルでフィーチャーブランチ(トピックブランチ)を作成してそこで行い、結果を共有リポジトリのmasterに上げるというワークフローを想定します。

  1. 共有リポジトリのmasterブランチにローカルリポジトリのmasterを整合させる
  2. ローカルリポジトリにこれから開発するある作業用のフィーチャーブランチを作成する
  3. 作業用のフィーチャーブランチにある開発作業の経過を随時コミットする
  4. ある開発作業が完了したので作業用のフィーチャーブランチを共有リポジトリのmasterブランチに上げる

共有リポジトリのmasterブランチにローカルリポジトリを整合

共有リポジトリのmasterブランチとローカルブランチのmasterを整合させます。
操作を次に示します。

daily-01.png (プロジェクト右クリックから、Git > リモート > プル メニュー操作)

daily-02.png (「リモート・リポジトリからプル」ダイアログ)

daily-03.png (「リモート・リポジトリからプル」ダイアログ(続))

Gitの実行結果等は、[出力]ウィンドウの使用しているリポジトリ名のタブのところに出ています。

daily-04.png (リモートからプル実行時のコンソール出力)

ローカルリポジトリにこれから開発する作業のためのブランチを作成

ローカルリポジトリのmasterブランチは、共有リポジトリのmasterの同期専用に使うので、開発作業はかならずブランチを作って行います。
操作を次に示します。

daily-05.png (分岐/タグ > 分岐の作成 メニュー操作)

daily-06.png (分岐の作成ダイアログ)

  • 分岐名は任意ですが、ここではフィーチャーブランチにスラッシュ、シャープ記号に続けてチケット番号を記載するルールを採用した例で示します。
  • 作成した分岐をチェックアウトしておくと、ブランチ作成と同時にmasterブランチではなくここで作成したブランチに移ります。ブランチを作成したものの移動を忘れてmasterで修正をコミットしてしまうといった誤りを防止できます。

ブランチの状況を調べる

作成されているブランチや、今どこのブランチにいるかを見るには、リポジトリブラウザが使えます。
リポジトリブラウザを表示するには次のメニュー操作をします。

daily-07.png (リポジトリブラウザ メニュー操作)

コンソール出力などのならびにリポジトリブラウザが表示されます。

daily-08.png (リポジトリブラウザ表示例)

ローカルおよびリモートに作成されているブランチ、いまいるブランチが表示されます。

フィーチャーブランチでのファイル修正作業

NetBeansで通常どおり開発作業を実施します。その際、NetBeansのプロジェクトウィンドウおよびファイルウィンドウに表示されるファイルにバージョン管理状況に応じた色が付きます。

daily-09.png (プロジェクトウィンドウのファイルとその色)

変更したファイルは、バージョン管理の各種状態との差分を見ることが出来ます。

daily-10.png (差分 メニュー操作)

差分は、一般的なdiff、mergeツールのように横並びで見ることが出来ます。

daily-11.png (差分表示)

フィーチャーブランチでのコミット

フィーチャーブランチで随時コミットを行います。
メニュー操作は次です。

daily-12.png (コミット メニュー操作)

コミット・メッセージを記載してコミットします。

daily-13.png (コミット画面)

コミットされたかどうかをログで確認します。

daily-14.png (コミットログ メニュー操作)

履歴を表示で、次の履歴検索画面が表示されます。

daily-15.png (履歴表示 条件指定)

とりあえず条件は指定せずに[検索]をクリックします。次の履歴結果が表示されます。

daily-16.png (履歴表示結果)

フィーチャーブランチでの作業成果をローカルのmasterブランチにマージする

まず、いったん共有リポジトリのmasterとローカルのmasterを整合させます。これは、フィーチャーブランチの作業成果をローカルのmasterにマージする前に行います。さもないと、共有リポジトリのmasterとローカルのmasterとの整合が困難になるためです。

ブランチをmasterに移動します。
次のメニュー操作をします。

daily-17.png (分岐に切り替え メニュー操作)

分岐に列挙されているブランチから移動先のmasterを選択し、[切替え]ボタンをクリックします。

daily-18.png (分岐に切り替え画面)

リポジトリブラウザの分岐(ローカル)でmasterが太字になっていればmasterに切り替わっています。

daily-19.png (リポジトリブラウザでブランチを確認)

リモートの共有リポジトリからpullし、共有リポジトリのmasterとローカルリポジトリのmasterを整合させます。
この操作は最初に実施した共有リポジトリのmasterブランチにローカルリポジトリを整合手順のときと同じです。

ローカルのmasterブランチが共有リポジトリのmasterと整合したら、ローカルのmasterへローカルのフィーチャーブランチをマージします。
メニュー操作を次に示します。

daily-20.png (リビジョンをマージ メニュー操作)

リビジョンをマージ画面が表れます。次に画面を示します。

daily-21.png (リビジョンをマージ画面で選択ボタン)

マージ対象リビジョン(ブランチ)を選択するため、選択ボタンを押すと、リビジョンを選択画面が表れます。次に画面を示します。

daily-22.png (リビジョンを選択画面)

マージ対象リビジョンを選択します。選択したリビジョン(ブランチ)の情報に切り替わります。

daily-23.png (リビジョンを選択画面(選択後))

リビジョンをマージ画面に選択したブランチが入ります。

daily-24.png (リビジョンをマージ画面、選択したブランチに設定)

マージが実行されます。マージ状況は出力ウィンドウに表示されます。

daily-25.png (リビジョンをマージ 実行結果出力)

マージが完了したローカルのmasterブランチを共有リポジトリのmasterブランチに上げる

共有リポジトリのmasterブランチへローカルリポジトリのmasterブランチの内容を上げます。
メニュー操作を次に示します。

daily-26.png (リモート プッシュ メニュー操作)

共有リポジトリ(プッシュ先)の指定画面が出るので、大抵はデフォルトのままで次にいきます。

daily-27.png (リモート・リポジトリへプッシュ)

次にローカルのブランチを聞かれます。

daily-28.png (リモート・リポジトリへプッシュ ローカルブランチ選択前)

daily-29.png (リモート・リポジトリへプッシュ ローカルブランチ選択後)

  • [C]とコンフリクトのようなマークが付いていると、コンフリクト発生しpushが失敗するかもしれません。

daily-30.png (リモート・リポジトリへプッシュ ローカル参照を更新)

pushが成功したら、ローカルリポジトリのフィーチャーブランチは不要なので削除します(心配なら少し取っておいても)。

共有リポジトリへのpushでエラーになったとき

共有リポジトリのmasterブランチの内容をローカルリポジトリのmasterブランチへ取り込んだ以降、共有リポジトリのmasterブランチに他のコミットが追加されてしまうと、このローカルリポジトリのmasterブランチからのpushが失敗します。

push実行時、次のエラーダイアログが表示され、プッシュは失敗してしまいました。

daily-31.png (リモート・リポジトリへプッシュしたらエラー)

プッシュの実行詳細は出力ウィンドウにあります。

daily-32.png (リモート・リポジトリへプッシュしたらエラー時の出力)

ちなみに、このときコミットグラフは次のようになっていました。

    9538e1b  --->  5064f79  --->  4add3c9 (共有リポジトリのmaster)
              |
                +---------> 29f7220 (master, feature/#55)

どうやら、コミット5064f79に基づきローカルのマージ作業をしているときに、共有リポジトリに新たなコミット4add3c9が追加され、整合が崩れたようです。

まず、もう一度pullします(pullは使うべきではなく、fetchとmergeを使えという意見があります)。
すると、マージかリベースかを聞いてきます。

daily-33.png (push失敗後のpull時、マージかリベースか聞いてくる)

今回はリベースを試してみました。

コンフリクトは発生せずに終了しました。この時点でのコミットグラフは次のようになっていました。

                               (origin/master)   (master)
    9538e1b  --->  5064f79  --->  4add3c9  --->  fb438d4
              |
                +---------> 29f7220
                               (feature/#55)

リベースによって、コミット29f7220の修正を、4add3c9に対して適用した新たなコミットfb438d4が作成されました。

ここでpushをすると受け入れられると思います。

daily-01.png 表示 - プロジェクト右クリックから、Git > リモート > プル メニュー操作 (89.4 KB) 高橋 徹, 2014/01/26 11:27

daily-02.png 表示 - 「リモート・リポジトリからプル」ダイアログ (59.9 KB) 高橋 徹, 2014/01/26 11:35

daily-03.png 表示 - 「リモート・リポジトリからプル」ダイアログ(続) (41.5 KB) 高橋 徹, 2014/01/26 11:37

daily-04.png 表示 - リモートからプル実行時のコンソール出力 (19.1 KB) 高橋 徹, 2014/01/26 12:28

daily-05.png 表示 - 分岐/タグ > 分岐の作成 メニュー操作 (61 KB) 高橋 徹, 2014/01/26 17:03

daily-06.png 表示 - 分岐の作成ダイアログ (47.5 KB) 高橋 徹, 2014/01/26 17:08

daily-07.png 表示 - リポジトリブラウザ メニュー操作 (32.5 KB) 高橋 徹, 2014/01/26 17:36

daily-08.png 表示 - リポジトリブラウザ表示例 (20.1 KB) 高橋 徹, 2014/01/26 17:40

daily-09.png 表示 - プロジェクトウィンドウのファイルとその色 (11.6 KB) 高橋 徹, 2014/01/26 18:26

daily-10.png 表示 - 差分 メニュー操作 (32.4 KB) 高橋 徹, 2014/01/26 18:34

daily-11.png 表示 - 差分表示 (41.8 KB) 高橋 徹, 2014/01/26 18:46

daily-12.png 表示 - コミット メニュー操作 (71.4 KB) 高橋 徹, 2014/01/26 18:55

daily-13.png 表示 - コミット画面 (44.9 KB) 高橋 徹, 2014/01/26 19:50

daily-14.png 表示 - コミットログ メニュー操作 (70.7 KB) 高橋 徹, 2014/01/26 19:54

daily-15.png 表示 - 履歴表示 条件指定 (23.7 KB) 高橋 徹, 2014/01/26 20:54

daily-16.png 表示 - 履歴表示結果 (28.4 KB) 高橋 徹, 2014/01/26 20:55

daily-17.png 表示 - 分岐に切り替え メニュー操作 (57.1 KB) 高橋 徹, 2014/01/26 21:04

daily-18.png 表示 - 分岐に切り替え画面 (33.4 KB) 高橋 徹, 2014/01/26 21:10

daily-19.png 表示 - リポジトリブラウザでブランチを確認 (11.3 KB) 高橋 徹, 2014/01/26 21:15

daily-20.png 表示 - リビジョンをマージ メニュー操作 (59.6 KB) 高橋 徹, 2014/01/26 21:52

daily-21.png 表示 - リビジョンをマージ画面で選択ボタン (25.8 KB) 高橋 徹, 2014/01/26 21:55

daily-22.png 表示 - リビジョンを選択画面 (47 KB) 高橋 徹, 2014/01/26 22:14

daily-23.png 表示 - リビジョンを選択画面(選択後) (52.3 KB) 高橋 徹, 2014/01/26 22:17

daily-24.png 表示 - リビジョンをマージ画面、選択したブランチに設定 (27.8 KB) 高橋 徹, 2014/01/26 22:19

daily-25.png 表示 - リビジョンをマージ 実行結果出力 (8.11 KB) 高橋 徹, 2014/01/26 22:23

daily-28.png 表示 - リモート・リポジトリへプッシュ ローカルブランチ選択前 (43.1 KB) 高橋 徹, 2014/01/26 22:37

daily-27.png 表示 - リモート・リポジトリへプッシュ (67.8 KB) 高橋 徹, 2014/01/26 22:38

daily-29.png 表示 - リモート・リポジトリへプッシュ ローカルブランチ選択後 (41.1 KB) 高橋 徹, 2014/01/26 22:41

daily-30.png 表示 - リモート・リポジトリへプッシュ ローカル参照を更新 (42.7 KB) 高橋 徹, 2014/01/26 22:43

daily-31.png 表示 - リモート・リポジトリへプッシュしたらエラー (24.5 KB) 高橋 徹, 2014/01/26 22:45

daily-32.png 表示 - リモート・リポジトリへプッシュしたらエラー時の出力 (22 KB) 高橋 徹, 2014/01/27 00:00

daily-26.png 表示 - リモート プッシュ メニュー操作 (56.5 KB) 高橋 徹, 2014/01/27 00:12

daily-33.png 表示 - push失敗後のpull時、マージかリベースか聞いてくる (24.1 KB) 高橋 徹, 2014/01/27 00:18

クリップボードから画像を追加 (サイズの上限: 1 GB)