【GitHub】cloneとpullの違いとは?どっちでデプロイするか
この記事からわかること
- GitHubからファイルをダウンロードするコマンド
- cloneとpullの違い
- cloneとpullを使うタイミングと意味
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
GitHub上にあるWebアプリのファイル群を本番環境にダウンロードするコマンドである、clone
とpull
。
初心者だと両者の違いが分からず、どっちをどのタイミングで使えば良いのか迷ってしまいました。
今回はとpullの違いと使い方をまとめていきたいと思います。
Git cloneとpullの違い
2つのコマンドはGitHub上(リモートリポジトリ)にあるファイルを実行した環境にコピーするという点は同じ役割をもっています。
2つの違いはコピーするファイルの状態です。
- clone:ファイルを全てコピーする
- pull:ローカル側とリモート側で、差異がある(更新されている)ファイルを全てコピーする
cloneコマンドの意味と使い道
$ git clone リポジトリのURL
clone
はクローン(コピー/複製)の言葉通りリモートリポジトリに存在する全てのファイル群の複製をカレントディレクトリに作成します。
git clone
の引数にGitHub上のリモートリポジトリのURLを渡します。
実行することでカレントディレクトリにURL末尾名(リポジトリ名)のディレクトリと「.git」ファイルが作成されます。「.git」ファイルの中にバージョン管理履歴が保存されていきます。
カレントディレクトリに同名のディレクトリが既にある場合はclone
は使えません。
なので一番最初のダウンロード時に使用するコマンドになります。
リモートリポジトリが非公開設定の場合はコマンド実行にユーザ名とパスワード(Personal access tokens)が必要になります。
cloneのまとめ
- リモートリポジトリのファイル群を全て複製するコマンド
- 引数にはリポジトリURL
- 実行後「リポジトリ名のディレクトリ」と「.git」ファイルが作成
- 既に同名のディレクトリがある場合は使用不可
- 非公開設定のリポジトリの場合はユーザー名とパスが必要
- 一番最初のみ実行するコマンド
pullコマンドの意味と使い道
$ git pull リモートリポジトリ名 ブランチ名
pull
はリモートリポジトリ上の更新されているファイルのみをカレントディレクトリにコピー(上書き)できるコマンドです。コピーするファイルはブランチ単位で指定可能(デフォルトブランチであればmaster
)です。
$ git pull origin master
ローカルでブランチごとにステージング→コミット→プッシュしたものがリモートリポジトリにブランチ単位で保存されていくので引数に特定のブランチを指定することで特手の更新のみ上書きすることも可能です。
つまりpullコマンド
は2回目以降にファイルを更新するたびに実行していくコマンドになります。
こちらも同様にリモートリポジトリが非公開設定の場合はコマンド実行にユーザ名とパスワード(Personal access tokens)が必要になります。
pullのまとめ
- リモートリポジトリの更新されているファイルのみを上書き
- 引数にはリモートリポジトリ名とブランチ名
- 既に同名のディレクトリがある場合でも使用可能
- 非公開設定のリポジトリの場合はユーザー名とパスが必要
- 2回目以降の更新時に実行するコマンド
また一度pullコマンドを実行していれば、引数なしでも前回と同じブランチを実行してくれます。
pullコマンドの中身はfetchとmerge
pullコマンドは実は内部的に2つのコマンド「fetch」と「merge」を実行しています。「pull」=「fetch + merge」ということです。
- fetch:リモートのブランチをローカルの追跡ブランチに取得するコマンド
- merge:ローカルの追跡ブランチをローカルのブランチと結合するコマンド
この2つを理解するためにローカルとリモートのブランチ構造を整理しておきます。
ブランチとは「変更履歴」のこと。ブランチは複数作ることができ、例えばローカルで「機能追加用のブランチ」と「エラー修正用のブランチ」といったようにファイル編集の目的によってブランチを分けることができます。
そしてそのローカルブランチ達をGitHub(リモートリポジトリ)にpushして登録していきます。
そしてリモートリポジトリのブランチを本番環境(別のローカル)にコピーするときに「pull」=「fetch + merge」を使います。
その際は「リモートブランチ→リモート追跡ブランチ→ローカルブランチ」という流れでコピーしていきます。「リモート追跡ブランチ」とはローカルリポジトリにありリモートブランチの状態変化を追跡しているブランチです。
$ git fetch origin master
fetchコマンドを実行することでリモートブランチ(master)の情報をローカルのリモート追跡ブランチ(origin/master)に取得させることができます。
$ git merge origin/master
続いてmergeコマンドを実行することで実際にリモート追跡ブランチ(origin/master)とローカルのブランチ(master)を結合させることで変更部分を更新しています。
この2つのコマンドをまとめて実行してくれているのがpullコマンド
なのです。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。