Почему происхождение / мастер позади в коммитах? - PullRequest
0 голосов
/ 09 января 2020

Я пишу небольшой сценарий автоматизации, который должен выдать код sh в мой удаленный репозиторий GitHub.

Я использую следующий формат URL https://{username}:{password}@github.com/{owner}/{repo}, в то время как новые изменения отражаются на удаленная главная ветка, моя локальная (?) origin/master отстаёт со своим коммитом.

Если я снова пу sh снова использую git push origin master, состояние снова хорошее, даже если к нему не применяются никакие изменения мой удаленный репозиторий. В моем конфигурационном файле мой удаленный источник установлен на https://github.com/{owner}/{repo}.

Нужно ли мне изменить конфигурацию удаленного источника для моего подхода к работе или есть какой-то вызов обновления, который я могу сделать, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Нужно ли мне изменить конфигурацию удаленного источника для моего подхода к работе

Да и нет (в любом случае для некоторого значения "работа" - на самом деле равно работает, в конце концов, просто не работает так, как , как ). Есть несколько способов справиться с этим.

В частности:

У меня [есть] скрипт автоматизации ... [который использует] следующий формат URL https://{username}:{password}@github.com/{owner}/{repo}

Другими словами, этот скрипт запускается:

git push https://{username}:{password}@github.com/{owner}/{repo} master

, а не:

git push origin master

, в то время как новые изменения отражаются в удаленной главной ветви. , мой локальный (?) origin / master отстаёт со своим коммитом.

Это потому, что Git не знает, что этот необработанный URL означает то же самое, что и origin.

Если я снова пу sh снова использую git push origin master, то состояние снова хорошее ...

Это потому, что ваш Git теперь вызывает Git в origin , используя (вероятно, другой) 1 URL для origin, и запрашивает , что Git об именах его ветвей. Этот веб-телефонный звонок позволяет им общаться друг с другом. Другой Git говорит, что my master - это коммит a123456..., то есть коммит, который вы нажали на мгновение go. Ваш Git говорит: Эй, у меня есть a123456! Я исправлю свои origin/master, чтобы помнить, что вы тоже. Тем временем ваш Git говорит их Git: О, хорошо, у меня нет ничего нового для вас и они вежливо висят позвоните по телефону и вернитесь к своей повседневной работе (за то, что они Git, go вернулись ко сну; для вас - по дому).

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

Таким образом, вы можете решить вашу проблему следующим образом:

  • , выполнив pu sh с имя origin, чтобы ваш Git обновил ваш origin/master или
  • , повторно связавшись с ними - например, запустив git fetch origin master - после выполнения pu sh с URL-адресом password-y, который не совпадает.

При git fetch ваш Git спросит у Git обо всех своих ветвях (по умолчанию, если вы не говорите master) или master (git fetch origin/master). Тогда ваш Git перенесет любые коммиты, которые у них есть, и обновит ваши имена для удаленного слежения (все, если вы получили все, или просто origin/master, если вы получили только вещи из их master) .

Fetch и pu sh оба обновляют ваши имена для удаленного слежения, если и когда они могут, на основе (несколько ограниченной в некоторых случаях) информации, которую ваш Git получил от их Git.

Если вы хотите сделать все это без отдельного шага, но с временным URL, связанным с именем origin, вы можете использовать:

git -c remote.origin.pushurl={url} push origin master

( Причина использования pushurl здесь в том случае, если вы действительно указали pushurl. Если нет, то git -c remote.origin.url=... будет достаточно.)

(Обратите внимание, что используется пароль в виде открытого текста, независимо от того, используете ли вы его как необработанный URL в команде git push или через git -c, как правило, является плохой идеей. Вместо этого рассмотрите возможность создания и использования токена аутентификации: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line. Токен по-прежнему чувствителен к безопасности: основное отличие вот что вы можете продолжать хранить пароль d секрет при отзыве токена аутентификации.)


1 Если URL написан точно так же, Git может (но не замечает), что remote.origin.url или remote.origin.pushurl соответствует указанному в командной строке. Но если есть даже один отдельный символ ... ну, Git на самом деле не анализирует URL-адреса до последнего символа, он просто определяет, какую схему вы используете (например, git:// против https://), а затем, для HTTP передает оставшуюся часть работы библиотекам CURL. Так что Git может быть уверен в том же самом написании, но не в чем-либо еще. На самом деле, Git даже не беспокоит.

0 голосов
/ 09 января 2020
  • Перечислите существующие пульты, чтобы получить название пульта, который вы хотите изменить.

    $ git remote -v

Вы будете например, получить источник:

источник git@github.com: ИМЯ ПОЛЬЗОВАТЕЛЯ / ХРАНИЛИЩЕ. git (выборка)

источник git@github.com: ИМЯ ПОЛЬЗОВАТЕЛЯ / ХРАНИЛИЩ. 1030 *)

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