Довольно часто 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/en/Git-Basics-Working-with-Remotes в разделе «Добавление удаленных репозиториев»)
Так почему же URL не git://git@github.com/peter/first_app.git
в другом синтаксисе - какой это синтаксис? Почему это должно закончиться .git
? Я пытался не использовать .git
в конце, и это тоже работает. Если нет .git
, то что еще это может быть? git
В , git@github.com
кажется учетной записи пользователя на сервере мерзавца?
Кроме того, почему это должно быть настолько многословно, чтобы использовать git push origin master
? Разве по умолчанию не может быть источник и мастер? Я обнаружил, что в первый раз, origin master
это необходимо, но после небольшого редактирования и фиксации, git push
это все, что нужно (нет необходимости origin master
). Может ли кто-нибудь, кто знает, что происходит, дать некоторые подробности?
Иногда это кажется большим количеством волшебства без объяснения ... и иногда человек, использующий это, настолько уверен, и когда его спрашивают, почему, не может объяснить это, и отвечает что-то вроде "это так". Иногда очень практично и прагматично. Неплохо быть практичным, но, вероятно, не практичным до такой степени, чтобы не знать, что происходит.
git@github.com:peter/first_app.git
этоscp
синтаксис -style для URL-адресов ssh в git. Еще один момент заключается в том, что по умолчанию исходная конфигурацияmaster
не влияет на поведение,git push
если вы неpush.default
установилиtracking
(илиupstream
в более поздних версиях) - я написалpush.default
восходящей конфигурации будет использоваться для поиска удаленного по умолчанию при использованииgit push
, но не повлияет на отображение ссылок.Обновление: обратите внимание, что принятый в настоящее время ответ увековечивает распространенное заблуждение о поведении
git push
, которое не было исправлено, несмотря на комментарий, указывающий на это.Ваше краткое изложение того, что такое пульты - например, псевдоним для URL хранилища - является правильным.
Два URL-адреса, которые вы упомянули, указывают, что следует использовать два разных транспортных протокола. Первый начинается с
git://
протокола git, который обычно используется только для доступа к репозиториям только для чтения. Другойgit@github.com:peter/first_app.git
способ - это один из различных способов указания доступа к хранилищу по SSH - это «синтаксис в стиле scp», описанный в документации . То, что имя пользователя в синтаксисе в стиле scpgit
является следствием того, что GitHub имеет дело с идентификацией пользователей - по сути, это имя пользователя игнорируется, и пользователь идентифицируется на основе пары ключей SSH, которую они использовали для аутентификации.Что касается многословия
git push origin master
, вы заметили, что после первого нажатия вы можете просто сделатьgit push
. Это из-за серии трудных для запоминания, но в целом полезных значений по умолчанию :)remote.master.url
в вашем случае). Если это не настроено, тоorigin
используется.master
,master:my-experiment
и т. Д.) Не указан, то git по умолчанию отправляет каждую локальную ветвь с тем же именем, что и ветка на удаленном компьютере. Если у вас просто есть ветка, вызываемаяmaster
между вашим репозиторием и удаленной, это будет то же самое, что и ваша веткаmaster
на удаленнуюmaster
.Лично, поскольку у меня, как правило, много веток тем (и часто несколько удаленных), я всегда использую форму:
... чтобы случайно не толкнуть другие ветви.
В ответ на ваши комментарии на одном из других ответов, это звучит для меня , как будто будут очень эффективно узнавать о мерзавце в нисходящем пути - вы обнаружили , что по умолчанию работает, и ваш вопрос спрашивает о том, почему;) To будь серьезнее, мерзавец можетиспользовать его по сути так же просто, как SVN, но, зная немного о пультах и ветвях, вы можете использовать его гораздо гибче, и это может реально изменить вашу работу к лучшему. Ваше замечание по поводу семестрового курса заставляет меня думать о том, что Скотт Чакон сказал в интервью подкаста: студентов учат всем видам базовых инструментов в области компьютерных наук и разработки программного обеспечения, но очень редко - контролю версий. Распределенные системы контроля версий, такие как git и Mercurial, теперь настолько важны и настолько гибки, что стоило бы проводить курсы по ним, чтобы дать людям хорошее основание.
С моей точки зрения
git
, эта кривая обучения абсолютно стоит того - работать с множеством веток тем, легко объединять их, а также перемещать и перемещать их между различными репозиториями, становится фантастически полезным, как только вы становитесь уверенными в системе. Просто жаль, что:источник
Посмотрите на синтаксис для добавления удаленного репо.
Пример:
Давайте рассмотрим команду:
git remote используется для управления центральными серверами для размещения ваших git-репозиториев.
Может быть, вы используете Github для центрального хранилища. Я дам вам пример и объяснить Git удаленных добавить происхождение команды
Предположим, я работаю с GitHub и BitBucket для центральных серверов для репозиториев git и создал репозитории на обоих веб-сайтах для моего проекта первого приложения .
Теперь, если я хочу отправить свои изменения на оба этих сервера git, мне нужно будет указать git, как получить доступ к этим центральным репозиториям. Так что мне придется добавить это,
Для GitHub
И для BitBucket
Я использовал две переменные (насколько мне легко называть их переменными): gh_origin (gh FOR GITHUB) и bb_origin (bb для BITBUCKET) просто для того, чтобы объяснить вам, что мы можем вызывать origin как угодно.
Теперь после внесения некоторых изменений мне нужно будет отправить (отправить) все эти изменения в центральные репозитории, чтобы другие пользователи могли видеть эти изменения. Так я звоню
Нажав на GitHub
Нажав на BitBucket
gh_origin содержит значение https://github.com/user/first-app-git.git, а bb_origin содержит значение https: //user@bitbucket.org/user/first-app-git.git.
как всякий раз, когда мне нужно отправить изменения в моем коде, мне нужно использовать эти слова вместо того, чтобы запоминать или вводить URL для того же самого.
В большинстве случаев вы не увидите ничего, кроме источника, поскольку в большинстве случаев вы будете иметь дело только с одним центральным репозиторием, например, Github или BitBucket.
источник
В
.git
конце имени хранилища это просто соглашение. Как правило, на git-серверах репозитории хранятся в именованных каталогахproject.git
. Клиент git и протокол соблюдают это соглашение, проверяя,project.git
когдаproject
указано только .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
веткой, когда вы делаете agit pull
или agit push
.По умолчанию
git push
иgit pull
используется для работы с пультом текущего филиала. Это лучше по умолчанию, чем мастер оригинала. Способ, которым git push определяет это, объясняется здесь .git
довольно элегантный и понятный, но есть кривая обучения, чтобы пройти.источник
git push
не используются переменные конфигурации, настроенные с помощью,git branch/checkout --track
чтобы определить, к какому удаленному ref нужно перейти. Вы правы, что Git Pull действительно использует их, однако.Git Remote добавить источник:
Он централизует ваш исходный код для других проектов. Он разработан на основе Linux, полностью открыт с открытым исходным кодом и делает ваш код полезным для других пользователей git. Мы называем его справочным
Вставляет ваш код в репозиторий git, используя удаленный URL-адрес git-хаба.
источник