ローカルリポジトリとリモートリポジトリについて〜SourceTreeでGitを使う

lecture
スポンサーリンク

ローカルリポジトリとリモートリポジトリ

リポジトリとは、ファイルやディレクトリの履歴を管理する場所のことです。
自分のパソコン内でバージョン管理するために作成したリポジトリ(Gitで指定したフォルダ)をローカルリポジトリといいます。
一方BitbucketやGithubに作成したリポジトリをリモートリポジトリといいます。
ローカルリポジトリは自分のパソコン内のリポジトリ指定たフォルダ内のファイルをバージョン管理し、リモートリポジトリはネット上にファイルをアップロードした状態でファイル管理するものです。

ローカルリポジトリ
mac_dog

リモートリポジトリ
mac_dog1

その関係上、リモートリポジトリを作成したら、ローカルリポジトリと同期する必要が出てきます。
その同期する方法が「プッシュ」であったり、「プル」です。

プッシュとプル

「プッシュ」はローカルリポジトリでバージョン管理していたファイルをアップロードすることです。ローカルのファイルの方が新しい内容なら、リモートリポジトリの内容はローカルのファイル内容に上書きされます。逆にリモートの方がローカルの内容より新しい場合、または同じ内容の場合は何も行われません。
「プル」はリモートリポジトリで管理していたファイルをダウンロードします。リモートのファイルの方が新しい内容なら、ローカルリポジトリの内容はリモートのファイル内容に上書きされます。逆にローカルの方がリモートの内容より新しい場合、または同じ内容の場合は何も行われません。

「プル」を行うとリモートリポジトリの状態がSourceTreeで確認できるようになります。ただし、これはリアルタイムに変更されるものではなく、「プル」した状態を確認できるだけです。従って「プル」した後、リモートリポジトリに誰か共同作業者が「プッシュ」して履歴を新規に作成したとしたらその履歴はまだローカルのSourceTreeでは見えてない状態です。
その後「プル」して新しい履歴とローカルの履歴を「マージ」することになります。「プル」はデータをリモートからダウンロードすると同時に「マージ」する機能も持ち合わせています。
もし、「マージ」するのではなくリモートリポジトリの履歴を追跡するだけにしたい場合は、「フェチ」を実行します。
「フェチ」を行う事でその時点のローカルとリモートの履歴の状態を比較できます。

originとmaster

コミットの履歴を見ると「origin」とか「master」と出ています。
git02
「origin」とはリモートリポジトリのデフォルトで付けられた名前です。つまりネット上のリポジトリを置くサーバーです。
masterはブランチの名前です。「origin/master」の表示はリモートリポジトリサーバーのmasterブランチのことです。
「master」だけの場合はローカルリポジトリのmasterブランチのことです。

headについて

「HEAD」とは、ブランチの先頭を表す名前で、デフォルトではローカルリポジトリのmasterの先頭を表しています。
「origin/HEAD」はリモートリポジトリのHEADの位置を表します。
git04

SourceTreeでローカルリポジトリからリモートリポジトリの追跡状態を確認

Windowsでローカルリポジトリがリモートより先行してコミットされている場合[*コミット先行]と表示されます。逆にリモートよりローカルのコミットが遅れて居る場合は[*コミット遅れ]と表示されます。(*はコミット数の数字を表示)
Macの場合はローカルリポジトリがリモートより先行してコミットされている場合[*ahead]と表示されます。逆にリモートよりローカルのコミットが遅れて居る場合は[*behind]と表示されます。(*はコミット数の数字を表示)
(2016/7/22現在の表示例)表示が日本語か英語の違いは今後のアップデートで変更になるかもしれません。

ここで、Macで作業するAさんとWindowsで作業するBさんが居たとして、それぞれの作業内容を「SourceTree」の履歴で確認します。
すでにリモートリポジトリは用意されて使用している途中と仮定します。

最初にAさんがMacでHTMLの一部を削除する編集しました。リモートリポジトリより作業が進んでいるので、SourceTreeの履歴に[1ahead]の印が付きます。
また、「プッシュ」ボタンに1つプッシュする内容があることを知らせる「1」の数字が表示されています。
git13

BさんのPCは特に何もしてないので履歴は変わりません。SourceTreeの表示にも変化はありません。
git14

AさんのMacはリモートとローカルの履歴を合わせるために、「プッシュ」の操作を行います。SourceTreeの履歴はリモートとローカルが同じ状態になります。
git15

一方BさんのPCのSourceTreeに変化はありません。ここでリモートの変化を知るために「フェチ」を行います。
origin/masterの方が先行しており、現在のローカルの履歴は[1コミット遅れ]と表示されています。更に「プル」する必要があることを知らせるように「プル」ボタンに「1」の数字が表示されています。
git16

Bさんは「プル」ボタンでリモートとローカルの履歴を同期しました。これでリモートリポジトリとAさん、Bさんのそれぞれのローカルリポジトリの履歴が同期された状態になりました。
git17

今度はBさんがPCで作業を行い、HTMLを更新しました。コミットすると[1コミット先行]と表示され、「プッシュ」に「1」の数字が付いています。
git18

Bさんが「プッシュ」したあとにAさんがMacでSourceTreeで「フェチ」して確認したら[1behind]と表示され「プル」ボタンに「1」の数字が付いています。
git19

Aさんが「プル」すると履歴はリモートとAさん、Bさんのローカルリポジトリの履歴は同一になりました。

タイトルとURLをコピーしました