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

Ответы:

337

Справочная страница для оформления заказа: http://git-scm.com/docs/git-checkout

Страница man для клона: http://git-scm.com/docs/git-clone

Подводя итог, клон предназначен для извлечения репозиториев, которых у вас нет, а checkout - для переключения между ветками в уже имеющемся репозитории.

Примечание: для тех, кто имеет опыт работы с SVN / CVS и новичок в Git, эквивалент git cloneв SVN / CVS checkout. Одна и та же формулировка разных терминов часто сбивает с толку.

Август Лиллеас
источник
41
checkoutможет также использоваться для других целей, таких как перезапись файла в рабочей копии версией этого файла из другой ревизии.
svick
8
и когда вы используете "тянуть" против "оформить заказ"?
Кокодоко
27
pull - это выборка плюс слияние, checkout - локальная операция, которая работает только с данными, которые уже получены. Так что это совсем не похоже на svn checkout.
Август Лиллеас
13
Исходя из мира SVN, я тоже растерялся. Вау .. какой беспорядок. В идеальном мире я бы заставил всех производителей систем контроля версий использовать одни и те же термины.
Золтан Тамаси
5
Fork - это термин github, и он не связан с самим git.
Август Лиллеас,
123

git clone предназначен для получения ваших репозиториев с удаленного git-сервера.

git checkout предназначен для проверки желаемого состояния вашего репозитория (например, веток или определенных файлов).

Например, вы находитесь в основной ветке и хотите перейти в ветку разработки.

git checkout develop_branch

Например, вы хотите оформить заказ на определенный статус определенного файла

git checkout commit_point_A -- <filename>

Вот хороший справочник для изучения Git, который поможет вам понять гораздо легче.

Кит Хо
источник
20
«с удаленного сервера git» - серверу не обязательно быть удаленным. git cloneтакже будет работать с локальными репо.
SET
1
Спасибо за ссылку на визуальную ссылку на git!
Дэвид Пойнтер
@Kit Ho: Ссылка хороша как ссылка, но она не очень помогает тем, у кого есть базовые вопросы о git, как человек выше. Как говорится в самой статье: «Как только вы узнаете немного о том, как работает git, этот сайт может укрепить ваше понимание»
SN
Круговые определения не очень полезны. Слово «выборка», используемое для описания клона, полезно и добавляет значение, но фраза «оформить заказ - это не означает…» не добавляет значения и не помогает на самом деле различать разницу между двумя операциями.
С Перкинс
11

Одна вещь, на которую стоит обратить внимание, это отсутствие каких-либо «Copyout» в git. Это потому, что у вас уже есть полная копия в вашем локальном репо - ваше локальное репо является cloneвыбранным вами вышестоящим репо. Таким образом , вы должны эффективно личку checkoutна все , без выкладывания «замок» на этих файлах в опорном репо.

Git предоставляет хеш-значения SHA1 в качестве механизма для проверки того, что имеющаяся у вас копия файла / дерева каталогов / commit / repo точно такая же, как и та, которую использует тот, кто может объявить вещи как «Master» в иерархии доверия. Это позволяет избежать всех тех «блокировок», которые вызывают удушение большинства систем SCM (с обычными проблемами с частными копиями, большими слияниями и отсутствием реального контроля или управления исходным кодом ;-)!

Филип Окли
источник
4
В вопросе не упоминаются блокировки, и в наши дни по умолчанию следует предположить, что человек не знаком с этой концепцией, поэтому эти отличия от старых VCS следует объяснять только в том случае, если они заданы явно.
wRAR
6

Просто Git Checkout имеют 2 использования

  1. Переключение между существующими локальными филиалами, например git checkout <existing_local_branch_name>
  2. Создайте новую ветку из текущей ветки, используя флаг -b. Предположим, что если вы находитесь в главной ветке, то git checkout -b <new_feature_branch_name>создадите новую ветку с содержимым главной и переключитесь на вновь созданную ветку.

Вы можете найти больше вариантов на официальном сайте

Хадер М.А.
источник
Ницца. Эта -bопция великолепна, которая создает новую локальную ветку и одновременно проверяет ее в одной команде. Любил это!
RBT
2

checkout можно использовать для многих случаев:

1-й случай : переключение между ветвями в локальном хранилище. Например: git checkout exists_branch_to_switch

Вы также можете создать новую ветку и переключиться в этом случае с помощью -b

git checkout -b new_branch_to_switch

2-й случай : восстановить файл из x rev

git checkout rev file_to_restore ...

Гомс
источник