ローカルリポジトリとリモートリポジトリ
リポジトリとは、ファイルやディレクトリの履歴を管理する場所のことです。
自分のパソコン内でバージョン管理するために作成したリポジトリ(Gitで指定したフォルダ)をローカルリポジトリといいます。
一方BitbucketやGithubに作成したリポジトリをリモートリポジトリといいます。
ローカルリポジトリは自分のパソコン内のリポジトリ指定たフォルダ内のファイルをバージョン管理し、リモートリポジトリはネット上にファイルをアップロードした状態でファイル管理するものです。
その関係上、リモートリポジトリを作成したら、ローカルリポジトリと同期する必要が出てきます。
その同期する方法が「プッシュ」であったり、「プル」です。
プッシュとプル
「プッシュ」はローカルリポジトリでバージョン管理していたファイルをアップロードすることです。ローカルのファイルの方が新しい内容なら、リモートリポジトリの内容はローカルのファイル内容に上書きされます。逆にリモートの方がローカルの内容より新しい場合、または同じ内容の場合は何も行われません。
「プル」はリモートリポジトリで管理していたファイルをダウンロードします。リモートのファイルの方が新しい内容なら、ローカルリポジトリの内容はリモートのファイル内容に上書きされます。逆にローカルの方がリモートの内容より新しい場合、または同じ内容の場合は何も行われません。
「プル」を行うとリモートリポジトリの状態がSourceTreeで確認できるようになります。ただし、これはリアルタイムに変更されるものではなく、「プル」した状態を確認できるだけです。従って「プル」した後、リモートリポジトリに誰か共同作業者が「プッシュ」して履歴を新規に作成したとしたらその履歴はまだローカルのSourceTreeでは見えてない状態です。
その後「プル」して新しい履歴とローカルの履歴を「マージ」することになります。「プル」はデータをリモートからダウンロードすると同時に「マージ」する機能も持ち合わせています。
もし、「マージ」するのではなくリモートリポジトリの履歴を追跡するだけにしたい場合は、「フェチ」を実行します。
「フェチ」を行う事でその時点のローカルとリモートの履歴の状態を比較できます。
originとmaster
コミットの履歴を見ると「origin」とか「master」と出ています。
「origin」とはリモートリポジトリのデフォルトで付けられた名前です。つまりネット上のリポジトリを置くサーバーです。
masterはブランチの名前です。「origin/master」の表示はリモートリポジトリサーバーのmasterブランチのことです。
「master」だけの場合はローカルリポジトリのmasterブランチのことです。
headについて
「HEAD」とは、ブランチの先頭を表す名前で、デフォルトではローカルリポジトリのmasterの先頭を表しています。
「origin/HEAD」はリモートリポジトリのHEADの位置を表します。
SourceTreeでローカルリポジトリからリモートリポジトリの追跡状態を確認
Macの場合はローカルリポジトリがリモートより先行してコミットされている場合[*ahead]と表示されます。逆にリモートよりローカルのコミットが遅れて居る場合は[*behind]と表示されます。(*はコミット数の数字を表示)
(2016/7/22現在の表示例)表示が日本語か英語の違いは今後のアップデートで変更になるかもしれません。
ここで、Macで作業するAさんとWindowsで作業するBさんが居たとして、それぞれの作業内容を「SourceTree」の履歴で確認します。
すでにリモートリポジトリは用意されて使用している途中と仮定します。
最初にAさんがMacでHTMLの一部を削除する編集しました。リモートリポジトリより作業が進んでいるので、SourceTreeの履歴に[1ahead]の印が付きます。
また、「プッシュ」ボタンに1つプッシュする内容があることを知らせる「1」の数字が表示されています。
BさんのPCは特に何もしてないので履歴は変わりません。SourceTreeの表示にも変化はありません。
AさんのMacはリモートとローカルの履歴を合わせるために、「プッシュ」の操作を行います。SourceTreeの履歴はリモートとローカルが同じ状態になります。
一方BさんのPCのSourceTreeに変化はありません。ここでリモートの変化を知るために「フェチ」を行います。
origin/masterの方が先行しており、現在のローカルの履歴は[1コミット遅れ]と表示されています。更に「プル」する必要があることを知らせるように「プル」ボタンに「1」の数字が表示されています。
Bさんは「プル」ボタンでリモートとローカルの履歴を同期しました。これでリモートリポジトリとAさん、Bさんのそれぞれのローカルリポジトリの履歴が同期された状態になりました。
今度はBさんがPCで作業を行い、HTMLを更新しました。コミットすると[1コミット先行]と表示され、「プッシュ」に「1」の数字が付いています。
Bさんが「プッシュ」したあとにAさんがMacでSourceTreeで「フェチ」して確認したら[1behind]と表示され「プル」ボタンに「1」の数字が付いています。
Aさんが「プル」すると履歴はリモートとAさん、Bさんのローカルリポジトリの履歴は同一になりました。
コメントを投稿するにはログインしてください。