Что такое «git remote add ...» и «git push origin master»? - PullRequest
271 голосов
/ 11 апреля 2011

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

git remote add origin git@github.com:peter/first_app.git
git push origin master

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

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

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

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

Ответы [ 5 ]

326 голосов
/ 11 апреля 2011

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

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

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

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

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

  2. Что такое git push origin master

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

Теперь о транспорте (то есть, что означает git://).URL удаленного хранилища могут быть разных типов (file://, https:// и т. Д.).Git просто полагается на механизм аутентификации, предоставленный транспортом, чтобы заботиться о разрешениях и прочем.Это означает, что для file:// URL-адресов это будут права доступа к файлам 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 когда-то давно, и стоило пропустить их, чтобы изучить систему.Удачи!

38 голосов
/ 11 апреля 2011

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

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

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

Два упомянутых вами URL указывают, что следует использовать два разных транспортных протокола.Первый, начинающийся с git://, относится к протоколу git, который обычно используется только для доступа к репозиториям только для чтения.Другой, git@github.com:peter/first_app.git, является одним из различных способов указания доступа к хранилищу по SSH - это «синтаксис в стиле scp», описанный в документации .То, что имя пользователя в синтаксисе стиля scp - 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-вопроса, в настоящее время подойдет полезный учебный материал (или ответы Stack Overflow :)).)
  • В git есть несколько странных вариантов поведения, которые трудноизменить сейчас, потому что многие сценарии могут полагаться на них, но они вводят людей в заблуждение.
5 голосов
/ 11 апреля 2011
  1. .git в конце имени хранилища - это просто соглашение. Обычно на git-серверах репозитории хранятся в каталогах с именем project.git. Git-клиент и протокол соблюдают это соглашение, проверяя project.git, если указано только project.

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

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

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

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

2 голосов
/ 26 октября 2018

Вы используете git, возможно, вы программист.Если вы программист, вы можете понять, что такое переменные!

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

git remote add origin <url_of_remote repository>

Пример:

git remote add origin git@github.com:peter/first_app.git

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

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

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

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

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

Для GitHub

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

И для BitBucket

git remote add bb_origin https://user@bitbucket.org/user/first-app-git.git

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

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

Pushing для GitHub

git push gh_origin master

Pushing для BitBucket

git push bb_origin master

gh_origin содержит значение https://github.com/user/first-app-git.git и bb_origin содержит значение https://user@bitbucket.org/user/first-app-git.git

Эти две переменныемоя жизнь стала проще

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

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

0 голосов
/ 27 августа 2018

Git remote add origin:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...