Gitが、おもしろいほどわかる基本の使い方33_Chapter2-02 | デザインってオモシロイ -MdN Design Interactive-

Gitが、おもしろいほどわかる基本の使い方33_Chapter2-02

2024.4.19 FRI

【サイトリニューアル!】新サイトはこちらMdNについて

Gitが、おもしろいほどわかる基本の使い方33

[Chapter2-02]

Bitbucketにプッシュしてみよう


Chapter1では本書のデモリポジトリをフォークしたものを手元のローカルな環境にクローンしました。前節のコミット操作は、このクローンしたローカルのリポジトリに対して行ってきたわけです。ここでは、ローカルのリポジトリに加えた変更を、Bitbucket 上のリモートリポジトリに反映させる方法を説明します。
2015年7月22日/TEXT:大串 肇

Git



■ローカルリポジトリの変更をリモートリポジトリに反映させる

 前節では、自分のPCにあるローカルリポジトリ上で、ファイルの追加・削除、ファイルの内容の変更などをSourceTreeを利用して、コミット履歴に残してきました。このローカルリポジトリは、Bitbucket下で、本書のデモリポジトリを、自分のアカウントにフォークしたものを、さらに手元のPCにクローンしたリポジトリです(本書P.036「1-07 本書のデモリポジトリを利用する」)。

 ここで、これまで行ってきた変更を、Bitbucket のフォークしたリポジトリ(リモートリポジトリ)に反映させてみましょう。このように変更をほかのリポジトリ(多くはリモートリポジトリ)に反映する操作を「プッシュ」(push)といいます。

 なお、逆にリモートリポジトリの最新の状態を、手元のローカルリポジトリに反映させる作業を「プル」(pull)といいます。




■プッシュ(Push)とプル(Pull)

 前述したようにローカルリポジトリからリモートリポジトリへ、変更履歴をアップロードするときにはプッシュ(push)を利用します。現在のローカルリポジトリの状態がリモートリポジトリのコミットよりも進んでいる場合、pushを行うとローカルリポジトリにおいてコミットした内容が、リモートリポジトリに反映されます。ファイルのアップロードに近いイメージです。ローカルリポジトリの状態がリモートリポジトリよりも遅れていたり、同じ場合は何も反映されません。

 一方、リモートリポジトリから、ローカルリポジトリへ変更履歴を取得するときにはプル(pull)を利用します。現在のローカルリポジトリの状態よりもリモートリポジトリのコミットが進んでいた場合は、それらがローカルリポジトリに反映されます。ファイルのダウンロードに近いイメージです。ローカルリポジトリの状態がリモートリポジトリよりも進んでいたり、同じ場合は何も反映されません【図1】 。

 push、pullともに、それぞれ反映されるのはコミット単位となります。


プッシュ(Push)とプル(Pull)

【MEMO】フェッチ(fetch)とマージ(merge)
ローカルのリポジトリでは、リモートリポジトリの状態を最後に取得したときの情報を保持します。ローカルでの作業と、リモートリポジトリの状態との差異は、この情報で計られます(次ページ「originとmaster」参照)。しかし、実際のリモートリポジトリのほうではほかの人の作業などが反映されて、状態が変更されているかもしれません。そこで、リモートリポジトリの最新の状態を取得する作業が必要となります。これがフェッチ(fetch)です。ただし、フェッチはリモートリポジトリに関する情報を更新するだけで、ローカルの状態をそれに合わせるわけではありません。ローカルの状態を、取得した最新のリモートリポジトリの状態に合わせるにはマージ(merge)という操作が必要になります。実はプル(pull)は、このフェッチとマージを合わせた操作になっています。詳しくは「リモートブランチの同期(Fetch)」(本書のP.144)を参照してください。




■originとmaster

 ここまで進めてきたSourceTreeのコミット履歴を見てみましょう。「origin/master」と「master5コミット先行」という箇所が見られます【図2】。「origin/master」の「origin」とは、リモートリポジトリの場所(URL)の別名です。本書ではBitbucketのリポジトリのことです。「master」とはリモートリポジトリのブランチの名前です。いずれもGit のデフォルト設定でつけられた名前です。

 一方、「master5コミット先行」の「master」はローカルリポジトリのブランチです(これもGit のデフォルト設定名です)。じつは前節のコミット操作はローカルのmaster に対して行ってきたものです。そのため、クローンした時点では同じ状態にあったorigin/masterブランチとローカルのmasterブランチですが、そのあとのローカルのmasterブランチにおけるコミット操作の結果、ずれが生じてしまったわけです。

 「master5コミット先行」という表示はそのことを示しています。origin/master つまりBitbucket 上のmasterブランチに比べて、ローカルのmasterブランチが5コミット分先行していますよ、ということです。


「origin/master」ブランチと「master」ブランチ



■Bitbucketのリモートリポジトリにプッシュ(push)する

プッシュの設定

ローカルリポジトリとリモートリポジトリのコミットが揃う"  先行しているコミットをリモートリポジトリに反映させるためにプッシュ(push)を行ってみましょう。SourceTree上部のアイコンメニューにある「プッシュ」ボタンをクリックすると 、設定ダイアログが開きます【図3】。

 「プッシュ先」のリポジトリは「origin」、「ブランチ」は「master」となっていますので、そのまま「OK」をクリックします。あっけないですが、これでpushは完了です。

 コミット履歴を見てみると「origin/master」「origin/HEAD」となっているところがコミットの一番新しいローカルリポジトリの「master」と揃ったことがわかります【図4】。

 つまり、ローカルリポジトリでのコミットが、問題なくリモートリポジトリに反映され、ローカルリポジトリと同じところまでリモートリポジトリが進んだということがわかります。




■Bitbucket上で確認

 プッシュ(push)した内容が正しくリモートリポジトリに反映されたかどうか、Bitbucket 上の表示とSourceTreeを見比べながら確認してみましょう。ブラウザでBitbucket にログインして、フォークしたリポジトリのページを表示し、左のメニューより「コミット」をクリックします。右側に反映されたコミットの一覧が表示されます【図5】。SourceTreeのコミットと見比べると、同じ数と内容とコミットが確認できます【図6】。正しく反映されたようです。

 Bitbucket 上でもコミットのID番号をクリックすると、変更したファイルとその変更箇所が表示されます【図7】。SourceTreeと同様に追加された内容は緑、削除された内容は赤で示されていることが確認できます。


Bitbucket上のリモートリポジトリ SourceTree上のローカルリポジトリ

Bitbucket上のリモートリポジトリのコミットを確認



■コミットと同時にプッシュする

コミットと同時にプッシュ"  SourceTreeではコミット時に、コミットメッセージ欄の下の「変更をすぐに~にプッシュする」(Macでは「コミットを直ちにプッシュする」)をチェックしておくことで、コミットと同時にプッシュすることができます【図8】。こまめにプッシュすることで、ほかの作業者とのコンフリクト(「3-04 コンフリクトはなぜ起こる?」本書P.090参照)を避けることも可能になります。特にプロジェクトでのルールがなければ、コミットと同時にプッシュを行いましょう。




■Bitbucketのリモートリポジトリからプル(Pull)する

「プル」ボタン

プルの設定ダイアログ"  ひとりで作業している場合は、自分以外にリモートリポジトリを操作する人はいませんので、リモートリポジトリからプル(pull)する必要はないかもしれません。しかし、複数のメンバーがかかわるプロジェクトでは、ほかの人がプッシュしてリモートリポジトリのコミットを進めることがあるでしょう。そこで、リモートリポジトリをプル(pull)【図9】して、自分のローカルリポジトリを最新の状態に更新する必要があります。

 プルを行うにはツールバーの「プル」ボタンをクリックすると、プルの設定を行うダイアログが表示されます。「次のリモートからプル」「プルするリモートブランチ」の設定は、ブランチが複数に分岐している場合は必要ですが、ここではブランチは分岐していないので、初期設定のままでよいでしょう【図10】。

 「OK」をクリックするとプルが行われます。リモートリポジトリ側でローカルリポジトリのコミットより先のコミットがある場合は取り込まれます。


【MEMO】コンフリクト
複数のメンバーがかかわるリポジトリでは、お互いに同じファイルの同じ場所を修正してプッシュしようとすると、「コンフリクト」が発生します。また、プルの場合も、コミット情報のマージ時に、自分のコミットとぶつかるのでコンフリクトが発生します。このような場合はプッシュもプルもできなくなります。コンフリクトしたときの解決策、またコンフリクトの回避策については「3-04 コンフリクトはなぜ起こる?」(本書P.090)で説明しています。





株式会社サイバーエージェント 【BOOKS紹介】
バージョン管理システム「Git」の入門書。はじめて使う方でも業務に取り入れやすいよう、「これだけは覚えておきたい機能」に絞り込んで解説しました。SourceTree(GUIツール)とホスティングサービス・Bitbucketを用いた解説内容になっており、初心者の方でもGitやSourceTreeを活用する状況をイメージしやすいよう、イラストや図、実際のツール画面を豊富に掲載。実制作や業務の中に手軽にGitを取り入れ、生産性を向上したいという方に最適の1冊です。


●書籍ページ:http://www.mdn.co.jp/di/book/3214203010/
●Amazon:http://www.amazon.co.jp/exec/obidos/ASIN/4844365010/mdndi-22/
twitter facebook このエントリーをはてなブックマークに追加 RSS
【サイトリニューアル!】新サイトはこちらMdNについて

この連載のすべての記事

アクセスランキング

8.30-9.5

MdN BOOKS|デザインの本

Pick upコンテンツ

現在