2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Git】なぜリモートからの取得はGitで「pull」、集中型では「checkout」と呼ばれるのか

Posted at

はじめに

Gitを学び始めると、SVNやCVSといった集中型バージョン管理との用語の違いに戸惑う人は多いでしょう。
SVN:リモートから取得 → checkout(チェックアウト)
SVN:リモートに登録 → commit(コミット)
Git:リポジトリから取得 → pull(プル)
Git:リポジトリに登録 → push(プッシュ)

どちらも「リポジトリからコードを持ってくる」操作なのに、なぜ言葉が違うのでしょうか?

なぜ用語が違うのか?

集中型における「checkout」と「commit」

Subversion(SVN)では、リポジトリは中央にひとつしか存在せず、開発者はそこからコードを取得して作業します。

svn checkout

→ 中央リポジトリからソースを展開して作業ディレクトリを作る

その後の更新もupdateやcommitを通じて、常にリモートのリポジトリと直接やり取りします。

イメージ
image.png

分散型における「pull」と「push」

一方、Gitは最初にcloneすると、リポジトリそのもの(履歴込み)が手元にコピーされます。
ローカルにすでにリポジトリがある

リモートからは「新しい履歴を同期」するだけ

この「履歴を引っ張ってくる」動作を表すのがpullです。
単にファイルをコピーするわけではないため、SVNと同じ「checkout」や「commit」という言葉は使われず、「リモートから履歴ごと引き寄せる」=pull、「履歴ごとリモートに登録する」=pushという表現が選ばれました。

イメージ
image.png

本質的には一緒?

ここまで読むとGitではcheckoutの代わりにpull、commitの代わりにpushを実行していると思えるかもしれません。
しかし、実は本質的にはGitとSVNは変わりません。
実はGitにもcheckoutもcommitが存在します。

Gitではローカルのリポジトリから特定のコミットからソースコードを作業ツリーに展開することをcheckout(チェックアウト)と言い
修正内容をローカルのリポジトリに履歴として登録することをcommit(コミット)と言います

つまり本質的にはcheckoutもcommitもリモートへの作業ではなくリポジトリ本体への作業と言えます。

これはGitでもSVNでも同じです。
違うのは、Gitでは「リポジトリ自体をローカルに持てる」ため、リモート操作に新しい言葉(pull/push)が割り当てられただけなのです。

image.png

まとめ

  • SVNは常に中央リポジトリと直接やり取り → checkout / commit
  • Gitはリポジトリをローカルに保持 → ローカルはcheckout / commit、リモート操作にはpull / push
  • 用語は違っても、本質的には「取得=checkout」「登録=commit」という構造は共通

つまり「なぜ用語が違うのか?」の答えは、
リポジトリをどこに持つか(中央のみか、分散か)の違いを表現するため
です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?