LoginSignup
7
18

More than 5 years have passed since last update.

Spring Boot解説第14回(開発環境編:Egit)

Posted at

こんにちは!
情創 技術開発局
前回担当した記事で初めてコメントをいただき、調子に乗ってる @TEBASAKI です。

今回は Egit について説明していきます。
なお、ブランチについてはまたの機会に説明します。

Egitとは

第8回でも少し触れましたが、 Egit は Eclipse で Git を扱うためのプラグインです。
Egit は Jgit という Java の Git ライブラリを使用しています。
なので、Gitのコマンドラインツールなどを別途導入する必要はありません。
なお、Jgit は Eclipse 傘下のプロジェクトです。

使い方

ここでは Egit による Git の操作方法を解説します。
リポジトリの作成に関しては第8回で解説しているので、そちらを参照してください。

プル

プルの操作自体は簡単です。
プロジェクトを右クリックして、チーム→プルを選択するだけです。
image

なお、プルはフェッチ→マージの順に操作することと同じです。

コミット、プッシュ

コミット、プッシュは第8回でも解説しましたが、再度説明します。

コミットはプロジェクトを右クリックして、チーム→コミットを選択します。
image

その後コミット・メッセージの記入と、コミットするファイルを選択して、コミットします。
image

プッシュはプロジェクトを右クリックからチーム→アップストリームへプッシュを選択します。
image

特に変更することなくOKを押下して完了ですが、
以下のように「拒否」のメッセージが表示されることがあります。
image

これは競合が発生している場合に起きるもので、プッシュに失敗してしまいます。

競合の解消

上記の通り、プッシュはリモートリポジトリと競合が起きている場合は失敗してしまいます。
チームでの作業には、競合は付き物です。
競合はファイルの内容を比較してマージすることで解消できます。
一連の流れについては後述することにして、ここではマージ作業について説明します。

競合しているファイルをマージツールで開くと、以下のように表示されます。

TestController.java
<<<<<<< HEAD
package com.qiita.demo.web.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.qiita.demo.domain.tbl.TestBean;
import com.qiita.demo.service.test.TestService;


@Controller
public class TestController {
   @Autowired
   private TestService testService;

  @RequestMapping("/test")
  @ResponseBody
  public String home() {
      String returnStr = "temp";
      List<TestBean> list = testService.selectAll();
      for (TestBean testBean : list) {
          returnStr += "id  :" + testBean.getId() + " ";
          returnStr += "name:" + testBean.getName() + "<br>";
      }
      return returnStr;
  }



}
=======
package com.qiita.demo.web.controller;

import java.util.List;

import com.qiita.demo.domain.tbl.TestBean;
import com.qiita.demo.service.test.TestService;


@Controller
public class TestController {
   @Autowired
   private TestService testService;

  @RequestMapping("/test")
  @ResponseBody
  public String home() {
      String returnStr = "test";
      List<TestBean> list = testService.selectAll();
      for (TestBean testBean : list) {
          returnStr += "id  :" + testBean.getId() + " ";
          returnStr += "name:" + testBean.getName() + "<br>";
      }
      return returnStr;
  }



}
>>>>>>> branch 'master' of http://(サーバー名)/gitbucket/git/(ユーザー名)/gitgradle.git

"======="で区切られた上の部分がローカルリポジトリの内容で、
下の部分がリモートリポジトリの内容です。
見比べてみるとimport文とreturStrの初期化部分が異なっているのが確認できます。

それを踏まえて、以下のように修正します。

TestController.java
package com.qiita.demo.web.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.qiita.demo.domain.tbl.TestBean;
import com.qiita.demo.service.test.TestService;


@Controller
public class TestController {
   @Autowired
   private TestService testService;

  @RequestMapping("/test")
  @ResponseBody
  public String home() {
      String returnStr = "test";
      List<TestBean> list = testService.selectAll();
      for (TestBean testBean : list) {
          returnStr += "id  :" + testBean.getId() + " ";
          returnStr += "name:" + testBean.getName() + "<br>";
      }
      return returnStr;
  }



}


このようにして競合部分を修正します。
今回はローカルを優先した修正を行いましたが、
場合によってはリモートを優先したり、
掛け合わせたような修正を行うこともあり得ます。

チーム開発での流れ

チーム開発の現場ではどのような流れになるでしょうか?
その状況を想定した手順を説明します。

1.リモートリポジトリとの比較

まずはローカルリポジトリとリモートリポジトリの比較を行います。
Gitパースペクティブからリモートトラッキングのマスターを選択し、
右クリックからワークスペースと同期化を選択します。
Gitパースペクティブの開き方は第8回で解説しているので、そちらを参照してください。
image

すると同期化パースペクティブが開かくかどうかを尋ねられるので、はいを押下します。
image

同期化パースペクティブ内の表示は以下のようになっており、
赤色矢印が競合しているファイル(以下競合ファイル)、
灰色矢印がコミット対象のファイル(以下コミット対象ファイル)、
青色矢印がプル対象のファイル(以下プル対象ファイル)
をそれぞれ表現しています。
image

2.競合の有無の確認

競合ファイルの有無によって、対応方法が異なります。

競合ファイルがひとつもなければ、以下の操作を行えば完了です。

コミット対象ファイルがある→コミット、プッシュ
プル対象ファイルがある→プル

しかし、競合ファイルがひとつでもある場合は3.以降の処理が必要です。

3.ローカルリポジトリへのコミット

まずはプル対象ファイルを対処します。
Ctrlを押しながらクリックして、プル対象ファイルを全選択します。
その後、右クリックから上書きを選択します。
image

この操作を行うことでリモートの変更をローカルに反映させます。
この時、プル対象ファイルのアイコンが赤色矢印になりますが、問題ありません。

そして、プロジェクトを右クリックからコミットを選択します。
image

コメントを記入してコミットボタンを押下します。
image

4.競合の確認と解消

プロジェクトを選択して、プルボタンを押下します。
image

すると表示が変化し、赤上矢印が表示されるようになります。
※競合ファイルの表記と非常に似ているので注意してください
image

左が競合ファイル、右が赤上矢印のイメージ画像です。
image

この赤上矢印のファイルが修正すべき競合ファイルとなるので、ダブルクリックします。
マージツールが開くので、比較しながら修正を行います。
修正に関しては競合の解消を参照してください。
image

修正が完了したら保存し、対象ファイルを右クリック→マージ済みとマークを選択します。
image

以下のような表示になったらOKです。
image

以上の操作を赤上矢印のファイルすべてに対して行います。

5.リモートリポジトリへの反映

すべての競合ファイルを修正し終えたら、プロジェクトを右クリックからコミットを選択します。
image

ここでGit管理から外したファイルがチェックされている場合があります。
この時チェックボックスの操作ができないので、コミットをキャンセルします。
その後 Java パースペクティブを開き、
対象のファイルを右クリックして、
チーム→拡張→変更なしを想定 を選択します。
そして同期化パースペクティブへ戻り、再度プロジェクトを右クリックからコミットを選択します。

問題がなければコミットボタンを押下します。
image

コミット対象ファイルのみであることを確認して、プッシュボタンを押下します。
image

問題なければOKボタンを押下して完了です。
image

以上が競合解消の一連の流れになります。

Egitの注意点

Egitを使う上で、ファイルの操作には注意が必要です。
まず、ファイルの追加・削除ですが、Eclipse上の右クリック操作から行います。
これはOSでのファイル操作を行うと、Gitのインデックスが崩れてしまうためです。

ファイルの追加の手順を説明します。
ファイルを追加するフォルダを右クリックして、インポートを選択します。
image

一般→ファイル・システムを選択し、次へ進みます。
image

追加したいファイルを選択したら完了ボタンを押下すればOKです。
image

ファイルの削除は説明するまでもないとは思いますが、
対象ファイルを選択して右クリックから削除を選択するだけです。
image

ファイルの移動に関しては、ドラッグアンドドロップを使えばGitが追従してくれます。
image


今回はここまでです。
開発環境編も残り少なくなってきました。

それではみなさん、またお会いしましょう!

参考URL

Eclipse EGit の使い方(1/2) | hiromasa.another :o)

7
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
18