Нужно ли мне изменить конфигурацию удаленного источника для моего подхода к работе
Да и нет (в любом случае для некоторого значения "работа" - на самом деле равно работает, в конце концов, просто не работает так, как , как ). Есть несколько способов справиться с этим.
В частности:
У меня [есть] скрипт автоматизации ... [который использует] следующий формат 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 даже не беспокоит.