Хотя я изначально думал, что удаленный репозиторий очень редко меняет местоположение, на самом деле это происходит гораздо чаще, чем я предполагал. Удаленное репо может изменяться с одного частного сервера на другой (например, NAS), с личного репозитория GitHub на репо в организации или, возможно, даже с GitHub на GitLab.
Когда это произойдет, вам нужно будет изменить URL-адрес вашего удаленного репозитория в вашем локальном репозитории. В этой короткой статье я расскажу именно об этом.
Во-первых, давайте сразу перейдем к команде, для которой вы здесь:
$ git remote set-url <remote-repo> <remote-repo-url>
Поэтому, если вы хотите изменить URL-адрес "origin" на новый URL-адрес в моей учетной записи GitHub, команда может выглядеть примерно так:
$ git remote set-url origin https://github.com/scottwrobinson/foobar.git
Затем вы можете убедиться, что URL-адрес был обновлен с помощью remote
команды с параметром -v
, который является сокращением от --verbose
:
$ git remote -v
origin https://github.com/scottwrobinson/foobar.git (fetch)
origin https://github.com/scottwrobinson/foobar.git (push)
Установка разных репозиториев для выборки и отправки
Как вы можете видеть в выводе команды remote -v
, показаны две строки,
одна из которых относится к fetch
а другая - к push
. Это означает,
что вы также можете установить разные URL-адреса в зависимости от того,
какую команду вы выполняете.
Пример этого потребительного случае , если вы раздвоенный чье - то репо и хочешь продолжать тянуть обновления от них, но тогда вы только хотите , чтобы подтолкнуть изменения в свои раздвоенные версии. Вот как вы с этим справитесь:
$ git remote set-url <remote-repo> <original-repo-url>
$ git remote set-url --push <remote-repo> <forked-repo-url>
Обратите внимание, что вторая команда использует параметр --push
,
который указывает Git устанавливать этот URL-адрес только для команд
push
На практике выполнение команды выглядело бы примерно так:
$ git remote set-url origin https://github.com/example/foobar.git
$ git remote set-url --push origin https://github.com/scottwrobinson/foobar.git
Обратите внимание, что удаленное репо названо "origin" для обоих, и
отличается только URL-адрес. В этом примере
https://github.com/scottwrobinson/foobar.git
- это разветвленная
версия.
Опять же, запустив remote -v
мы можем убедиться, что URL-адрес был
успешно изменен:
$ git remote -v
origin https://github.com/example/foobar.git (fetch)
origin https://github.com/scottwrobinson/foobar.git (push)
Использование разных протоколов
Еще я хотел отметить, что во всех приведенных выше примерах я показал только URL-адреса HTTPS, хотя можно использовать любой действительный URL-адрес Git. Git поддерживает большое количество типов URL-адресов, некоторые из которых вы можете найти здесь:
ssh:// [email protected] /path/to/repo.git
git://host.com/path/to/repo.git
https://host.com/path/to/repo.git
file:///path/to/repo.git
Поэтому, если по какой-либо причине вы хотите получить данные из удаленного репо на GitHub, но затем передать свои изменения только в другое репо, доступное из вашей файловой системы, тогда Git достаточно гибок, чтобы вы могли это сделать:
$ git remote set-url origin [email protected] :example/foobar.git
$ git remote set-url --push origin file://~/projects/foobar.git