#git #branch #git-pull
#git #ответвление #git-pull
Вопрос:
В моем репозитории git есть несколько удаленных. Если я выполняю git pull
, то он запрашивает пароль одного из моих коллег.
Как я могу изменить удаленный доступ на black
?
Комментарии:
1.
git pull {originName}
? вы также могли бы перемещать вещи так, чтобы этоorigin
было вашим.2. @DanielA. Белый, я хочу просто вызвать
git pull
неgit pull black
3.
origin
это имя удаленного доступа (того, с которого был клонирован репозиторий). Нет способа иметь более одногоorigin
.4. @axiac, я понимаю. Я соответствующим образом изменил заголовок вопроса.
5. Попробуйте
git config branch.<name>.remote black
.name
это ветка, в которой вы сейчас находитесь.
Ответ №1:
Удаленного доступа по умолчанию не существует, каждая ветка может отслеживать определенную ветку из удаленного репозитория.
Если вы создали ветку, используя, git checkout -b <branch-name>
где <branch-name>
— имя удаленной ветки, то новая ветка отслеживает эту ветку (от любого удаленного хоста, на котором она размещена).
Если вы создали ветку локально, а затем использовали, git push --set-upstream <remote-name> <branch-name>
то локальная ветка <branch-name>
отслеживает удаленную ветку <remote-name>/<branch-name>
.
Вы всегда можете использовать git branch --set-upstream-to
, чтобы изменить удаленную ветку, которая отслеживается текущей веткой, или git branch --unset-upstream
указать ей не отслеживать ни одну удаленную ветку.
Комментарии:
1. как я могу нажать / извлечь из удаленного / филиала, который не является вышестоящим? В моем случае у меня есть главная ветка на github, но у меня также есть пустой репозиторий на моем сетевом диске, у которого есть master. Я извлек все из обоих и хочу ускорить перемотку master в исходный репозиторий, поскольку на данный момент это самый актуальный… при этом оставив восходящий поток как есть. Должен ли я дважды изменять восходящий поток или есть более короткий способ сделать это?
2. подождите, я просто туплю.
git merge desktop/master
Ответ №2:
В дополнение к приведенному выше ответу, в котором описывается, как настроить удаленный репозиторий для существующей ветки в вашей локальной копии, я подумал, что было бы целесообразно подробнее остановиться на этом, отметив, что в то время как для удаленного git pull
git checkout
checkout.defaultRemote
в настройке. Таким образом, git checkout some-branch
, git push
и git pull
все будет работать так, как вы задумали, вообще не указывая и не думая об имени удаленного доступа. Читайте дальше для получения полного объяснения.
Примечание к OP: В приведенных ниже примерах я собираюсь использовать имя удаленного origin
вместо вашего конкретного пульта с именем black
, потому что для большинства людей по умолчанию используется исходный пульт, который вы хотели бы настроить следующим образом. Однако для ваших целей просто замените любой экземпляр origin на black.
Упростите процесс оформления заказа в филиале:
Сначала вы должны ввести следующее в консоли:
git config checkout.defaultRemote origin
Эта команда добавляет следующий раздел в файл .git / config вашего репозитория:
[checkout]
defaultRemote = origin
Теперь, когда настроена ветка по умолчанию, каждый раз, когда вы хотите настроить новую локальную копию удаленной ветки, которая существует в удаленном репозитории «origin», вам нужно только ввести:
git checkout some-branch
И git предположит, что вы на самом деле имели в виду:
git checkout --track origin/some-branch
Который также можно сократить до:
git checkout -u origin/some-branch
Это потрясающий лайфхак. Это гораздо более разумный альтернативный метод настройки локальной копии, чем решение, упомянутое выше с git checkout -b some-branch
, и он очень полезен, когда вы действительно знаете, что филиал уже существует на одном или нескольких удаленных устройствах. В частности, если вы работаете с несколькими удаленными устройствами и не используете defaultRemote
, вам нужно будет вводить длинную форму git checkout --track origin/branch-name
каждый раз, когда вы оформляете ветку, потому что git не знает, с какого удаленного он должен отслеживать. Избавьте себя от головной боли и просто настройте это всегда. (Смотрите заключительные соображения ниже для предлагаемого подхода).
Упростите процесс git push и git pull:
Как указывалось выше, автоматическая настройка ваших локальных филиалов на отслеживание с помощью defaultRemote означает, что когда вам нужно выполнить git pull
while в какой-либо ветке, которую вы проверили, git уже точно знает, с какого пульта извлекать данные. Это очень, очень полезно.
Примечание: если локальная ветвь отслеживает один удаленный доступ, а вы хотите получить код с другого удаленного, или если локальная ветвь вообще не настроена на отслеживание удаленного доступа, то вы можете либо:
-
вручную укажите правильный удаленный доступ для извлечения:
git pull <remote-name>
Это должно выполняться каждый раз, когда вы хотите извлечь данные с удаленного.
-
исправьте ветвь удаленного отслеживания на постоянной основе для каждой ветви, используя:
git branch --set-upstream-to <remote-name/branch-name>
или
git config branch.<branch-name>.remote <remote-name> git config branch.<branch-name>.merge refs/heads/<branch-name>
Это одноразовое изменение; все последующие
git pull
команды теперь должны извлекаться из указанного вами удаленного доступа / филиала.
Предостережения и последствия:
Чтобы git config checkout.defaultRemote origin
принести какую-либо реальную пользу в git pull
командном сценарии, эта команда / конфигурация должна быть настроена при первом запуске работы над проектом с несколькими пультами дистанционного управления или сразу после добавления дополнительных пультов. Причина в том, что эта конфигурация будет влиять только на ветви, которые вы собираетесь проверить после установки этой конфигурации; это не оказывает никакого влияния на существующие ветви. В этом случае все существующие локальные филиалы, которые еще не отслеживаются с определенного пульта, необходимо будет изменить отдельно, чтобы добавить предполагаемый пульт, прежде чем простой git pull
заработает.
Заключительные мысли
Если вы часто сталкиваетесь с этой проблемой в различных проектах, более полной настройкой было бы работать в соответствии с соглашением о том, что удаленный доступ по умолчанию всегда должен добавляться как удаленный доступ «origin» во всех ваших проектах. Затем вы можете установить эту конфигурацию глобально с помощью:
git config --global checkout.defaultRemote origin
Комментарии:
1. Почему конфигурацию нужно настраивать немедленно? Что произойдет, если вы настроите его позже?
2. Только при этом
git checkout some-branch
необязательно настраивать его с помощью удаленного доступа, что означает дополнительные команды позже в вашем процессе git.
Ответ №3:
Для автоматизации процесса для этой ветки :
git config branch.<your-branch>.remote black