====== GitHub Eclipseによるリポジトリの基本操作 ======
--- //[[http://www.y2sunlight.com|y2sunlight]] 2020-06-19//
[[github:top|GitHub に戻る]]
本章は、リポジトリの基本的な操作について [[https://guides.github.com/|GitHubガイド]]に掲載されている[[https://guides.github.com/activities/hello-world/|HelloWorld]]に従って説明を進めます。本章を完了するには、[[github:config|GitHubのアカウント]]と以下のクライアント環境が必要です。Gitクライアントには[[git2:client:windows:eclipse|Eclipse]]を使用します。
クライアント環境
* Windows10 Pro
* Eclipse 2019-12 Version 4.14
関連記事
* [[github:config|GitHub 環境構築]]
* [[github:email|GitHub メールの設定]]
* [[github:profile|GitHub プロフィールの設定]]
* GitHub Eclipseによるリポジトリの基本操作
* [[github:branch|GitHub Eclipseによるブランチの操作]]
* [[github:release|GitHub タグとリリースの作成]]
* [[github:collaborator|GitHub コラボレータの招待]]
* [[github:publish|GitHub ソースコードの公開]]
リンク
* https://github.com/ --- GitHubの本家
* https://guides.github.com/ --- GitHubガイド
* [[https://guides.github.com/activities/hello-world/|Hello World]] --- GitHubガイドより
* [[https://guides.github.com/features/mastering-markdown/|Mastering Markdown]] --- GitHubガイドより
* [[https://help.github.com/ja/github/creating-cloning-and-archiving-repositories|リポジトリの作成、クローン、アーカイブ]] --- GitHubヘルプより
GitHub
* [[https://github.com/y2sunlight/hello-world/|y2sunlight/hello-world]] --- 本章の例題はGitHubで公開しています
----
===== GitHubフロー =====
以下では、[[https://guides.github.com/|GitHubガイド]]の[[https://guides.github.com/activities/hello-world/|HelloWorld]]に従って説明を進めます。HelloWorldは、README.mdを編集するだけの簡単な例題ですが、GitHubの基本的なワークフローを理解する上では十分なものです。
まず最初に、新しいリポジト( hello-world )作ります。GitHubでは、リポジトリ作成直後は、デフォルトでmasterブランチが作成されます。そして、README.md編集用の作業ブランチ( readme-edits )を追加します。README.md の編集作業はこのブランチで行います。作業終了後に、作業ブランチをプッシュして、プルリクエストを開きコードの変更をレビュワー(ここではリポジトリのオーナー)に通知します。レビューが終わると、レビュワーは readme-edits ブランチを master ブランチにマージします。
このように、GitHubでは開発者とレビュワーの日常的な作業単位は以下のようになります:
* 開発者
- 作業用のブランチ作成
- コード編集(コミット)
- プッシュ
- プルリクエスト
* レビュワー
- プルリクエストのレビュー
- 必要に応じてレビュー内容のフィードバック
* 開発者は必要に応じて、コード編集・プッシュ・プルリクエストを繰り返す
- レビューOKなら、作業用ブランチを master にマージ
この流れは、[[https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/github-flow|GitHub Flow]]と呼ばれ、GitHubでのワークフローモデルになっています。
尚、上述したように本章では、Gitクライアントには[[git2:client:windows:eclipse|Eclipse]]を使用します。
参考リンク
* [[https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/github-flow|GitHubフロー]] --- GitHubヘルプより
* [[https://guides.github.com/introduction/flow/|GitHubフローを理解する]] --- GitHubガイドより
* [[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のスタートに携わった人物
\\
===== リポジトリの作成 =====
画面右上の[+]メニューから[New repository]を選択して下さい。
[{{:github:repo:github-repo01.png?nolink|}}]
■ 必要な項目を入力します。
* [Repository name] --- リポジトリ名(ここでは ''hello-world'' ) を入力します。
* [Description] --- 短い説明文を入力できます。
* [Public]/[Private] --- Publicを選択するとリポジトリがインターネットに公開されます。
* [Initialize this repository with a README] --- READMEでこのリポジトリを初期化します。\\ 本章ではこれをチェックして下さい。
* [その他] --- .gitignoreやライセンスのテンプレートを追加することもできます。
■ [Create]ボタンを押して下さい。
[{{:github:repo:github-repo02.png?nolink|}}]
■ リポジトリを作成すると上画面が表示されます。
GitHubによって ''master'' ブランチに 初期コミット( ''Initial commit'' )がされ、リポジトリ作成時に指定した2つのファイル(README.md と LICENSE)が保存されていることが分かります。
===== ブランチの作成 =====
リポジトリ hello-world に移動します。まだ表示していない場合は、ダッシュボードの左サイドバーから hello-world を選択して下さい。
[{{:github:repo:github-repo03.png?nolink|}}]
■ ファイルリスト上部のドロップダウン[branch:master] をクリックします。\\
■ テキストボックスに 新しいブランチのブランチ名 ''readme-edits'' を入力します。\\
■ [Branches]内の[**Create branch: readme-edits** from 'master']を選択して下さい。
[{{:github:repo:github-repo04.png?nolink|}}]
■ 新しいブランチを作成すると上画面が表示されます。
ファイルリスト上部のドロップダウンの表示が[branch:readme-edits] に変わります。また。[2 branches] とブランチの数が増えているのも分かります。この段階では、''This branch is even with master.'' とメッセージに書いてあるように、master と readme-edits のブランチの内容は同じです。
>ブランチの作成はEclipseからでもできます。後述の「[[#Eclipseからブランチを作る]]」を参照して下さい。
\\
===== プロジェクトのインポート =====
本章は [[https://guides.github.com/|GitHubガイド]]の[[https://guides.github.com/activities/hello-world/|HelloWorld]]と異なり、ローカル環境のGitクライアントで操作します。また、
以下では、GitHubで公開されているリポジトリ( hello-world ) の ブランチ( readme-edits )をインポートして Eclipseで編集できるようにします。EclipseではGitの使い方については本編の「[[git2:client:windows:eclipse|Eclipse EGit プラグイン]]」を参照して下さい。
ここではワークスペースとして ''D:\\usr\workspace\github'' を使用し、以下のフォルダをプロジェクトフォルダに指定します。
D:\\usr\workspace\github\hello-world
Eclipseを起動して、メニューから[ファイル][インポート]を選択します。
[{{:github:repo:github-repo05.png?nolink|}}]
■ [Git][Gitプロジェクト]を選択し、[次へ]を押します。
[{{:github:repo:github-repo06.png?nolink|}}]
■ [クローンURI]を選択し、[次へ]を押します。
[{{:github:repo:github-repo07.png?nolink|}}]
■ [URI]を入力します(ここでは ''https://github.com/y2sunlight/hello-world.git'' を入力しています)。
リポジトリのURLは、リポジトリ hello-world の画面で、ファイルリスト右上の[Clone]ボタンを押すと表示できます。
[{{:github:repo:github-repo07-url.png?nolink|}}]
URL横のアイコンを押すとクリップボードにコピーできます。
■ URIを入力するとそれに応じて他の項目は自動で表示されます。\\
■ hello-worldは公開リポジトリなので、[認証]欄は空欄のままです。\\ (但し、[[#プッシュ|プッシュ時]]には必要になります)\\
■ [次へ]を押します。
[{{:github:repo:github-repo08.png?nolink|}}]
■ ブランチ ''master'' と ''readme-edits'' の両方にチェックを入れます。\\
■ [次へ]を押します。
[{{:github:repo:github-repo09.png?nolink|}}]
■ ローカルリポジトリの保存先にはワークスペース下のプロジェクトフォルダを指定します。\\ ここでは ''D:\usr\workspace\github\hello-world'' を指定します。\\
■ 初期ブランチに ''readme-edits'' を選択します。\\
■ リモート名は ''origin''(デフォルト値)のままで良いです。\\
■ [次へ]を押します。
[{{:github:repo:github-repo12.png?nolink|}}]
■ [新規プロジェクト・ウイザードを使用してインポート]を選択して、[完了]を押します。
> 本編では、プロジェクトの設定ファイルをリポジトリに保存しない方針なので、インポートの際は常にこの設定(新規プロジェクト・ウイザードを使用してインポート)を使用します。
[{{:github:repo:github-repo13.png?nolink|}}]
■ [PHPプロジェクト]を選択して、[次へ]を押します。
[{{:github:repo:github-repo14.png?nolink|}}]
■ [プロジェクト名]に ''hello-world'' を入力して、[完了]を押します。
>''hello-world'' フォルダは既にローカルリポジトリして作成されているので「指定された外部ロケーションは既に存在します」のメッセージが出ますが問題ありません。
[{{:github:repo:github-repo15.png?nolink|}}]
■ プロジェクトエクスプローラに以下のファイルが表示されます。
* インポートしたファイル --- README.md, LICENSE
* Eclipseのプロジェクトファイル --- .setteings/, .buildpath, .project
> これらのファイルが表示されていない場合は本編のEclipseの記事「[[eclipse:2019-12#プロジェクト・エクスプローラーの設定|プロジェクト・エクスプローラーの設定]]」を参照して 隠しファイル(.*)の表示 を行って下さい。
\\
===== プロジェクトの設定 =====
GitHubからプロジェクトをインポートした後、まず最初にしなければならない事は、コミットメールアドレスの変更です。GitHub用のメールアドレスを設定しないとユーザ共通のメールアドレスが使用されます。ユーザ名の変更は必要に応じて行って下さい。
本編では、基本的にオンプレミスのGitサーバを使用し、公開リポジトリのみGitHubによる運用を想定しています。従って、社内用と公開用でコミットメールアドレスを変更して使用します。コミットメールアドレスに関しては、本編の「[[github:email|メール設定]]」を参照して下さい。
Eclipse で ''hello-world'' リポジトリの設定画面を開きます:
- メニューの[ウインドウ][設定]を選択
- 左ペインで[チーム][Git][構成]を選択
- [構成]の[リポジトリ設定]タブを選択
- [リポジトリ]で[hello-world]を選択
[{{:github:repo:github-repo20.png?nolink|}}]
■ [エントリー追加...]ボタンを押します。
[{{:github:repo:github-repo21.png?nolink|}}]
- ユーザ名を入力して[追加]ボタンを押します。(キー: ''user.name'')
- メールアドレスを追加します。(キー: ''user.email'')
■ [適用]ボタンを押します。
\\
===== 変更とコミット =====
Eclipseによるプロジェクト内のファイルの編集からコミットまでの手順を説明します。詳しくは、本編の「[[git2:client:windows:eclipse|Eclipse EGit プラグイン]]」を参照して下さい。
EclipseでGitの操作を行う時は、[Gitステージング]タブを表示します。まだ表示していない場合は、メニューの[ウィンドウ][ビューの表示][その他…]を選択して [Git][Gitステージング]ビューを開いて下さい。
=== (1) .gitignore ファイルの作成 ===
本編ではプロジェクト関連ファイルはリポジトリに保存しない方針なので、これらのファイルをリポジトリ登録から除外します。
[プロジェクト・エクスプローラー]で以下のフォルダまたはファイルを右クリックして、[チーム][無視]を選択して下さい。この時、''.gitignore'' ファイルが無視を行ったフォルダに作られます。
* .setting/
* .buildpath
* .project
=== (2) README.mdの編集 ===
README.md を編集します。
[{{:github:repo:github-repo30.png?nolink|}}]
■ このファイルは[[https://guides.github.com/features/mastering-markdown/|Markdown]]形式で書かれています。\\
■ 編集が終わったら[ファイル][保存]して下さい。
=== (3) インデックスへの追加 ===
[Gitステージング]タブで編集したファイルをステージングします。
[{{:github:repo:github-repo31.png?nolink|}}]
■ .gitignore と README.md を選択し[+]ボタンを押して[ステージされた変更]に移動します。
[{{:github:repo:github-repo32.png?nolink|}}]
=== (4) コミット ===
[{{:github:repo:github-repo33.png?nolink|}}]
■ [コメント・メッセージ]を入力して下さい。\\
■ [コミット]ボタンを押してローカルリポジトリにコミットします。
[{{:github:repo:github-repo34.png?nolink|}}]
\\
===== プッシュ =====
公開リポジトリと言えどもプッシュするには認証が必要になります。リポジトリのオーナーには全ての権限があります。また、オーナーはコラボレータを招待して権限を与えることもできます。公開リポジトリで、リポジトリへの書き込みが出来るのはオーナーと権限の与えられたコラボレータ(人またはチーム)だけです。
本編では、GitクライアントからのアクセスにHTTPSを使用します。HTTPSでは、通常、ユーザ名とパスワードで認証しますが、アカウントが2要素認証を使用している場合、パスワードの代わりに「個人用アクセストークン」が必要になります。従って、プッシュの前に、まず個人アクセストークンを作成しなければなりません。
==== 個人アクセストークンの作成 ====
GitHubの画面右上の[アイコン]メニューから[Settings]を選択した後、左サイドバーで[Developer settings]を選択します。
[{{:github:repo:github-repo40.png?nolink|}}]
■ [Personal access tokens]を選択します。
[{{:github:repo:github-repo41.png?nolink|}}]
■ 右上の[Generate new token]ボタンを選択します。
[{{:github:repo:github-repo42.png?nolink|}}]
■ [Note]にトークンの分かり易い名前を入力します。\\
■ [repo]にチェックを入れ、リポジトリへのフルアクセスを許可します。\\
■ [Generate token]ボタンを押します。\\
[{{:github:repo:github-repo43.png?nolink|}}]
■ 個人アクセストークンが表示されるので、コピーして大切に保管します。\\
■ このトークンは、プッシュ時の認証などで使用します。
> ページの外に移動すると、再びこのトークンを見ることはできません。
> 過去1年間使用されていない個人アクセストークンは自動的に削除されます。
\\
==== アップストリームへプッシュ ====
ここからはEclipseに戻って操作を行います。[プロジェクト・エクスプローラー]でプロジェクト(hello-world)を右クリックして[チーム][アップストリームへプッシュ]を選択して下さい。
[{{:github:repo:github-repo45.png?nolink|}}]
■ ユーザ名と[[#個人アクセストークンの作成|個人アクセストークン]]を入力します。\\
■ [セキュア・ストアに保管]をチェックします。\\
■ [ログイン]ボタンを押して下さい。
> ここで入力したログイン情報は保管されるので、以後は認証情報を聞かれる事はありません。また、認証情報に変更があった場合は、プロジェクト名(hello-world)を右クリックし[チーム][リモート][アップストリームからプッシュ構成...]を選び、originのプッシュ構成の[変更]ボタンを押せば、認証情報を変更することができます。尚、この画面をプッシュの前に開いて、予め認証情報を入力しておくこともできます。
[{{:github:repo:github-repo46.png?nolink|}}]
■ プッシュ結果が表示されるので内容を確認後、[閉じる]ボタンを押して下さい。
\\
===== プルリクエスト =====
プルリクエストは、共同開発の心臓部ともいえる機能です(この文言はGitHubのヘルプから引用)。これはGitの機能ではなくてGitHubの機能です。プルリクエストは、レビュワーにレビューを依頼してマージの要求を行いますが、まだ作業の途中段階でも、プルリクエストしてディスカッションの場を作ることもできます。プルリクエストメッセージには @メンション を含めることができ、共同開発者がどこに居ようが意見を求めることもできます。尚、プルリクエストは自分自身で開き、そしてマージすることもできます。
筆者は、オンプレミスのSubversionに慣れていたので、初めてGitHubを体験した時、プルリクエストは面倒な作業のように思いました。共同開発者は10タイムゾーンの向こうに居るのではなく、直ぐ隣にいるからです。しかし、よく考えると、GitやSubversionのプライベートリポジトリは今でも私の隣(オンプレミス)にあります。GitHubは公開リポジトリだけの運用にしています。公開リポジトリにマージの履歴や経緯を残してくれるリクエストはやはり大切な存在だったのです。
=== 新しいプルリクエストを開く ===
それでは、実際にプルリクエストを開いてみます。通常この作業は、ブランチに変更をプッシュした開発者が行います。
リポジトリ hello-world の画面を表示します。
[{{:github:repo:github-repo50.png?nolink|}}]
■ [Pull requests]タブをクリックします。
>プッシュの直後は、ファイルリストの上に ''[Compare & pull Request >]''のリンクが表示されるので、ここからでも[[#プルリクエスト・オープン]]に進むことができます。
[{{:github:repo:github-repo51.png?nolink|}}]
■ 画面右の緑の[New pull request]ボタンを押します。
[{{:github:repo:github-repo52.png?nolink|}}]
■ マージするブランチを選択します:
* base: --- マージされるブランチ( ここでは ''master'' を選択します )
* compare: --- マージするブランチ( ここでは ''readme-edits'' を選択します )\\ これはプッシュしたブランチです
■ ブランチを選択すると、変更の差分が表示されるので、それが正しいことを確認してください。
[{{:github:repo:github-repo53.png?nolink|}}]
■ [Create pull request]ボタンを押して下さい。
=== プルリクエスト・オープン画面 ===
[{{:github:repo:github-repo54.png?nolink|}}]
■ プルリクエストのタイトルと内容を入力します。\\
■ 内容にはMarkdown書式や@メンションが使えます。\\
■ [Create pull request]ボタンを押して下さい。
\\
===== レビュー =====
レビューからマージまではレビュワーが行います。(勿論、自分自身でも行えます)
リポジトリ hello-world の画面を表示します。
[{{:github:repo:github-repo56.png?nolink|}}]
■ [Pull Requests]タブをクリックします。
[{{:github:repo:github-repo57.png?nolink|}}]
■ レビューするプルリクエストを選択します。
=== プルリクエスト画面 ===
[{{:github:repo:github-repo58.png?nolink|}}]
■ 変更の差分を表示するには[Files changed]を選択します。
[{{:github:repo:github-repo59.png?nolink|}}]
■ コードにコメントを追加したり、[Review changes]ボタンでレビュー結果を送信したりできます。\\
■ レビューについては以下を参照して下さい:
[[https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/reviewing-changes-in-pull-requests|プルリクエストのレビューについて]] --- GitHubヘルプより
\\
===== マージ =====
レビューが終わったら最終段階であるマージに進みます。readme-edits ブランチの変更をまとめて、master ブランチにマージします。
[[#プルリクエスト画面]]下の緑色の[Merge pull request]ボタンのある所まで進みます。
[{{:github:repo:github-repo60.png?nolink|}}]
''[This branch has no conflicts with the base branch]''の表示があれば、競合は発生していません。マージ可能です。プルリクエストをマージできるようにするには、すべての競合を解決しなければなりません。競合がある場合、競合する変更を持つファイルのリストが表示さ、[Merge pull request]ボタンは無効になっています。この場合は、[[https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/addressing-merge-conflicts|GitHubのヘルプ]]を参照して対処して下さい。
マージには3つの方法があります。[Merge pull request]ボタン右の[▽]を押すと、その方法が選択できるようになっています。
[{{:github:repo:github-repo61.png?nolink|}}]
* **Create a merge commit** --- masterに作業ブランチで行った全てのコミットを__個々に含むマージコミット__作成されます。(非Fast-forwardマージ:''git merge --no-ff''と同じ)
* **Squash and merge** --- masterに作業ブランチで行った全てのコミットを__1つに集約したマージコミット__が作成されます。(スカッシュマージ:''git merge --squash''と同じ)
* **Rebase and merge** --- マージコミットは作成されずmasterに作業ブランチのコミットが個々に追加されます。(リベース:''git rebase''と少し異なる。詳細は以下のリンクを参照)
こられについての詳細は、[[https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges|GitHubのヘルプ]]を参照して対処して下さい。
マージに関する詳細は以下のリンクを参照して下さい。
* [[https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/incorporating-changes-from-a-pull-request|プルリクエストから変更を取り込む]] --- GitHubヘルプより
* [[https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/addressing-merge-conflicts|マージコンフリクトへの対処]] --- GitHubヘルプより
[{{:github:repo:github-repo60.png?nolink|}}]
■ マージの方法が決まったら、[Merge pull request]ボタンを押して下さい。マージの方法が分からない場合は、デフォルトの **Create a merge commit** で問題ありません。
[{{:github:repo:github-repo62.png?nolink|}}]
■ 適切なコメントを入力して[Confirm merge]ボタンを押して下さい。
[{{:github:repo:github-repo63.png?nolink|}}]
■ マージが終了するとこの画面が表示されます。\\
■ マージ後に、プルリクエストは自動的にクローズされます。\\
■ マージ後に、作業ブランチを削除したい場合は、[Delete branch]ボタンを使いますが、特別の理由のない限り作業ブランチを直ぐに消す必要はないと思います。
これで作業フローは完了していますが、最後に忘れてはならないことがあります。
[{{:github:repo:github-repo64.png?nolink|}}]
■ マージ終了後に開発者に謝意を伝えることも大切かもしれませんね。
\\