В чем разница между pull и clone в git?

В чем разница между выполнением (после mkdir repo и cd 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

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

Ответ 1

Они в основном одни и те же, кроме клонов, будут настраивать дополнительные удаленные ветки отслеживания, а не только мастер. Просмотрите справочную страницу:

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

git clone означает, что вы делаете копию репозитория в вашей системе.

git fork означает, что вы копируете репозиторий в свою учетную запись Github.

git pull означает, что вы получаете последний измененный репозиторий.

git push означает, что вы возвращаете хранилище после его изменения.

В непрофессионале термин:

git clone загружается, а git pull обновляется.

Ответ 5

клон: копирование репозитория удаленного сервера на локальный компьютер.

pull: получить новые изменения, добавленные на ваш локальный компьютер.

Это разница.

Клон обычно используется для удаленного копирования репо.

Pull используется для просмотра кода, добавленного другими товарищами по команде, если вы работаете в команде.

Ответ 6

Хм, что пропало, чтобы увидеть удалённую ветку "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

Ответ 7

git clone используется для того, чтобы просто загрузить то, что в данный момент работает в репозитории удаленного сервера, и сохранить его в папке на вашем компьютере, где находится этот проект. В основном это используется только тогда, когда мы собираемся загрузить проект в первый раз. После этого тянуть - лучший вариант.

git pull - это, по сути, операция (клонирование (загрузка) + слияние), которая используется в основном как работа в команде. Другими словами, когда вы хотите последние изменения в этом проекте, вы можете тянуть.

Ответ 8

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

Подробнее: https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling

Ответ 9

git clone URL ---> Весь проект или репозиторий будут загружены в виде отдельного каталога. а не только изменения git pull URL ---> fetch + merge → он будет получать только те изменения, которые были сделаны, а не весь проект