2010-09-01 3 views
160

Какая разница между выполнением (после mkdir repo и cd repo):В чем разница между pull и clone в git?

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 

Я имею в виду, очевидно, одна короче, но кроме этого они в основном делают то же самое?

ответ

85

Они в основном такие же, за исключением того, что клон настраивает дополнительные удаленные ветви отслеживания, а не только мастер. Отъезд man page:

Клоны репозиторий в созданный каталог, создает филиалы удаленного отслеживания для каждой ветви в клонированных хранилище (просматриваться с помощью мерзавец ветви -r), а также создает и проверяет начальную ветвь, разветвляется из активной ветви клонированного репозитория.

+6

git fetch - all настраивает дополнительные удаленные ветви отслеживания, поэтому в основном они одинаковы. – cmcculloh

167

git clone как получить локальную копию существующего репозитория. Обычно он используется только один раз для данного репозитория, если только вы не хотите иметь несколько рабочих копий. (Или хочу, чтобы получить чистую копию после того, как Мессинг местного один ...)

git pull (или git fetch + git merge), как вы обновления, что локальная копия с новыми фиксациями из удаленного хранилища. Если вы сотрудничаете с другими, это команда, которую вы будете выполнять часто.

Как ваш первый пример показывает, что можно эмулировать git clone с ассортиментом других команд Git, но это не совсем так, что git pull делает «в основном то же самое» как git clone (или наоборот).

+4

Что конкретно это делает git clone, что не выполняется с помощью последовательности команд, которые включали «git pull»? – cmcculloh

+17

@cmcculloh: Ничто - последовательность, которую вы описываете, эффективно выполняет то, что делает «git clone». Дело в том, что «git pull» используется для выполнения множества вещей, помимо того, что вы там делали - не говоря уже о том, что «git pull» на самом деле представляет собой комбинацию «git fetch: git merge ". IOW, вы могли бы жить без клонирования * и * тянуть, если вы действительно этого хотели. Кроме того, вы можете вытащить из репозиториев, кроме тех, с которых вы клонировали. Мне нравится думать о том, что «клонировать», как «сделать мне локальную копию этого репо» и «тянуть», как «получить мне обновления с определенного указанного пульта». – ebneter

79

В мирян языке мы можем сказать:

  • Clone: Получить рабочую копию удаленного хранилища.
  • Pull: Я работаю над этим, пожалуйста, принесите мне новые изменения, которые могут быть обновлены другими пользователями.
+3

Я _think_ ваше определение __Pull__ также можно сказать для __Clone__ – henrywright

+5

Как вы можете работать над тем, что вы не клонировали? –

+0

Я не понимаю, что вы имеете в виду? – henrywright

1

Хм, чего не хватает, чтобы увидеть удалённую ветвь «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 
+0

Я тоже этого не заметил, и я подозреваю, что изменения в дефолтах git с течением времени являются проблемой. У меня 1.9.5.msysgit на windows и 2.3.2-applegit-55 на mac. – AnneTheAgile

1

Хотя мерзавец выборки команда загрузит вниз все изменения на сервере, который вы еще не имеют, это не изменит рабочий каталог на всех. Он просто получит данные для вас и позволит вам объединить его самостоятельно. Тем не менее, есть команда, называемая git pull, которая по сути является git-извлечением, за которым сразу следует слияние git в большинстве случаев.

https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – ekad

2

Git клон означает, что вы делаете копию репозитория в вашей системе. Git fork означает, что вы копируете репозиторий в свою учетную запись Github. Git pull означает, что вы извлекаете последний модифицированный репозиторий. Git push означает, что вы возвращаете репозиторий после его модификации.

В терминологии Лэймана Git clone загружается, и Git pull освежает.

1

клон: копирование удаленного репозитория сервера на локальный компьютер. pull: получите новые изменения, добавленные на ваш локальный компьютер. В этом разница. Клон обычно используется для получения копии репо. pull используется для просмотра других добавленных кодов товарищей, если вы работаете в командах.

Смежные вопросы