it-roy-ru.com

Что такое «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? Я обнаружил, что в первый раз нужен Origin master, но после небольшого редактирования и фиксации, git Push - это все, что нужно (нет необходимости Origin master). Может ли кто-нибудь, кто знает, что происходит, дать некоторые подробности?

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

271
太極者無極而生

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

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

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

  1. Что такое 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 вы можете нажать Push для Origin вместо того, чтобы вводить весь URL. 

  2. Что такое git Push Origin master

    Это команда, которая говорит: «Передать коммиты в локальной ветви с именем master на удаленный компьютер с именем Origin». Как только это будет выполнено, все материалы, которые вы в последний раз синхронизировали с 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 (откуда вы клонировали) с локальным мастером, настроенным на отслеживание мастера в Origin. Как только это настроено, вы можете просто сказать git Push, и он это сделает. Более длинная команда доступна в том случае, если она вам нужна (например, git Push может передавать на официальное публичное репо, а git Push review master может использоваться для передачи на отдельный пульт, который ваша команда использует для просмотра кода). Вы можете настроить свою ветвь как отслеживающую ветвь, используя опцию --set-upstream команды git branch

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

325
Noufal Ibrahim

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

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

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

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

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

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

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

git Push Origin master

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


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

Я считаю, что с git эта кривая обучения абсолютно стоит того - работать с множеством веток тем, легко объединять их, а также перемещать и перемещать их между различными репозиториями, становится фантастически полезным, как только вы становитесь уверенными в системе. Жаль только, что

  • Первичную документацию по git так сложно разобрать новичкам. (Хотя я бы поспорил, что если вы используете Google практически для любого git-вопроса, в настоящее время подойдет полезный учебный материал (или ответы Stack Overflow :)).)
  • В git есть несколько странных поведений, которые трудно изменить сейчас, потому что многие скрипты могут полагаться на них, но они вводят людей в заблуждение.
38
Mark Longair
  1. .git в конце имени репозитория - это просто соглашение. Обычно на git-серверах репозитории хранятся в каталогах с именем project.git. Клиент git и протокол соблюдают это соглашение, проверяя project.git, когда указана только project.

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

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

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

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

5
anshul

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

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

git remote add Origin <url_of_remote repository>

Пример:

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

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

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

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

Предположим, я работаю с 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) просто чтобы объяснить вам, что мы можем вызывать Origin как угодно ,.

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

Нажав на 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.

2
Mr. Suryaa Jha

Git remote add Origin:

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

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

0
saikumarputta