Как установить удаленный доступ по умолчанию в git?

#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