こんにちは!
情創 技術開発局
前回担当した記事で初めてコメントをいただき、調子に乗ってる @TEBASAKI です。
今回は Egit について説明していきます。
なお、ブランチについてはまたの機会に説明します。
Egitとは
第8回でも少し触れましたが、 Egit は Eclipse で Git を扱うためのプラグインです。
Egit は Jgit という Java の Git ライブラリを使用しています。
なので、Gitのコマンドラインツールなどを別途導入する必要はありません。
なお、Jgit は Eclipse 傘下のプロジェクトです。
使い方
ここでは Egit による Git の操作方法を解説します。
リポジトリの作成に関しては第8回で解説しているので、そちらを参照してください。
プル
プルの操作自体は簡単です。
プロジェクトを右クリックして、チーム→プルを選択するだけです。
なお、プルはフェッチ→マージの順に操作することと同じです。
コミット、プッシュ
コミット、プッシュは第8回でも解説しましたが、再度説明します。
コミットはプロジェクトを右クリックして、チーム→コミットを選択します。
その後コミット・メッセージの記入と、コミットするファイルを選択して、コミットします。
プッシュはプロジェクトを右クリックからチーム→アップストリームへプッシュを選択します。
特に変更することなくOKを押下して完了ですが、
以下のように「拒否」のメッセージが表示されることがあります。
これは競合が発生している場合に起きるもので、プッシュに失敗してしまいます。
競合の解消
上記の通り、プッシュはリモートリポジトリと競合が起きている場合は失敗してしまいます。
チームでの作業には、競合は付き物です。
競合はファイルの内容を比較してマージすることで解消できます。
一連の流れについては後述することにして、ここではマージ作業について説明します。
競合しているファイルをマージツールで開くと、以下のように表示されます。
<<<<<<< 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の初期化部分が異なっているのが確認できます。
それを踏まえて、以下のように修正します。
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回で解説しているので、そちらを参照してください。
すると同期化パースペクティブが開かくかどうかを尋ねられるので、はいを押下します。
同期化パースペクティブ内の表示は以下のようになっており、
赤色矢印が競合しているファイル(以下競合ファイル)、
灰色矢印がコミット対象のファイル(以下コミット対象ファイル)、
青色矢印がプル対象のファイル(以下プル対象ファイル)
をそれぞれ表現しています。
2.競合の有無の確認
競合ファイルの有無によって、対応方法が異なります。
競合ファイルがひとつもなければ、以下の操作を行えば完了です。
コミット対象ファイルがある→コミット、プッシュ
プル対象ファイルがある→プル
しかし、競合ファイルがひとつでもある場合は3.以降の処理が必要です。
3.ローカルリポジトリへのコミット
まずはプル対象ファイルを対処します。
Ctrlを押しながらクリックして、プル対象ファイルを全選択します。
その後、右クリックから上書きを選択します。
この操作を行うことでリモートの変更をローカルに反映させます。
この時、プル対象ファイルのアイコンが赤色矢印になりますが、問題ありません。
4.競合の確認と解消
すると表示が変化し、赤上矢印が表示されるようになります。
※競合ファイルの表記と非常に似ているので注意してください
この赤上矢印のファイルが修正すべき競合ファイルとなるので、ダブルクリックします。
マージツールが開くので、比較しながら修正を行います。
修正に関しては競合の解消を参照してください。
修正が完了したら保存し、対象ファイルを右クリック→マージ済みとマークを選択します。
以上の操作を赤上矢印のファイルすべてに対して行います。
5.リモートリポジトリへの反映
すべての競合ファイルを修正し終えたら、プロジェクトを右クリックからコミットを選択します。
ここでGit管理から外したファイルがチェックされている場合があります。
この時チェックボックスの操作ができないので、コミットをキャンセルします。
その後 Java パースペクティブを開き、
対象のファイルを右クリックして、
チーム→拡張→変更なしを想定 を選択します。
そして同期化パースペクティブへ戻り、再度プロジェクトを右クリックからコミットを選択します。
コミット対象ファイルのみであることを確認して、プッシュボタンを押下します。
以上が競合解消の一連の流れになります。
Egitの注意点
Egitを使う上で、ファイルの操作には注意が必要です。
まず、ファイルの追加・削除ですが、Eclipse上の右クリック操作から行います。
これはOSでのファイル操作を行うと、Gitのインデックスが崩れてしまうためです。
ファイルの追加の手順を説明します。
ファイルを追加するフォルダを右クリックして、インポートを選択します。
追加したいファイルを選択したら完了ボタンを押下すればOKです。
ファイルの削除は説明するまでもないとは思いますが、
対象ファイルを選択して右クリックから削除を選択するだけです。
ファイルの移動に関しては、ドラッグアンドドロップを使えばGitが追従してくれます。
今回はここまでです。
開発環境編も残り少なくなってきました。
それではみなさん、またお会いしましょう!