— y2sunlight 2020-06-26
本章は、「GitHub Eclipseによるリポジトリの基本操作」の続編です。今回はEclipseによるGitブランチの操作について説明します。Gitサーバーには GitHub を使用していますが、社内サーバーや他のGitサーバーについてもEclipse側の操作は同じだと思います。
本章の前提は、前章と同じで、GitHubのアカウントと以下のクライアント環境が必要です。GitクライアントにはEclipseを使用します。
クライアント環境
関連記事
リンク
ここでの説明は前章から続いており、EclipseによるGitブランチの操作方法を述べる前に、前提となるリポジトリとブランチの条件を記載しておきます。
Gitサーバ( GitHub )に作成済のリポジトリとブランチは以下の通りです:
hello-world
master
— マスターブランチreadme-edits
— README.md編集用のブランチ
Gitクライアントは、Eclipseで、プロジェクト名は hello-world
です。Eclipse側のブランチの状態を[Gitリポジトリー]タブで表示すると以下の通りです。[Gitリポジトリ]を表示するには、Eclipse メニューの[ウインドウ][ビューの表示][その他]から[Git][Gitリポジトリー]を選択して下さい。
hello-world
readme-edits
— README.md編集用のブランチ origin/master
— マスターブランチorigin/readme-edits
— README.md編集用のブランチ
Eclipse のローカル・ブランチは readme-edits
だけです。リモート・トラッキングには2つのリポジトリがあり、どちらのリモートリポジトリもフェッチされています(履歴を取得している状態)。
「リモート・トラッキング」とは、正確には、Remote-tracking branch の事で「リモート追跡ブランチ」とも呼ばれています。リモート追跡ブランチ(Remote-tracking branch)とは、ローカルリポジトリ内に存在して、通常はorigin
によって定義されたリモートにある同名のブランチと連結し、その状態を追跡しているブランチと考えることができます。リモート追跡ブランチはフェッチ(またはプル)することで自動的に更新されます。
ローカルリポジトリ readme-edits
のアップストリーム構成を見るには、[Gitリポジトリー]タブ上で、[ブランチ][ローカル][readme-edits
]を右クリックして、[ブランチの構成…]を選択して下さい。
アップストリームがリモートリポジトリのブランチ readme-edits
であることが確認できます。これは、Eclipseのプロジェクトをインポートする時に、readme-edits
を origin/readme-edits
からチェックアウトしているからです。
「アップストリーム」とは、正確には、upstream branch の事で「上流ブランチ」とも呼ばれています。上流ブランチ(upstream branch)とは、ローカルブランチから、履歴を追跡(トラッキング)するように設定したブランチの事です。従って、ローカルブランチの追跡先が上流ブランチと考えられます。パラメータの無い push, fetch, pullは、上流ブランチが対象になります。
上流ブランチは通常はリモートにあってリモート追跡ブランチにより指定されますが、ローカルブランチの場合もあります。尚、上流ブランチをもつローカルブランチは「追跡ブランチ」とも呼ばれています。
まず、準備として、master
ブランチ から新しいブランチ license-edits
をGitHubで作ります。
リポジトリ hello-world に移動します。まだ表示していない場合は、ダッシュボードの左サイドバーから hello-world を選択して下さい。
■ ファイルリスト上部のドロップダウン[branch:master] をクリックします。
■ テキストボックスに 新しいブランチのブランチ名 license-edits
を入力します。
■ [Branches]内の[Create branch: license-edits from 'master']を選択して下さい。
新しいブランチをチェックアウトする前に、そのブランチをフェッチできるようの'origin'の構成を変更します。Eclipseの[プロジェクト・エクスプローラー]でプロジェクト(hello-world)を右クリックして下さい。
■ [チーム][リモート][アップストリームからフェッチ構成…]を選択して下さい。
■ [拡張…]ボタンを押します。
■ [ソース参照]から license-edits[ブランチ]
を選択します。このとき [宛先参照]は自動で入力されます。
■ 右上の[+仕様の追加]ボタンを押して下さい。
■ [フェッチの仕様]中の refs/heads/license-edits
の[更新の強制]にチェックを付けます。
■ 画面下の['origin'構成に仕様を保存]にチェックを付けます。
■ [完了]ボタンを押して下さい。
■ [保存とフェッチ]ボタンを押して下さい。
■ license-edits
が新しくフェッチされました。
■ [閉じる]ボタンを押して下さい。
[プロジェクト・エクスプローラー]でプロジェクト(hello-world)を右クリックして下さい。
■ [チーム][切り替え][新規ブランチ]を選択して下さい。
■ [選択…]ボタンを押します。
■ [リモートト・ラッキング]の中から origin/license-edits
を選択します。
■ [OK]ボタンを押して下さい。
■ [ブランチ名]と他の設定項目が自動でセットされます。
■ [完了]ボタンを押して下さい。
チェックアウト後、[プロジェクト・エクスプローラー]のプロジェクト名が[hello-world license-edits]
になり新しいブランチに自動的に変更されます。
チェックアウト後のEclipseのブランチの状態を再び[Gitリポジトリー]タブで表示して見ましょう。
license-edits
— LICENSE編集用のブランチ readme-edits
— README.md編集用のブランチ origin/license-edits
— LICENSE編集用のブランチorigin/master
— マスターブランチorigin/readme-edits
— README.md編集用のブランチ
Eclipse のローカル・ブランチに license-edits
が、リモート・トラッキングにも origin/license-edits
が増えています。
ここから先は、LICENSEファイルを編集してコミットし、基本の流れに従いプルリクエストを行ってマージします。
例えば、ブランチを license-edits
から readme-edits
に切り替えるには、以下のようにします。
[プロジェクト・エクスプローラー]でプロジェクト(hello-world)を右クリックして下さい。
■ [チーム][切り替え]からreadme-edits
を選択して下さい。
切り替え後、[プロジェクト・エクスプローラー]のプロジェクト名が[hello-world readme-edits]
に変わります。
今度は、Eclipseで新しいブランチを作り、そのブランチをプッシュします。
ブランチ名: hello-edits
手順としては
master
ブランチを取得する
master
がローカルに無ければチェックアウトするmaster
がローカルに有れば最新をプルするmaster
ブランチからhello-edits
ブランチを作るhello-edits
で編集する(コミット)hello-edits
を同名の上流ブランチにプッシュする
ここでは、masterブランチをGitHubからチェックアウトする所から始めます。詳細は、上述の「新しいブランチのチェックアウト」を参考にして下さい。以下はその抜粋です。
プロジェクト( hello-world )を右クリックして[チーム][切り替え][新規ブランチ…]を選択して下さい。
■ masterブランチを選択して [完了]ボタンを押して下さい。
■ masterブランチがチェックアウトされ、プロジェクトがmasterブランチに切り替わります。
既に、masterブランチをチェックアウトしている時は、プロジェクト( hello-world )を右クリックして [チーム][プル]を選択して、masterを最新の状態にします。プルが終了すると以下のダイアログが表示されます。
■ [閉じる]ボタンを押して下さい。
再び、プロジェクト( hello-world )を右クリックして[チーム][切り替え][新規ブランチ…]を選択して下さい。
■ [ブランチ名]に hello-edits
を入力します。
■ [プッシュおよびプルのアップストリームを構成する]は 未チェック にします。
■ [完了]ボタンを押して下さい。
■ プロジェクトが hello-edits ブランチに切り替わります。
新しいファイル( hello.php
)を作ります。
/hello-world
<?php echo 'Hello,World!';
ファイルを編集し終えたらステージングします。
■ [コメントメッセージ]を入力して[コミット]して下さい。
プロジェクト( hello-world )を右クリックして[チーム][ブランチのプッシュ 'hello-edits'…]を選択して下さい。
■ [宛先]のリモートとブランチはそのままで。
■ [プッシュおよびプルのアップストリームを構成する]にチェックを入れます。
■ [プレビュー]ボタンを押して下さい。
■ [プッシュ]ボタンを押して下さい。
■ [閉じる]ボタンを押して下さい。
新しいブランチ( hello-edits )が作成されているか、GitHubで確認してみましょう。
リポジトリ hello-world に移動します。まだ表示していない場合は、ダッシュボードの左サイドバーから hello-world を選択して下さい。
■ ファイルリストの右上に [4 branches]と表示されていて新しいブランチが増えていることが分かります。
■ また、新しくプッシュしたので、上部にも [Compare & pull request]のボタンも表示されています。
■ ブランチのプルダウン[Branch:master]をクリックして[hello-edits]を選択して下さい。
■ Eclipseからプッシュした hello.php
が追加されているのが確認できます。
GitHubでは、ブランチの履歴をネットワークグラフで見ることができます。リポジトリ hello-world 画面の[Insights]タブを選択した後、左サイドバーで[Network]を選択します。
前節「Eclipseで新しいブランチ作り、プッシュする」とは異なり、本節では、Eclipseで新しいブランチを作り、それを masterブランチにマージしてからプッシュします。結果は前節と同じですが、レビューを経ずに master に直接プッシュします。
ブランチ名: hello-edits2
手順としては
master
ブランチを取得する
master
がローカルに無ければチェックアウトするmaster
がローカルに有れば最新をプルするmaster
ブランチからhello-edits2
ブランチを作るhello-edits2
で編集する(コミット)hello-edits2
をmaster
にマージするmaster
をプッシュするmasterブランチに切り替えます。まだの時は、プロジェクト( hello-world )を右クリックして[チーム][切り替え][master]を選択して下さい。
masterブランチをまだチェックアウトしていない場合は、上述の「新しいブランチのチェックアウト」を参考にして下さい。
プロジェクト( hello-world )を右クリックして[チーム][プル]を選択します。
■ [閉じる]ボタンを押して下さい。
プロジェクト( hello-world )を右クリックして[チーム][切り替え][新規ブランチ…]を選択して下さい。
■ [ブランチ名]に hello-edits2
を入力します。
■ [プッシュおよびプルのアップストリームを構成する]は 未チェック にします。
■ [完了]ボタンを押して下さい。
■ プロジェクトが hello-edits2 ブランチに切り替わります。
ファイル( hello.php
)を編集します。
/hello-world
<?php echo 'Hello,World!\n'; echo 'This is y2sunlight from Japan.';
ファイルを編集し終えたらステージングした後に、[コミット]します。
マージでは、マージされる方のブランチを表示して作業します。
プロジェクト( hello-world )を右クリックして[チーム][切り替え][master]を選択し、master
ブランチへ切り替えます。
[チーム]で[マージ]を選択します。
■ マージするブランチ hello-edits2
を選択します。
■ [マージ]ボタンを押して下さい。
■ マージが終了しました。
■ [閉じる]ボタンを押して下さい。
マージしたmasterブランチをアップストリームにプッシュします。
プロジェクト( hello-world )を右クリックして[チーム][アップストリームへブッシュ]を選択します。
■ プッシュが終了しました。
■ [閉じる]ボタンを押して下さい。
プッシュされているかGitHubで確認してみましょう。
リポジトリ hello-world に移動します。まだ表示していない場合は、ダッシュボードの左サイドバーから hello-world を選択して下さい。
■ ファイルリストの右上に [10 commits]と表示されていて新しいコミットが増えているが分かります。
■ [10 commits]をクリックして選択して下さい。(数字の10は例です。別の数字かもしれません)
■ コミット履歴の先頭( hello.phpの修正
)が、前項でmasterに直接プッシュした履歴です。
また、ブランチのネットワークグラフは以下のようになっています:
masterに直接プッシュしたので、作業用のブランチはなく、masterのブランチの上にコミットの履歴が乗っています。