Eclipse EGit 最初の一歩

2019年8月7日

これはEclipse EGitの使い方講座の一部なので、そちらを参照されたい

ここでは、Eclipse EGitの最初のステップを見ていく。やることは、

  • 全く新規に開発を開始する。つまり、ローカルにリポジトリを作成し、何かしらを作成する。その後に空のリモート(githubでもgitlabでもその他でも)リポジトリにプッシュする。
  • 上とは逆に、既にリモートのリポジトリにあるプロジェクトをローカルにクローンして、その開発を継続する。

前提条件

前提としては、

手順

これを示す手順としては以下になる。

  • Eclipse上で何らかのJavaプロジェクトを作成する。この時点ではgitは無関係。
  • 上記のgitリポジトリを作成する。つまり、作業領域(ワーキングツリー)付のリポジトリとなる
  • リモートとしてGitHub、GitLabあるいは他に、空のリポジトリを作成する。
  • ローカルのリポジトリ内容をリモートにプッシュする。

次に以下を行う。

  • ローカルのリポジトリ(作業領域付)を完全に削除する。これでリモートにしか成果は保持されていない。
  • そのリモートのクローンを行い、ローカルに再び開発環境を作成する。

Eclipseプロジェクトを作成する。

これは問題無いだろう。ここではプロジェクト名をfoobarにし、Sampleというクラスを作成した。

Eclipse上では以下のようになる。

エクスプローラで見てみると、次のようにEclipseプロジェクト用のファイルやフォルダも作成されている。

プロジェクトをリポジトリ化する

このままではgitリポジトリにはなっていないので、リポジトリ化する。つまり、作成したEclipseプロジェクトを作業領域(ワーキングツリー)とし、そこに.gitフォルダを作成することになる。

プロジェクトを右クリックし、Share Projectを選択する。

以下のように、プロジェクトフォルダを「リポジトリ化」することを選択する。

Create Repogitoryをクリックし、Finishをクリックする。

すると、エクスプローラでの表示は以下になる。.gitフォルダと.gitignoreファイルができている。

まさに.gitフォルダが作成されている。.gitignoreというのは、git管理しないものを記述しておくものだ。

コミットする

この時点では、.gitフォルダ、つまりデータベースはできたものの、中身は空である。しかし、作業領域には既に作成したプロジェクトがあるので「コミット」して作業領域全体をデータベースに登録してやる。

この時点でプロジェクトを見てみると、以下の状態にある。

  • 「>」は、それ以下に何らかの変更があることを示している。
  • 「?」は、データベースに未登録であることを示している。

SubVersionでもgitでも同じことなのだが、作業領域に何らかの変更がされ、「データベース」との不一致が発生すると、Eclipseは「>」「?」等でその変更箇所を示してくれる。

逆に言えば、変更があるにも関わらず、コミットをし忘れる(データベースへの反映し忘れ)ことは無くなるわけだ。

次にコミットの方法だが、Git Stagingというタブで行う。

このタブが表示されていないときは、プロジェクト右クリック>Team>Commitで出現する。

コミットの方法は簡単だ。単純に「++」をクリックし、変更・追加ファイルすべてをコミット対象にし、コメントを書き、「Commit」ボタンを押せばよい。

他にCommit and Pushというボタンもあるが、これはCommitした後に引き続きプッシュするという意味だ。

※ここでは、Eclipse用の設定ファイル.project、.classpathその他も一緒にコミットしている。開発メンバー全員がEclipseを使用する場合には、これが最も簡単な方法だ。もちろん、そうしない方法もあるのだが、ここでは説明を省略する。

空のリモートリポジトリを作成してプッシュする

以上は、ローカルなリポジトリを作成し、作業領域で何かしらを作成し、それをデータベースにコミットしただけである。

もちろん、これだけでも開発者が自分だけであれば十分使い物になる。このデータベースには、コミットごとの履歴が格納されており、その履歴を表示したり、任意の時点に戻ったり、ブランチを作成したりすることができるからだ。

次はどこかに空のリポジトリを作成し、そこにプッシュする。今回はGitLabにfoobarというリポジトリを作成する。例えば、こんなものができる。

プロジェクトを右クリックし、メニューでTeam>Push Branch ‘master’を選択する。その後は以下のような具合だ。




GitLabの方をリフレッシュすると、たしかにプッシュされている様子がわかる。

ローカルを消す

これで、ローカルとリモートが同一のリポジトリになった。通常であれば、このまま開発を続け、コミットを繰り返し、プッシュを繰り返せばよい。

しかしここでは、「既にリモートリポジトリがある場合に、それをクローンして開発に途中参加する」ことをシミュレートするため、いったんローカルを消す。

単純にEclipseからプロジェクトを削除すればよい。

以下をチェックしないとフォルダは残ったままになってしまうので、必ずチェックする。

これでローカルにあるリポジトリはきれいさっぱり消えた。

リモートをクローンする

もはやリポジトリはGitLabの中にしか無くなった。今度は、これをローカルにクローンし、Eclipseで開発を続けることにする。

File>Importをクリックする。

Git>Projects from Gitを選択

CloneURIを選択

単純にGitLab上のURIを指定する。アカウントの保存を選択した場合には、自動でそれが表示されている。

masterしか無いのでこれを選択

ここが問題なのだが、EGitはデフォルトではプロジェクト(作業領域付のリポジトリ)をワークスペース直下に置こうとせず、「ユーザホーム/git」に置こうとする。Windowsの場合であれば「c:\users\ユーザ名\git」になる。

これを変更して現在のワークスペース下に置くことにする。

EclipseのプロジェクトとしてImportする(後の注意を参照)

注意:もしフォルダ中に.projectファイルその他のEclipse特有のファイルが無い場合には、上の方法ではインポートできない。例えば、gitリポジトリには格納せず、gradleのeclipseプラグインで生成させている場合などだ。この場合は、一般プロジェクトとしてインポートする。

まとめ

ここで示したことは単純なことだ。

  • Eclipseでローカルにプロジェクトを作成
  • それをリポジトリ化する。
  • リモートのGitLabに空リポジトリを作成して、そこにプッシュ。
  • ローカル側をすべて消す。
  • リモートのGitLabからクローンし、プロジェクト(ローカルリポジトリ)を再現する。

そして、どの場合でも、プロジェクト(作業領域付リポジトリ)は、ワークスペース直下になるようにしている。

EGitのマニュアルによれば、これは推奨されないとのことだ。つまり、リポジトリは「ユーザホーム/git」にあるべきだというのだが、その理由はわからない。ワークスペース直下にあった方が使い勝手の良いことは明らかだ。

いずれにせよ、これでgitによる開発を開始することができる。