В чем разница между clone и mkdir->cd->init->remote-add->pull?

После настройки репо на Github, кажется, есть два способа вытащить репо в локальное репо.

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

> mkdir "exampleProject"
> cd "exampleProject"
> git init
> git remote add origin git@github.com:exampleUser/exampleProject.git
> git pull origin master

Во-вторых, я мог бы клонировать пульт.

> git clone git@github.com:exampleUser/exampleProject.git

Является ли клонирование просто ярлыком для 5-ступенчатой ​​версии, описанной выше, или оно делает что-то еще? Буду ли я сталкиваться с трудностями, если я использую один метод над другим?

1 ответ

Решение

Многие команды, будь то команды git или обычные программы, выполняют действия в одну строку, которые вы могли бы сделать за десять. Спасать работу всегда хорошо!

Тем не менее, ваши шаги близки, но не совсем так же, как, что git clone делает. Я могу придумать несколько различий, связанных с ветками:

  • Если по какой-то причине HEAD пульта дистанционного управления не является ведущим, клон будет действовать правильно - даст вам ветку, названную так же, как и у удаленного, вместо master. Это редкая, но хорошая деталь, о которой нужно знать.

  • Ваш git pull не будет создавать удаленные ветви. Если у пульта есть несколько веток, клон создает удаленные ветки remotes/origin/foo, remotes/origin/bar... в вашем хранилище. git fetch origin позаботится об этом в ваших перечисленных шагах.

  • Вы также не настроили свою основную ветку для отслеживания происхождения, что делает клон. Вы можете добавить это к перечисленным шагам как git config branch.master.remote origin; git config branch.master.merge refs/heads/master, Это очень важно - с вашими шагами, если вы проверили master и набрали git pull, он не будет знать, что делать.

Возможно, я пропустил одну или две вещи. Что касается трудностей, так или иначе, даже если предположить, что вы сглаживаете все различия между клоном по умолчанию и "ручным клоном", мой совет - не изобретать заново git clone:

  • Это коротко. Зачем больше работать?

  • У него есть удобные опции, чтобы изменить его поведение. Вещи как --shared было бы очень трудно добавить к вашим перечисленным командам.

  • Это гарантированно делать правильные вещи сейчас и в будущем. Что делать, если вы пропустили детали, как те, что выше? Что если git добавил глобальный параметр конфигурации, влияющий на клонов? Вы должны были бы изменить свои команды, чтобы принять это во внимание, но git clone уже знал бы.

Другие вопросы по тегам