EclipseのワークスペースにGit リポジトリーは含めない方が良いらしい

nazology.net

しかしドイツのルートヴィヒ・マクシミリアン大学(LMU)で行われた研究によって、初期生命の遺伝子と考えられているRNAそのものに翻訳機(リボソーム)なしにアミノ酸の重合を独自に行う機能があることが示されました。

生命の起源の謎! 最初の生命はどうやって遺伝情報を翻訳したかが解明される! - ナゾロジー

⇧ amazing...

Eclipseワークスペースとは?

Eclipseというのは、

EclipseEclipse、イクリプス)は、コンピュータプログラミングにおいて使用される統合開発環境IDE)である

Eclipse (統合開発環境) - Wikipedia

ベースとなるワークスペースと、環境をカスタマイズするための拡張可能なプラグインシステムが含まれている。Eclipseは主にJavaで書かれており、主にJavaアプリケーションの開発に使用されるが、Ada 、ABAPC 、C ++ 、C# 、Clojure 、COBOL 、DErlangFortran 、Groovy 、HaskellJavaScriptJulia LassoLuaNATURALPerlPHPPrologPythonRRubyRuby on Railsフレームワークを含む)、RustScalaSchemeなどのプラグインを介して他のプログラミング言語のアプリケーションを開発するために使用することもできる。

Eclipse (統合開発環境) - Wikipedia

⇧ 「統合開発環境IDE:Integrated Development Environment)」の1つで、Javaとか使って開発してる場合は、

とかが良く名前を聞くような気がしている。

で、Eclipseには「ワークスペース」という概念があり、

www.gwtcenter.com

ワークスペースを決めないとEclipseは実行できない。また、同じ一つのEclipseを異なるワークスペースで動作させることもできる。どういうことかと言うと、

  • 同じ一つのEclipseインストールのEclipse.exeは何度でも起動できる。
  • しかし、その対象とするワークスペースは別々でなければいけない。

Eclipse上級:ワークスペース | GWT Center

概念としては以下のようなものだ。

Eclipse上級:ワークスペース | GWT Center

ディスクにインストールされた一つのEclipseが二つ起動され、メモリにロードされる。メモリ上の「それぞれのEclipseインスタンス」は異なるディスク上のワークスペースを対象とする。

Eclipse上級:ワークスペース | GWT Center

⇧ 上記サイト様によりますと、イメージとしては上図のようにEclipseの起動の際に指定が必要とのこと。

で「ワークスペース」が何なのかというと、

ワークスペースとは、Eclipseの設定値が格納される場所であり、その値はワークスペースフォルダ直下の.metadataというフォルダにある。

Eclipse上級:ワークスペース | GWT Center

この.metadataに格納されるものとしては、以下がある。

  • どんなプロジェクトがあるのか
  • プロジェクトの実行環境等がどうであるか
  • 各種プラグインの設定状態がどうなのか
  • プログラムコードをすばやく文字列検索するためのインデックスファイル

等など、Eclipse上で作業する際のありとあらゆるものが格納されている。

Eclipse上級:ワークスペース | GWT Center

つまり、Eclipseのインストールフォルダには、これらは格納されず、ワークスペースの方に格納されている。だから、ワークスペースを変更すると、プラグインの設定状態でさえも変更されてしまう。

Eclipse上級:ワークスペース | GWT Center

⇧ いろんな要素を含んでいるらしく、

  • ワークスペースには、必ず設定状態フォルダ.metadataが存在する。この位置や名前を変更することはできない。
  • この設定状態から「プロジェクト」として認識されているフォルダが「プロジェクト」である。それ以外のフォルダはワークスペース内にあっても「プロジェクト」ではない。Eclipseにとっては、ただの「フォルダ」である。
  • ワークスペース外のフォルダであっても「プロジェクト」と認識させることができる。

Eclipse上級:ワークスペース | GWT Center

⇧ 上図のようなイメージになるようです。

Eclipseとかで「プロジェクト」を作成すると、漏れなく「ワークスペース」配下で管理されてしまうということかと。

Gitとは

話は脱線し、Gitとは?

Git(ギット)は、プログラムソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。Linuxカーネルソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクトで採用されている。Linuxカーネルのような巨大プロジェクトにも対応できるように、動作速度に重点が置かれている。現在のメンテナは濱野純 (英語Junio C Hamano) で、2005年7月から担当している。

Git - Wikipedia

⇧ 分散型バージョン管理システムとあるのですが、「バージョン管理システム」は、

atmarkit.itmedia.co.jp

⇧ 上記サイト様によりますと、

の2つのタイプに大別されるようです。

Wikipediaさんによると、

分散システム(ぶんさんシステム、英語distributed system)とは、主にネットワークにより接続された複数のコンピュータによって構成されたシステムのことである対義語は、集中システム(英語central system, centralized system)。

分散システム - Wikipedia

⇧ とあるので、「分散型バージョン管理システム」であるGitは、「分散システム」ということになるんですかね。

⇧ 上図のイメージ図が、Gitの仕組みらしい。

siderlabs.com

プラットフォームを利用するメリットとして特に次の3つがどのプラットフォームでも共通して言えるものであり、大きいメリットでしょう。

  1. ソースコードのコラボレーション開発・コードレビュー機能(Pull Request、Merge Request)
  2. WebUIで様々ながことが行える高いユーザビリティ
  3. チケット管理機能などの開発に関わる重要な付随機能やそういった機能・サードパティサービスとの連携機能

【Git入門】GitHub・GitLab・BitBucketの3大Gitプラットフォーム紹介

⇧ 上記サイト様によりますと、Gitを利用する場合は、Gitプラットフォームも一緒に利用することが一般的で、

の3つが有名どころらしいです。

Egitとは?

Eclipseプロジェクトを管理しているEclipse Foundationが公開しているドキュメントによると、

wiki.eclipse.org

EGit is an Eclipse Team provider for Git. Git is a distributed SCM, which means every developer has a full copy of all history of every revision of the code, making queries against the history very fast and versatile. The EGit project is implementing Eclipse tooling for the JGit Java implementation of Git.

https://wiki.eclipse.org/EGit

EclipseでGitを利用できるようにしたものということのようです。

EclipseワークスペースにGit リポジトリーは含めない方が良いらしい

で、ようやっと本日のお題。

IBMが公開しているGitの利用方法のドキュメントで、

リポジトリーの作成
Eclipse で使用する Git リポジトリーに関する考慮事項

概要

EGit を使用して Git リポジトリーをセットアップする場合、(「プレイグラウンド」とは対照的な)「実動」リポジトリーの作成に関して次の 2 点の推奨事項があります。

EGit ユーザー・ガイド - タスク

⇧ 上記のような記載があり、Eclipseワークスペース内にGitリポジトリーを作成しない方が良いという。

理由としては、

  • Eclipse ワークスペースの外部にリポジトリーを保持することをお勧めします。
  • この点については、以下のようないくつかの理由があります。
    新しいリポジトリーでは、Eclipse ワークスペースのフォルダー構造全体が (潜在的な) コンテンツと見なされます。このため、パフォーマンスの問題が生じる可能性があります。例えば、コミットする前に変更を計算する場合 (.metadata フォルダー全体がスキャンされるなど)、しばしばワークスペースに、EGit とは意味合い上無関係なものの容易に除外できない不要なフォルダー (削除済みプロジェクトなど) が入ります。
    メタデータ (.git-) フォルダーは Eclipse ワークスペースの子になります。これにより、望ましくないフォルダー・トラバーサルが Eclipse で発生する可能性があるかどうかは不明です。
    Eclipse ワークスペースを破棄することで、リポジトリーを簡単に破棄できます。

EGit ユーザー・ガイド - タスク

⇧ パフォーマンスに関わる問題が大きいそうです。

やんごとなき、Eclipseの「ワークスペース」外部作成推し。

Eclipseワークスペース内のプロジェクトでワークスペース外部にGitリポジトリーを作成して管理できるか試してみる

というわけで、Eclipseで作成している「Spring Boot スタータープロジェクト」で検証してみます。

git-manual.net

⇧ 上記サイト様を参考にさせていただきました。

ちなみに、「ローカルリポジトリ」と「リモートリポジトリ」の関係は、

takacity.blog.fc2.com

⇧ 上記サイト様の図のようなイメージになるらしいです。

■ローカルのGitリポジトリーを作成

まずは、ローカルのGitリポジトリーを作成します。

Git管理したいプロジェクトは、

ts0818.hatenablog.com

⇧ 上記の記事で利用してるプロジェクトです。

Eclipseで対象のプロジェクトを選択し右クリックで、「チーム(E)」>「プロジェクトの共用(S)...」を選択。

「Git」を選択し、「次へ(N)>」を選択。

「作成...」ボタンを押下。

リポジトリー・ディレクトリー(D):」に、ローカルのGitリポジトリーの作成場所を指定します。ここで、Eclipseワークスペース以外の場所を設定すればOK。

「完了(F)」ボタンを押下。

「完了(F)」ボタンを押下。

ローカルのGitリポジトリーが作成できました。

■リモートのGitリポジトリーを作成
続いて、リモートのGitリポジトリーを作成していきます。

今回は、GitHubを利用しています。GitHubのアカウントの作り方などは、

qiita.com

⇧ 上記サイト様が詳しいです。

GitHubで自分のアカウントのページにログインできたら、「New」で。

「Repository name」をローカルのGitリポジトリーの名前と合わせて、「Add a README file」のチェックが入っていないことを確認し、「Create repository」ボタンを押下。

■リモートリポジトリにローカルリポジトリの内容をプッシュする

Eclipse側で「ビューの表示」>「その他」を選択。

「Git」の中の項目をShiftを押しながらすべて選択し、「開く(O)」ボタン押下。

で、ローカルのGitリポジトリの管理下においたプロジェクトが選択された状態で、

「Git ステージング」タブを選択。

リモートのGitリポジトリに追加したいローカルのGitリポジトリのファイル群を、ローカルのGitリポジトリの「ステージングエリア」に追加します。

「コミット・メッセージ」を書き込んで、「コミットおよびプッシュ(P)...」ボタンを押下。

エラー出ましたけど...

何回やってもGitHubでリモートリポジトリにpushとかできなくて、

codeaid.jp

最近までGithubを普通に利用していましたが、ある日突然pushコマンドを受け付けなくなりました。

Githubにpushできなくなったときの対処法 – CodeAid-Lab(コードエイド・ラボ)

記述にあるURLへ行くと「パスワード認証は2021年8月13日で廃止」となっているではないですか。。

Githubにpushできなくなったときの対処法 – CodeAid-Lab(コードエイド・ラボ)

⇧ へぇ~、Egitだとエラーメッセージで対処法の載ってるURL出してくれないから分からなかったのですが、パスワード確認廃止されたんですね...

GitHubでアクセストークンを作成で。

docs.github.com

GitHubの自分のページで、「Settings」を選択。

左サイドバーから「Developer settings」を選択。

左サイドバーから「Personal accsess tokens」を選択し、「Generate new token」を選択。

「Note」を適当に入力し、「Expiration」を選択。無期限にしてみました。

当然宜しくないとのお𠮟りですが、ローカル環境なので、一旦、このまま進めます。う~ん、もう、SSH認証とかに切り替えたほうが良い気はする...

「Select scopes」については、GitHubのドキュメントの説明と同じにしてみました。

で、トークンの作成が完了したら、トークンはテキストエディタなどにコピーしておきます。

で、改めてEclipseでプッシュを試みる。GitHubでプッシュ先のリポジトリのURLをコピーしておきます。

で、Eclipseで「Gitリポジトリ」でローカルのGitリポジトリの「ブランチ」>「ローカル」を選択した状態で、「ブランチへプッシュ(P)...」を選択。

「パスワード」にさきほどGitHubで作成した「Perasonal access tokens」の値を設定し、「プレビュー(V)>」ボタン押下。

「プッシュ(P)」ボタンを押下。

「ユーザー」「パスワード」入力。「パスワード」は「Perasonal access tokens」の値を設定。「ログイン(L)」ボタンを押下。

リモートリポジトリにプッシュできました。

github.com

う~ん、EclipseもGitもGitHubもよく分からん部分が多いのよね...

Visual Studio CodeのほうのVue.jsのプロジェクトについても、GitHubにプッシュしてみました。

github.com

⇧ Vue CLIを使ってVue.jsのプロジェクト作ってる影響なのか、ローカルのGitリポジトリが既に作成されてました。

毎度モヤモヤ感が半端ない...

今回はこのへんで。