Что такое git remote add... "и" git push origin master "?

Довольно часто Git и Rails выглядят как магия... например, в первой главе учебника Rails 3, это говорит о Git:

git remote add origin [email protected]:peter/first_app.git
git push origin master

и это в значительной степени говорит, что "это просто работает", не говоря слишком много о том, что они есть, и начинает говорить о ветвлении. Поиск в сети показывает, что git remote add заключается в добавлении "короткого имени", например origin, и это может быть любое имя, которое подобно псевдониму URL. И origin - это обычный путь, на который указывает удаленное репо. (в http://git-scm.com/book/en/Git-Basics-Working-with-Remotes в разделе "Добавление удаленных репозиториев" )

Итак, почему URL не git://[email protected]/peter/first_app.git, а в другом синтаксисе - какой синтаксис? Почему он должен заканчиваться на .git? Я попытался не использовать .git в конце, и он тоже работает. Если не .git, что еще это может быть? git в [email protected] кажется учетной записью пользователя на сервере Git?

Кроме того, зачем это нужно для использования git push origin master? Не можете ли по умолчанию быть источником и мастером? Я обнаружил, что в первый раз требуется origin master, но после небольшого редактирования и фиксации, тогда git push это все, что ему нужно (не нужно origin master). Может кто-нибудь, кто знает, что происходит, дает некоторые подробности?

Иногда это кажется большим количеством магии без объяснений... и иногда человек, использующий его, настолько уверен, что его спрашивают, почему, не могут его объяснить и реагировать на что-то вроде "так, как оно есть". Иногда очень практично и прагматично. Неплохо быть практичным, но, вероятно, не практично, чтобы не знать, что происходит.

Ответ 1

git похож на UNIX. Дружелюбный, но придирчивый к своим друзьям. Это примерно так же мощно и удобно, как конвейер.

Сказав это, как только вы поймете его парадигмы и концепции, он имеет такую ​​же дзен-ясность, какую я ожидал от инструментов командной строки UNIX. Вы должны подумать о том, чтобы взять отпуск, чтобы прочитать один из многих хороших git учебных пособий, доступных в Интернете. Книга Pro git - хорошее место для начала.

Чтобы ответить на ваш первый вопрос.

  • Что такое git remote add ...

    Как вы, наверное, знаете, git - это система управления распределенной версией. Большинство операций выполняются локально. Чтобы общаться с внешним миром, git использует так называемые remotes. Это репозитории, отличные от тех, которые находятся на вашем локальном диске, в которые вы можете push внести изменения (чтобы другие люди могли их видеть) или pull (так что вы можете получить другие изменения). Команда git remote add origin [email protected]:peter/first_app.git создает новый пульт с именем origin, расположенный в [email protected]:peter/first_app.git. Как только вы это сделаете, в ваших командах push вы можете нажать origin вместо того, чтобы печатать весь URL.

  • Что такое git push origin master

    Это команда, которая говорит: "Нажимайте коммит в локальной ветки с именем master на удаленный с именем origin". Как только это будет выполнено, все материалы, которые вы в последний раз синхронизировали с источником, будут отправлены в удаленный репозиторий, и другие люди смогут увидеть их там.

Теперь о транспорте (то есть, что git://) означает. Удаленные URL-адреса репозитория могут быть разных типов (file://, https:// и т.д.). git просто полагается на механизм аутентификации, предоставляемый транспортом, чтобы заботиться о разрешениях и т.д. Это означает, что для URL file:// это будут разрешения файлов UNIX и т.д. Схема git:// запрашивает git использовать свой собственный внутренний транспортный протокол, который оптимизирован для отправки git наборов изменений. Что касается точного URL-адреса, то так оно и есть из-за того, как github настроил свой сервер git.

Теперь многословие. Команда, которую вы набрали, является общей. Можно рассказать git что-то вроде "ветвь с именем master здесь - это локальное зеркало ветки с именем foo на удаленном устройстве, называемом bar". В git говорить, это означает, что master отслеживает bar/foo. Когда вы клонируете в первый раз, вы получите ветвь с именем master и удаленный вызов origin (где вы клонировали) с локальным мастером, чтобы отслеживать мастер по происхождению. Как только это настроено, вы можете просто сказать git push, и он это сделает. Более длинная команда доступна, если она вам нужна (например, git push может перейти к официальному публичному репо, а git push review master можно использовать для нажатия на отдельный пульт, который ваша команда использует для просмотра кода). Вы можете настроить ветвь как ветку отслеживания, используя опцию --set-upstream команды git branch.

Я чувствовал, что git (в отличие от большинства других приложений, которые я использовал) лучше понять изнутри. Как только вы понимаете, как данные хранятся и хранятся внутри репозитория, команды и то, что они делают, становятся кристально чистыми. Я согласен с вами в том, что среди многих пользователей git существует некоторый элитарность, но я также обнаружил, что с UNIX-пользователями раз за разом, и нужно было вспахать мимо них, чтобы изучить систему. Удачи!

Ответ 2

Обновление: обратите внимание, что принятый в настоящее время ответ увековечивает общее недоразумение о поведении git push, которое не было исправлено, несмотря на комментарий, указывающий на это.

Ваше резюме о том, какие пусковые устройства - как псевдоним для URL-адреса репозитория, - правильно.

Итак, почему URL-адрес не git://git @github.com/peter/first_app.git, но в другом синтаксисе - какой синтаксис? Зачем он заканчивается на .git? Я пытался не использовать .git в конце, и он тоже работает. Если нет .git, что еще это может быть? git у начинающего, похоже, является учетной записью пользователя на сервере git?

Два указанных вами URL указывают, что должны использоваться два разных транспортных протокола. Тот, который начинается с git://, предназначен для протокола git, который обычно используется только для доступа к репозиториям только для чтения. Другой, [email protected]:peter/first_app.git, является одним из разных способов указания доступа к репозиторию через SSH - это синтаксис типа scp, описанный в документация. То, что имя пользователя в синтаксисе scp-style составляет git, связано с тем, как GitHub занимается идентификацией пользователей - по сути, игнорируется имя пользователя, а пользователь идентифицируется на основе пары ключей SSH, которую они использовали для аутентификации.

Что касается многословия git push origin master, вы заметили, что после первого нажатия вы можете просто сделать git push. Это из-за серии трудно запоминаемых, но в целом полезных значений по умолчанию:)

  • Если пульт не указан, используется пульт, настроенный для текущей ветки (в remote.master.url в вашем случае). Если это не настроено, используется origin.
  • Если там не указано "refspec" (например, master, master:my-experiment и т.д.), то git по умолчанию нажимает каждую локальную ветвь с тем же именем, что и ветка на пульте дистанционного управления. Если у вас есть только ветвь с именем master, общая между вашим репозиторием и удаленной, это будет то же самое, что нажать master на удаленный master.

Лично, поскольку у меня, как правило, много ветвей темы (и часто несколько пультов), я всегда использую форму:

git push origin master

..., чтобы избежать случайного нажатия других ветвей.


В ответ на ваши комментарии к одному из других ответов мне кажется, что вы очень хорошо изучаете git по принципу "сверху вниз" - вы обнаружили, что работа по умолчанию работает, и ваш вопрос задает вопрос о том, почему;) Чтобы быть более серьезным, git можно использовать по существу так же, как SVN, но немного знать о пультах и ​​ветвях означает, что вы можете использовать его гораздо гибче, и это может действительно изменить способ работы в лучшую сторону. Ваше замечание о семестровом курсе заставляет меня задуматься о чем-то, что сказал Скотт Чакон в интервью подкасту - учеников преподают о всех основных инструментах в области информатики и программного обеспечения, но очень редко контролируют версию. Системы управления распределенной версией, такие как git и Mercurial, теперь настолько важны и настолько гибки, что было бы полезно преподавать на них курсы, чтобы дать людям хорошее заземление.

Мое мнение состоит в том, что с git эта кривая обучения абсолютно стоит того, чтобы работать с большим количеством ветвей темы, легко их слить, а толкать и вытаскивать их между разными репозиториями фантастически полезно, когда вы становитесь уверенными в системе, Просто прискорбно, что:

  • Основная документация для git настолько сложна для синтаксического анализа для новичков. (Хотя я бы сказал, что если вы Google почти для любого вопроса git, полезный учебный материал (или "Переполнение стека" отвечает:)) приходят сегодня.)
  • В git есть несколько нечетных типов поведения, которые трудно изменить, потому что многие скрипты могут полагаться на них, но сбивают с толку людей.

Ответ 3

  • .git в конце имени репозитория - это просто соглашение. Как правило, в хранилищах git сервер хранится в каталогах с именем project.git. Клиент и протокол git соблюдают это соглашение, проверяя для project.git, когда указан только project.

  • git://[email protected]/peter/first_app.git не является допустимым URL git. git репозитории могут быть идентифицированы и доступны через различные схемы URL, указанные здесь. [email protected]:peter/first_app.git - это URL ssh, указанный на этой странице.

  • git является гибким. Он позволяет отслеживать локальную ветку почти в любом филиале любого репозитория. В то время как master (ваша локальная ветка по умолчанию) отслеживание origin/master (удаленная ветка по умолчанию) является популярной ситуацией, оно не является универсальным. Много раз вы можете не хотеть этого делать. Вот почему первый git push является настолько подробным. Он сообщает git, что делать с локальной ветвью master, когда вы выполняете git pull или git push.

  • По умолчанию для git push и git pull используется работа с текущим удаленным филиалом. Это лучший дефолт, чем исходный мастер. Способ git push определяет, что это объясняется здесь.

git довольно изящный и понятный, но есть кривая обучения, чтобы пройти.

Ответ 4

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

git remote add origin <url_of_remote repository>

Пример:

git remote add origin [email protected]:peter/first_app.git

Давайте рассмотрим команду:

git remote используется для управления центральными серверами, на которых размещаются ваши git-репозитории.

Может быть, вы используете Github для своего центрального хранилища. Я приведу пример и объясню команду удаленного добавления git command

Предположим, я работаю с GitHub и BitBucket для центральных серверов репозиториев git и создал репозитории на обоих веб-сайтах для моего проекта first-app.

Теперь, если я хочу отправить свои изменения на оба этих сервера git, мне нужно будет указать git, как получить доступ к этим центральным репозиториям. Поэтому мне придется добавить это,

Для GitHub

git remote add gh_origin https://github.com/user/first-app-git.git

И для BitBucket

git remote add bb_origin https://[email protected]/user/first-app-git.git

Я использовал две переменные (насколько мне легко называть их переменными) gh_origin (gh FOR GITHUB) и bb_origin (bb для BITBUCKET) просто чтобы объяснить вам мы можем назвать происхождение как угодно.

Теперь после внесения некоторых изменений мне нужно будет отправить (отправить) все эти изменения в центральные репозитории, чтобы другие пользователи могли видеть эти изменения. Я звоню

Нажимаем на GitHub

git push gh_origin master

Пересылка в BitBucket

git push bb_origin master

gh_origin содержит значение https://github.com/user/first-app-git.git, а bb_origin содержит значение https://[email protected]/user/first-app-git.git

Эти две переменные облегчают мою жизнь

как всякий раз, когда мне нужно отправить изменения в моем коде, мне нужно использовать эти слова вместо того, чтобы запоминать или вводить URL для того же самого.

В большинстве случаев вы не увидите ничего, кроме origin, поскольку в большинстве случаев вы будете иметь дело только с одним центральным репозиторием, например, Github или BitBucket.

Ответ 5

Git remote добавить источник:

Он централизует ваш исходный код для других проектов. Он разработан на основе Linux, полный открытый исходный код и сделать ваш код полезным для других пользователей git. мы называем его ссылкой

Вставляет ваш код в репозиторий git, используя удаленный URL-адрес git-хаба.