gitのプルとクローンの違いは何ですか?


237

実行することの違いは何ですか(後mkdir repocd repo):

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

そして

git clone git://github.com/cmcculloh/repo.git

つまり、明らかに短い方ですが、それ以外は基本的に同じことをしていますか?

回答:


122

クローンがマスターだけでなく、追加のリモート追跡ブランチをセットアップすることを除いて、それらは基本的に同じです。manページをチェックしてください

新しく作成されたディレクトリにリポジトリを複製し、複製されたリポジトリ(gitブランチ-rを使用して表示)内の各ブランチのリモート追跡ブランチを作成し、複製されたリポジトリの現在アクティブなブランチからフォークされた初期ブランチを作成してチェックアウトします。


10
git fetch --allは追加のリモート追跡ブランチをセットアップするため、基本的には同じです。
cmcculloh

251

git clone既存のリポジトリのローカルコピーを取得する方法です。リポジトリの複数の作業用コピーが必要な場合を除き、通常は特定のリポジトリに対して1回だけ使用されます。(または、ローカルのものを台無しにした後でクリーンなコピーを取得したい...)

git pull(またはgit fetch+ git merge)は、リモートリポジトリからの新しいコミットでローカルコピーを更新する方法です。他のユーザーと共同作業している場合は、頻繁に実行するコマンドです。

最初の例が示すように、git clone他のgitコマンドの組み合わせでエミュレートすることは可能ですgit pullが、「基本的に同じこと」git clone(またはその逆)を行っているのは実際にはそうではありません。


4
具体的には、「git pull」を伴う一連のコマンドでは達成されない、git cloneが行っていることは何ですか?
cmcculloh

21
@cmcculloh:何も-あなたが記述したシーケンスは「git clone」が何をするかを効果的に達成します。重要なのは、「git pull」は、そこで行ったこと以外にもさまざまなことを行うために使用されるということです。「git pull」は実際には「git fetch; git merge <current branch> <origin /現在のブランチ> "。IOW、本当に必要な場合はクローンなしプルしてプルできます。さらに、クローン元以外のリポジトリからプルすることもできます。私は「クローン」を「そのリポジトリのローカルコピーを作成する」と考え、「プル」を「特定のリモートからアップデートを取得する」と考えたいと思います。
ebneter

120

素人の言葉で言うと:

  • クローン:リモートリポジトリの作業用コピーを取得します。
  • プル:私はこれに取り組んでいます。他の人によって更新される可能性のある新しい変更を入手してください。

3
私が考えるあなたのプル定義はまたのために言うことができるクローン
henrywright

10
クローンしていないものにどのように取り組むことができますか?
Jyoti Prakash

どういう意味かわかりませんか?
henrywright

@henrywright希望、ebneterの回答があなたの質問に対処します
Mrk

41

git clone システムにリポジトリのコピーを作成していることを意味します。

git fork リポジトリをGithubアカウントにコピーしていることを意味します。

git pull 最後に変更されたリポジトリを取得していることを意味します。

git push 変更後にリポジトリを返すことを意味します。

素人の言葉で:

git cloneダウンロード中、git pull更新中です。


9

clone:リモートサーバーリポジトリをローカルマシンにコピーします。

pull:ローカルマシンに追加された新しい変更を取得します。

これが違いです。

クローンは通常、リモートリポジトリのコピーを取得するために使用されます。

チームで作業している場合、プルは他のチームメイトが追加したコードを表示するために使用されます。


5

git cloneは、リモートサーバーリポジトリで現在動作しているものを正確にダウンロードし、そのプロジェクトが配置されているマシンのフォルダーに保存するために使用されます。ほとんどの場合、初めてプロジェクトをアップロードするときにのみ使用されます。その後、プルする方が良いオプションです。

git pullは基本的に(clone(download)+ merge)操作であり、チームワークとして作業しているときに主に使用されます。つまり、そのプロジェクトで最近の変更が必要な場合は、プルできます。


3

ミス・クローン:私はローカルに新しいコピーを手に入れました。

プル氏:私はすでにローカルに持っているので、更新するだけです。


ミス・クローン:私はあなたがすることをすることができます!あなたは私のサブセットです。

プル氏:同上!


ミス・クローン:いいえ、あなたは作成しません。これが私がすることです:

  1. 空のベアリポジトリを作成する
  2. リモート追跡ブランチに入力する
  3. 引数なしでgit fetchを実行する

あなたは#3を行うだけで、それからマージする必要はありません(私のものは新鮮です)。

プル氏:スマーティーパンツ、大したことはありません。最初に「git init」を実行します。それから私たちは同じです。さらに、既存のリポジトリに追加の「マージ」機能があります!これにより、Gitで最もよく使用されるコマンドになります;)


Gitクリエーター:馬を引っ張るプル氏、-bareまたは--mirrorがcloneまたはinitで使用されている場合、マージは行われません。読み取り専用のままです。


過小評価された答え。
sinekonata

2

うーん、プルしたとき、リモートブランチ "4.2"を表示するには何が欠けていますか。何かが明らかに同一ではありません。

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

私もこれに気付いたので、時間の経過に伴うgitのデフォルトの変更が問題であると疑っています。Windowsでは1.9.5.msysgit、Macでは2.3.2-applegit-55を使用しています。
AnneTheAgile

2

git clone URL --->完全なプロジェクトまたはリポジトリは、別のディレクトリとしてダウンロードされます。変更だけでなくgit pull URL --->フェッチ+マージ->プロジェクト全体ではなく、行われた変更のみをフェッチします


1

このgit fetchコマンドはサーバー上にまだ存在しないすべての変更をフェッチしますが、作業ディレクトリをまったく変更しません。単にデータを取得して、自分でマージできるようにします。ただし、ほとんどの場合、git pull本質的にgit fetchすぐ後に続くというコマンドがありgit mergeます。

続きを読む:https : //git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling


1
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
ekad

0

クローン -:ローカルマシンにリモートリポジトリプロジェクトの完全に重複したコピーを作成します。

プル -:2人以上のユーザーが同じリポジトリを共有しているとします。(別の人の名前がSyamであるとします)(リポジトリとは、Githubでプロジェクトが存在する場所です)したがって、Syamがローカルの同じプロジェクトでいくつかの変更を行い、それをリモートリポジトリにプッシュすると、Syamが行った変更はすべて、あなたの地元では反映されません。したがって、ローカルでこれらの新しい変更を反映するには、git pullを使用する必要があります。全体的に、プロジェクトの更新にはgit pullを使用します。

したがって、基本的にはgit cloneを1回だけ使用しますが、git pullは何度も使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.