====== Eclipse EGit プラグイン======
EGit 5.6.1
--- //[[http://www.y2sunlight.com|y2sunlight]] 2020-06-10//
[[git2:client:windows|Git Windowsクライアント に戻る]]
本章では、[[eclipse:top|Eclipse]]でGitを使用すための [[https://www.eclipse.org/egit/|EGit]] プラグインについて説明します。EGit は、Eclipse用のGit統合のためのプラグインです。Eclipseを [[https://mergedoc.osdn.jp/|MergeDoc Project]] からダウンロードする場合、EGit はバンドルされているのでインストールの必要はありません。
本章は、[[git2:server|社内のGitサーバ]]に共有リポジトリを置き、それをLAN内のクライアントPCから使用する場合を想定していますが、Gitとの接続プロトコルはSmart HTTPなので、GitHubのようなホスティングサービスに対しても応用が利くと思います。
クライアント環境
* Windows10 Pro
* Eclipse 2019-12 Version 4.14
関連記事
* [[git2:client:windows:git-for-windows|Git for Windows (Git Bash)]]
* [[git2:client:windows:source-tree|SourceTree]]
* Eclipse EGit プラグイン
リンク
* [[https://www.eclipse.org/egit/]] --- Eclipse EGitプラグイン
* [[https://mergedoc.osdn.jp/]] --- MergeDoc Project (Pleiades All in One)
* [[https://takilog.com/eclipse-github-vcs/|【Eclipse×GitHub】図で解説するGitHubバージョン管理方法]] --- EGitの使い方が最初から分かり易く説明されてます (感謝!!)
----
===== EGitのインストール =====
Eclipse を [[https://mergedoc.osdn.jp/|MergeDoc Project]] からダウンロードする場合、EGit インストール済ですが、そうでない場合は、以下の手順でインストールして下さい。
メニューの[ヘルプ][新規ソフトウェアのインストール...]を選択します。
[{{:git2:client:windows:egit01.png?nolink|}}]
1. 作業対象から ''http://download.eclipse.org/egit/updates'' を選択します。\\
2. このURLが存在しない場合は以下に従って下さい。
[追加...]ボタンを押して下さい。
[{{:git2:client:windows:egit02.png?nolink|}}]
■ 次のように入力します。
* 名前: ''EGit''
* ロケーション: ''http://download.eclipse.org/egit/updates''
■ [追加ボタン]を押します。
3. 上図のように表示された一覧全てをチェックして、[次へ]を押します。\\
4. 以降は指示に従って、EGitをインストールして下さい。\\
5. インストールが終わるとEclipseが再起動します。\\
\\
===== 初期設定 =====
Gitの設定画面(git config)は次のようにして開きます:
- メニューの[ウインドウ][設定]を選択
- 左ペインで[チーム][Git][構成]を選択
- 右ペインの[構成]から[ユーザ設定]を選択
[{{:git2:client:windows:egit03.png?nolink|}}]
■ [core][autocrlf]を ''false'' に変更します。(既に設定済の場合は不要です)。\\
■ [エントリー追加...]ボタンを押して次の2項目を追加し、[適用]ボタンを押します。\\ (既に設定済の場合は不要です)。
* ユーザ名 --- キーは ''user.name'' です
* メールアドレス --- キーは ''user.email'' です
■ これは必要最小限のGitの設定です。
> このユーザ設定は [[git2:client:windows:git-for-windows|Git for Windows]] が参照しているユーザ設定ファイル( ''C:\Users\sunlight\.gitconfig'' )と同じものに保存されます。
> また、他の設定(リポジトリー設定、システム設定)も Git for Windows と同じファイルに保存されている点に注意して下さい。
\\
===== 共有リポジトリの準備 =====
社内のGitサーバーにプロジェクト用の新しい共有リポジトリを作成します。
cd /var/git # 共有リポジトリのルートディレクトリに移動する
git init --bare --shared ./hello.git # 新しい共有リポジトリを作成する
chown -R apache:apache ./hello.git # ディレクトリの所有者とグループを apache に変更する
cd ./hello.git # リポジトリのディレクトリに移動する
git config http.receivepack true # receivepack(git push) を有効にする
リポジトリ名は ''hello.git'' としました。共有リポジトリ作成の詳細は本編の「[[git2:server|Gitサーバーの構築 - Gitデーモン/Smart HTTP]]」を参照して下さい。
本編の環境下では、hello リポジトリへの接続URLは、以下のようになります。
http://192.168.11.108/git/hello.git # IPアドレスは適宜読み替えて下さい。
\\
===== プロジェクトのインポート =====
ここではワークスペースとして ''D:\\usr\workspace\git'' を使用し、以下のフォルダをプロジェクトフォルダに指定します。
D:\\usr\workspace\git\hello
Eclipseを起動して、メニューから[ファイル][インポート]を選択します。
[{{:git2:client:windows:egit04.png?nolink|}}]
■ [Git][Gitプロジェクト]を選択し、[次へ]を押します。
[{{:git2:client:windows:egit05.png?nolink|}}]
■ [クローンURI]を選択し、[次へ]を押します。
[{{:git2:client:windows:egit06.png?nolink|}}]
■ [URI]を入力します(ここでは ''http://192.168.11.108/git/hello.git'' を入力しています)。\\
■ URIを入力するとそれに応じて他の項目は自動で表示されます。\\
■ 本編では信頼のあるLANに対しては認証を要求しない設定なので、認証は空欄のままです。\\
■ [次へ]を押します。
[{{:git2:client:windows:egit07.png?nolink|}}]
■ [次へ]を押します。
> リポジトリはまだ空なので「ソース Gitリポジトリは空です」のメッセージが出ますが問題ありません。リポジトリが空でない場合は、ここでブランチを選択します。
[{{:git2:client:windows:egit08.png?nolink|}}]
■ ローカルリポジトリの保存先にはワークスペース下のプロジェクトフォルダを指定します。\\ ここでは ''D:\usr\workspace\git\hello'' を指定します。\\
■ 初期ブランチは表示されていません(デフォルトでは ''master'' になります)\\
■ リモート名は ''origin''(デフォルト値)のままで良いです。\\
■ [次へ]を押します。
[{{:git2:client:windows:egit09.png?nolink|}}]
■ [新規プロジェクト・ウイザードを使用してインポート]を選択して、[完了]を押します。
> 本編では、プロジェクトの設定ファイルをリポジトリに保存しない方針なので、インポートの際は常にこの設定(新規プロジェクト・ウイザードを使用してインポート)を使用します。
[{{:git2:client:windows:egit10.png?nolink|}}]
■ [PHPプロジェクト]を選択して、[次へ]を押します。
[{{:git2:client:windows:egit11.png?nolink|}}]
■ [プロジェクト名]に ''hello'' を入力して、[完了]を押します。
>''hello'' フォルダは既にローカルリポジトリして作成されているので「指定された外部ロケーションは既に存在します」のメッセージが出ますが問題ありません。
\\
===== Git用語の基礎知識 =====
EGit(またはGit)を使用するための基礎的な用語について説明します。チェックアウト、コミット、ブランチなどの一般的なVCS(バージョン管理システム)の用語については、他の参考書などで調べて下さい。ここでは、EGitプラグイン用に限定して説明します。
==== masterブランチとブランチモデル ====
{{ :git2:client:windows:egit23.png?nolink|}}
ブランチは、Eclipseでは プロジェクトエ・クスプローラでプロジェクト名の横に表示されます。
リポジトリに最初のコミットを行うと、Git は master という名前のブランチを作成します。そのため、以後のコミットはブランチを切り替えるまで master ブランチに追加されていきます。
masterブランチは、Git Flowモデル や GitHub Flowモデルでは:
* リリース可能な品質を保証するブランチ
* 他のブランチからのマージのみで更新される
* masterブランチ上で直接作業したりコミットすることはできない
となっています。また、Flowモデルには、GitLab Flow や GitFeature Flowなども存在します。個々のプロジェクトの特性に応じたブランチモデルや独自のルールを採用してブランチの運用を行って下さい。
リンク
* [[https://nvie.com/posts/a-successful-git-branching-model/|A successful Git branching model]] --- Git Flowモデル(原本)
* [[https://qiita.com/homhom44/items/9f13c646fa2619ae63d0|A successful Git branching model(日本語訳)]] --- Git Flowモデル(邦訳)
* [[http://scottchacon.com/2011/08/31/github-flow.html|GitHub Flow]] --- Scott Chacon on the Interwebs
* [[https://gist.github.com/Gab-km/3705015|GitHub Flow]] --- Scott Chacon on the Interwebs(邦訳) \\ Scott Chacon(スコット・チャコン氏)はGitのエバンジェリストでGitHubのスタートに携わった人物
* [[https://about.gitlab.com/blog/2014/09/29/gitlab-flow/|GitLab Flow]] --- GitLab Flowモデル(原本)
* [[https://postd.cc/gitlab-flow/|GitLab Flow]] --- GitLab Flowモデル(邦訳)
\\
==== origin ====
origin はデフォルトのリモートリポジトリのURLを指す別名です。
origin は ''git config'' で設定可能で、EGitでは[[#初期設定]]で説明したGitの設定画面の [リポジトリ設定] から確認または変更できます。
[{{:git2:client:windows:egit24.png?nolink|}}]
リモートリポジトリの設定ファイルは ''{リポジトリディレクトリ}¥.git¥config'' に保存されています(本編の設定では、リポジトリとプロジェクトが同じディレクトリです)。
=== origin/master ===
''origin/master'' という表記は origin(デフォルトのリモートリポジトリ)のmasterブランチであることを意味します。originを省略し ''master'' だけではローカルリポジトリのmasterブランチと言う意味になります。
\\
==== HEAD ====
HEADは現在のブランチの先頭リビジョンを意味します。即ち、HEADは次にコミットするリビジョンの親リビジョンとなります。
「HEADリビジョン」は、比較、置換や復元操作でよく使用される表現です。例えば、プロジェクトエクスプローラーでファイルを右クリックして[比較]を選択すると以下のメニューが表示されます。
[{{:git2:client:windows:egit25.png?nolink|}}]
このメニューで[HEADリビジョン]を選択すると、Eclipseは現在編集中のファイルとブランチの先頭リビジョンを比較します。同様に[置換]で同じ事をすると、編集中のファイルがブランチの先頭リビジョンに置換されます。
また、HEADを起点に世代を遡る表記には 以下のものがあります。
HEAD~ # HEADの1世代前のリビジョン
HEAD~~ # HEADの2世代前のリビジョン
HEAD~2 # HEAD~~と同じ
\\
==== ステージング ====
Gitでは、SVNのようなパージョン管理システムとは異なりロポジトリにコミットする際に「[変更] => [コミット]」という流れをとりません。Gitでは、プロジェクト内で変更されたファイルの中からコミット対象のものを選択して[インデックス]に登録する作業が発生します。そしてこの登録作業のことを「ステージング」と呼び、「ステージ」とはインデックスの同じことを意味します。
即ち、「ステージング」とはコミット対象のファイルをインデックスに登録する事を指します。従って、Gitでは、「[変更] => [ステージング] => [コミット]」という流れでコミット作業が行われます。ステージングは一見面倒な作業ですが、実際にコミットするファイルだけを選別し、テストを完了したものだけどステージングすることで、コミットの破棄はやり直しなどの余計な作業を排除することができます。
EGitでは、ステージング用に [Gitステージング]用のビュー が用意されています。
[{{:git2:client:windows:egit20.png?nolink|}}]
まだ、表示されていない場合は、メニューの[ウィンドウ][ビューの表示][その他...]を選択して [Git][Gitステージング]ビューを開いて下さい。
\\
===== 最初のプッシュ =====
最初にプロジェクト関連のファイルをプッシュしますが、本編ではプロジェクト関連ファイルはリポジトリに保存しない方針なので、これらのファイルをリポジトリ登録から除外する為のファイル(.gitignore)を共有リポジトリにプッシュします。
=== .gitignore ファイルの作成 ===
[プロジェクト・エクスプローラー]で以下のフォルダまたはファイルを右クリックして、[チーム][無視]を選択して下さい。この時、''.gitignore'' ファイルが無視を行ったフォルダに作られます。
* .setting/
* .buildpath
* .project
> これらのファイルが表示されていない場合は本編のEclipseの記事「[[eclipse:2019-12#プロジェクト・エクスプローラーの設定]]」を参照して 隠しファイル(.*)の表示 を行って下さい。
=== .gitignore のプッシュ ===
EGitでプッシュする方法はいろいろありますが、ここでは、Gitコマンドと同じ流れで ''git add'' 、'' git commit'' 、''git push'' の順に進めていきます。
(1) ''.gitignore'' を右クリックして、[チーム][索引に追加]を選択します。
(2) ''.gitignore'' を右クリックして、[チーム][コミット...]を選択すると[Gitステージング]タブ表示されます
[{{:git2:client:windows:egit12.png?nolink|}}]
■ コメント・メッセージを入力して[コミット]ボタンを押します。
(3) プロジェクト ''hello'' を右クリックして、[チーム][プランチのプッシュ'master'...]を選択します。
[{{:git2:client:windows:egit13.png?nolink|}}]
■ ここではまだリモートリポジトリにブランチがない状態です。\\
■ ローカルのmasterブランチをリモートのmasterブランチにプッシュします。\\
■ [プレビュー]ボタンを押して下さい。\\
[{{:git2:client:windows:egit14.png?nolink|}}]
■ プッシュ内容を確認して、[プッシュ]ボタンを押します。
[{{:git2:client:windows:egit15.png?nolink|}}]
■ プッシュ結果が表示されるので内容を確認後、[閉じる]ボタンを押して下さい。
\\
===== EGitのユースケース =====
以下では、プロジェクトインポート後によく使うGitのユースケースについて説明します。
==== インデックスに追加する ====
コミット後に変更したファイルは[Gitステージング]タブの[ステージされていない変更]に表示されます。[Gitステージング]タブを表示していない場合は上の「[[#ステージング]]」を参照して表示して下さい。
[{{:git2:client:windows:egit26.png?nolink|}}]
■ ファイルを選択し[+]ボタンを押すと、そのファイルは[ステージングされた変更]に移動します。
[{{:git2:client:windows:egit27.png?nolink|}}]
■ [ステージングされた変更]に含まれるファイルは、コミット対象になります。\\
■ ステージングから除外したい場合は、ファイルを選択し[-]ボタンを押すと、そのファイルは[ステージされていない変更]に戻ります。
\\
==== コミットする====
[Gitステージング]タブの[ステージングされた変更]に含まれるファイルがコミット対象になります。
[{{:git2:client:windows:egit28.png?nolink|}}]
■ [コメント・メッセージ]を入力して下さい。\\
■ [コミット]ボタンを押すとローカルリポジトリにコミットされます。
■ 簡単な修正の場合は、コミットとプッシュを一度にすることもできます。この場合は [コミットおよびプッシュ]ボタンを押して下さい。ローカルリポジトリにコミットされた後、リモートリポジトリにプッシュされ、プッシュ結果の画面が表示されます。
\\
==== プッシュする ====
[{{ :git2:client:windows:egit29.png?nolink|}}]
コミット済で未プッシュのファイルがある場合、[プロジェクト・エクスプローラ]のプロジェクト名の横に ''↑(数字)'' が表示されます。
未プッシュのファイルをリモートリポジトリorigin にプッシュする場合は、プロジェクト名(右図の場合は hello)を右クリックして[チーム][アップストリームへプッシュ]を選択して下さい。
[{{:git2:client:windows:egit31.png?nolink|}}]
■ プッシュ結果が表示されるので内容を確認後、[閉じる]ボタンを押して下さい。\\
\\
==== プルする ====
[プロジェクト・エクスプローラ]で、プロジェクト名を右クリックして[チーム][プル]を選択して下さい。
[{{:git2:client:windows:egit31.png?nolink|}}]
■ プル結果が表示されるので内容を確認後、[閉じる]ボタンを押して下さい。\\
\\
==== ファイルの編集を取消す ====
=== 編集を取消す ===
ファイルの編集を最新のコミット時点まで戻したい場合は、置換機能が便利です。[プロジェクト・エクスプローラー]で、対象となるファイルを右クリックして ''[置換][HEADリビジョン]'' を選択します。
[{{:git2:client:windows:egit32.png?nolink|}}]
■ [変更を破棄しますか]ボタンを押して下さい。
> 前回のコミット時点と比較したい場合は、置換と同様に ''[比較][HEADリビジョン]'' で出来ます。
=== 削除を取消す ===
削除したファイルを復元するには、[Gitステージング]タブで行います。
[{{:git2:client:windows:egit33.png?nolink|}}]
■ 復元したいファイルを右クリックして ''[HEADリビジョンと置換]'' を選択します。
> ここで復元したファイルは前回のコミット時点のものです。削除時点に戻すには、復元したいファイルを右クリックして [ローカル・ヒストリーからの復元…] で行って下さい。
=== 全ての変更を取消す ===
全ての編集を取消し、最新のコミット時点まで戻したい場合は、リセットを使います。[プロジェクト・エクスプローラー]で、プロジェクトを右クリックして ''[リセット]'' を選択します。
[{{:git2:client:windows:egit34.png?nolink|}}]
■ 作業ディレクトリを含め全てを元に戻す[ハード]を選択し、[リセット]ボタンを押します。
\\
==== コミットを取消す ====
コミットの取り消しは、[Git参照ログ]から行います。まだ、表示されていない場合は、メニューの[ウィンドウ][ビューの表示][その他...]を選択して [Git][Git参照ログ]ビューを開いて下さい。
> 同様の操作はプロジェクトの[ヒストリー]からもできます。プロジェクトの[ヒストリー]を表示するには、[プロジェクト・エクスプローラー]からプロジェクトを右クリックして[チーム][ヒストリーに表示]を選択して下さい。
下図は [Git参照ログ] の例です。ここでは、最新のコミットを取消してもう1つ前のコミットまで戻す操作を行ってみます。
[{{:git2:client:windows:egit35.png?nolink|}}]
■ 1つ前のコミットを右クリックして[リセット]を選び、[ソフト]、[混合]そして[ハード]の中からどんな状態まで戻すかを選択します。
* [ソフト] --- HEADだけをリセットします。コミットだけを取消し、コミット直前のステージングしてある状態に戻したい場合は[ソフト]を選択して下さい。
* [混合] --- HEADとインデックスをリセットします。コミットとステージングを取消し、ステージング前の状態に戻したい場合は[混合]を選択して下さい。
* [ハード] --- HEAD、インデックスと作業ツリーの全てをリセットします。コミットの内容全てを取消し1つ前のコミット状態まで完全に戻したい場合は[ハード]を選択して下さい。
\\