Что такое "git remote add ..." и "git push origin master"?
довольно часто 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
обычный путь где удаленный РЕПО указывает на. (in http://git-scm.com/book/en/Git-Basics-Working-with-Remotes в разделе "добавление удаленных репозиториев")
так почему же URL не git://git@github.com/peter/first_app.git
но в другом синтаксисе -- какой это синтаксис? Почему это должно закончиться .git
? Я пытался не использовать .git
в конце и он тоже работает. Если нет .git
что еще может быть? The git
на git@github.com
кажется, учетная запись пользователя на сервере git?
кроме того, почему это должно быть так многословно использовать git push origin master
? Не может ли значение по умолчанию быть origin и master? Я обнаружил, что в первый раз,origin master
необходимо, но после небольшого редактирования и фиксации, затем git push
- это все, что нужно (не нужно origin master
). Может ли кто-то, кто знает, что происходит, дать некоторые детали?
иногда кажется, что много магии без объяснения причин... и иногда он так уверенно и, когда спросили, почему, не могу объяснить, и ответить что-то вроде "Вот кстати". Иногда очень практично и прагматично. Неплохо быть практичным, но, вероятно, не практичным до такой степени, чтобы не знать, что происходит.
4 ответов
git
похоже на UNIX. Удобный, но придирчивый о своих друзьях. Это примерно так же мощно и удобно, как конвейер оболочки.
как только вы поймете его парадигмы и концепции, у него будет такая же Дзен-подобная ясность, которую я ожидал от инструментов командной строки UNIX. Вы должны рассмотреть возможность взять некоторое время, чтобы прочитать один из многих хороших учебников git, доступных в интернете. Книга Pro Git-хорошее место для начала.
ответить первый вопрос.
-
что это
git remote add ...
как вы, наверное, знаете,
git
является распределенной системой управления версиями. Большинство операций выполняются локально. Чтобы общаться с внешним миром,git
использует то, что называетсяremotes
. Это репозитории, отличные от вашего локального диска, которые вы можетеpush
ваши изменения в (чтобы другие люди могли их видеть) илиpull
from (так что вы можете получить другие изменения). Командаgit remote add origin git@github.com:peter/first_app.git
создает новый пульт под названиемorigin
расположенном вgit@github.com:peter/first_app.git
. После этого Вам команды, вы можете нажать, чтобыorigin
вместо того, чтобы печатать весь URL-адрес. -
что это
git push origin master
это команда, которая говорит: "нажмите фиксации в локальной ветви с именем
master
на пульт с именемorigin
". Как только это будет выполнено, все материалы, которые вы последний раз синхронизировали с origin, будут отправлены в удаленный репозиторий, и другие люди смогут их увидеть там.
теперь о транспортах (т. е. что git://
) означает. Url удаленного репозитория могут быть разных типов (file://
, https://
etc.). Git просто полагается на механизм аутентификации, предоставляемый транспортом, чтобы заботиться о разрешениях и прочее. Это означает, что для file://
URLs, это будут разрешения файлов UNIX и т. д. The git://
схема просит git использовать свой собственный внутренний транспортный протокол, который оптимизирован для отправки наборов изменений git. Что касается точный URL-адрес, это так, как это из-за того, как github настроил его git
сервер.
master
вот местное зеркало ветви под названием foo
на пульте под названием bar
". В git говорят, это означает, что master
трассы bar/foo
. Когда вы клонируете в первый раз, вы получите ветку под названием master
и пульт дистанционного называется origin
(где вы клонировали) с локальным мастером, установленным для отслеживания мастера в origin. Как только это настроено, вы можете просто сказать git push
и он сделает это. Более длинная команда доступна в случае необходимости (например,git push
может подтолкнуть к официальному публичному РЕПО и git push review master
может использоваться для нажатия на отдельный пульт, который ваша команда использует для просмотра кода). Вы можете настроить свою ветвь как ветвь отслеживания, используя на .
я чувствовал что Git (в отличие от большинства других приложений, которые я использовал) лучше понимать изнутри. Как только вы поймете, как данные хранятся и поддерживаются внутри репозитория, команды и то, что они делают, становятся кристально ясными. Я согласен с вами, что среди многих есть элитарность!--0--> пользователи, но я также обнаружил, что с пользователями UNIX когда-то, и это стоило пахать мимо них, чтобы узнать систему. Удачи!
Update: обратите внимание, что принятый в настоящее время ответ увековечивает распространенное заблуждение о поведении git push
, который не был исправлен, несмотря на комментарий, указывающий на это.
ваше резюме того, что пульты дистанционного управления-как псевдоним для URL-адреса репозитория-правильно.
так почему же URL не git://git@github.com/peter/first_app.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
в вашем случае) используется. Если это не настроено, то это. - если нет "refspec" (например,
master
,master:my-experiment
, etc.) указано, затем git по умолчанию нажимает каждую локальную ветвь, которая имеет то же имя, что и ветвь на удаленном компьютере. Если у вас просто есть ветка под названиемmaster
общего между репозиторий и удаленный, это будет то же самое, что и нажатие вашегоmaster
на пультmaster
.
лично, так как у меня, как правило, много тематических ветвей (и часто несколько пультов), я всегда использую форму:
git push origin master
... чтобы случайно не толкать другие ветки.
в ответ на ваши комментарии по одному из других ответов, это звучит для меня, как будто are изучение git сверху вниз очень эффективно - вы обнаружили, что значения по умолчанию работают, и ваш вопрос спрашивает, Почему ;) чтобы быть более серьезным, git can использоваться по существу так же просто, как SVN, но зная немного о пультах и ветвях, вы можете использовать его гораздо более гибко, и это действительно может изменить способ работы к лучшему. Ваше замечание о семестровом курсе заставляет меня подумать о том, что сказал Скотт Чакон в интервью подкаста-студентов учат всем видам основных инструментов в информатике и разработка программного обеспечения, но очень редко контроль версий. Распределенные системы управления версиями, такие как git и Mercurial, теперь настолько важны и настолько гибки, что стоило бы преподавать курсы по ним, чтобы дать людям хорошее обоснование.
мой взгляд, что с git
, эта кривая обучения абсолютно стоит того-работа с большим количеством тематических ветвей, легко их объединяя, и толкая и вытягивая их между различными репозиториями фантастически полезна, как только вы станете уверен в системе. Жаль только, что:
- первичная документация для git так трудно разобрать для новичков. (Хотя я бы сказал, что если Вы Google для почти любого вопроса git, полезный учебный материал (или ответы переполнения стека :)) появляются в настоящее время.)
- в git есть несколько странных поведений, которые трудно изменить сейчас, потому что многие сценарии могут полагаться на них, но запутывают людей.
на
.git
в конце имени репозитория - это просто соглашение. Как правило, на серверах git репозитории хранятся в каталогах с именемproject.git
. Клиент и протокол git чтит эту конвенцию, тестируя дляproject.git
если только - это.git://git@github.com/peter/first_app.git
не является допустимым url git. репозитории git могут быть идентифицированы и доступны через различные схемы url, указанные здесь.git@github.com:peter/first_app.git
- этоssh
URL-адрес упомянутые на этой странице.git
гибкий. Он позволяет отслеживать локальную ветвь практически в любой ветви любого репозитория. В то время какmaster
(ваша локальная ветка по умолчанию) отслеживаниеorigin/master
(удаленная ветка по умолчанию) - популярная ситуация, она не универсальна. Много раз вы можете не хотеть этого делать. Вот почему первыйgit push
так многословно. Он говорит git, что делать с местнымmaster
ветка, когда вы делаетеgit pull
или agit push
.по умолчанию
git push
иgit pull
для работы с пультом текущей ветви. Это лучшее значение по умолчанию, чем origin master. То, как git push определяет это, объясняется здесь.
git
довольно элегантный и понятный, но есть кривая обучения, чтобы пройти.
git remote добавить origin:
Он централизует исходный код для других проектов.Он разработан на базе Linux, заполните open source и сделайте свой код полезным для других пользователей git.мы называем это ссылкой
помещает ваш код в репозиторий git, используя удаленный url-адрес концентратора git.