252 lines
9.3 KiB
Markdown
252 lines
9.3 KiB
Markdown
---
|
|
title: Managing remote repositories
|
|
intro: 'Learn to work with your local repositories on your computer and remote repositories hosted on {% data variables.product.github %}.'
|
|
redirect_from:
|
|
- /categories/18/articles
|
|
- /remotes
|
|
- /categories/managing-remotes
|
|
- /articles/managing-remote-repositories
|
|
- /articles/adding-a-remote
|
|
- /github/using-git/adding-a-remote
|
|
- /articles/changing-a-remote-s-url
|
|
- /articles/changing-a-remotes-url
|
|
- /github/using-git/changing-a-remotes-url
|
|
- /articles/renaming-a-remote
|
|
- /github/using-git/renaming-a-remote
|
|
- /articles/removing-a-remote
|
|
- /github/using-git/removing-a-remote
|
|
- /github/using-git/managing-remote-repositories
|
|
- /github/getting-started-with-github/managing-remote-repositories
|
|
- /github/getting-started-with-github/getting-started-with-git/managing-remote-repositories
|
|
- /get-started/getting-started-with-git/managing-remote-repositories
|
|
versions:
|
|
fpt: '*'
|
|
ghes: '*'
|
|
ghec: '*'
|
|
shortTitle: Manage remote repositories
|
|
---
|
|
{% ifversion ghec %}
|
|
|
|
> [!NOTE] {% data reusables.enterprise-data-residency.access-domain %}
|
|
|
|
{% endif %}
|
|
|
|
## Adding a remote repository
|
|
|
|
To add a new remote, use the `git remote add` command on the terminal, in the directory your repository is stored at.
|
|
|
|
The `git remote add` command takes two arguments:
|
|
* A remote name, for example, `origin`
|
|
* A remote URL, for example, `https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git`
|
|
|
|
For example:
|
|
|
|
```shell
|
|
$ git remote add origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git
|
|
# Set a new remote
|
|
|
|
$ git remote -v
|
|
# Verify new remote
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
For more information on which URL to use, see [AUTOTITLE](/get-started/git-basics/about-remote-repositories).
|
|
|
|
### Troubleshooting: Remote origin already exists
|
|
|
|
This error means you've tried to add a remote with a name that already exists in your local repository.
|
|
|
|
```shell
|
|
$ git remote add origin https://{% data variables.product.product_url %}/octocat/Spoon-Knife.git
|
|
> fatal: remote origin already exists.
|
|
```
|
|
|
|
To fix this, you can:
|
|
* Use a different name for the new remote.
|
|
* Rename the existing remote repository before you add the new remote. For more information, see [Renaming a remote repository](#renaming-a-remote-repository) below.
|
|
* Delete the existing remote repository before you add the new remote. For more information, see [Removing a remote repository](#removing-a-remote-repository) below.
|
|
|
|
## Changing a remote repository's URL
|
|
|
|
The `git remote set-url` command changes an existing remote repository URL.
|
|
|
|
> [!TIP]
|
|
> For information on the difference between HTTPS and SSH URLs, see [AUTOTITLE](/get-started/git-basics/about-remote-repositories).
|
|
|
|
The `git remote set-url` command takes two arguments:
|
|
|
|
* An existing remote name. For example, `origin` or `upstream` are two common choices.
|
|
* A new URL for the remote. For example:
|
|
* If you're updating to use HTTPS, your URL might look like:
|
|
|
|
```shell
|
|
https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git
|
|
```
|
|
|
|
* If you're updating to use SSH, your URL might look like:
|
|
|
|
```shell
|
|
git@{% data variables.product.product_url %}:OWNER/REPOSITORY.git
|
|
```
|
|
|
|
### Switching remote URLs from SSH to HTTPS
|
|
|
|
{% data reusables.command_line.open_the_multi_os_terminal %}
|
|
1. Change the current working directory to your local project.
|
|
1. List your existing remotes in order to get the name of the remote you want to change.
|
|
|
|
```shell
|
|
$ git remote -v
|
|
> origin git@{% data variables.product.product_url %}:OWNER/REPOSITORY.git (fetch)
|
|
> origin git@{% data variables.product.product_url %}:OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
1. Change your remote's URL from SSH to HTTPS with the `git remote set-url` command.
|
|
|
|
```shell
|
|
git remote set-url origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git
|
|
```
|
|
|
|
1. Verify that the remote URL has changed.
|
|
|
|
```shell
|
|
$ git remote -v
|
|
# Verify new remote URL
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
The next time you `git fetch`, `git pull`, or `git push` to the remote repository, you'll be asked for your GitHub username and password. {% data reusables.user-settings.password-authentication-deprecation %}
|
|
|
|
You can [use a credential helper](/get-started/git-basics/caching-your-github-credentials-in-git) so Git will remember your GitHub username and {% data variables.product.pat_generic %} every time it talks to GitHub.
|
|
|
|
### Switching remote URLs from HTTPS to SSH
|
|
|
|
{% data reusables.command_line.open_the_multi_os_terminal %}
|
|
1. Change the current working directory to your local project.
|
|
1. List your existing remotes in order to get the name of the remote you want to change.
|
|
|
|
```shell
|
|
$ git remote -v
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
1. Change your remote's URL from HTTPS to SSH with the `git remote set-url` command.
|
|
|
|
```shell
|
|
git remote set-url origin git@{% data variables.product.product_url %}:OWNER/REPOSITORY.git
|
|
```
|
|
|
|
1. Verify that the remote URL has changed.
|
|
|
|
```shell
|
|
$ git remote -v
|
|
# Verify new remote URL
|
|
> origin git@{% data variables.product.product_url %}:OWNER/REPOSITORY.git (fetch)
|
|
> origin git@{% data variables.product.product_url %}:OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
### Troubleshooting: No such remote '[name]'
|
|
|
|
This error means that the remote you tried to change doesn't exist:
|
|
|
|
```shell
|
|
$ git remote set-url sofake https://{% data variables.product.product_url %}/octocat/Spoon-Knife
|
|
> fatal: No such remote 'sofake'
|
|
```
|
|
|
|
Check that you've correctly typed the remote name.
|
|
|
|
## Renaming a remote repository
|
|
|
|
Use the `git remote rename` command to rename an existing remote.
|
|
|
|
The `git remote rename` command takes two arguments:
|
|
* An existing remote name, for example, `origin`
|
|
* A new name for the remote, for example, `destination`
|
|
|
|
### Example of renaming a remote repository
|
|
|
|
These examples assume you're [cloning using HTTPS](/get-started/git-basics/about-remote-repositories#cloning-with-https-urls), which is recommended.
|
|
|
|
```shell
|
|
$ git remote -v
|
|
# View existing remotes
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
|
|
$ git remote rename origin destination
|
|
# Change remote name from 'origin' to 'destination'
|
|
|
|
$ git remote -v
|
|
# Verify remote's new name
|
|
> destination https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> destination https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
### Troubleshooting: Could not rename config section 'remote.[old name]' to 'remote.[new name]'
|
|
|
|
This error means that the old remote name you typed doesn't exist.
|
|
|
|
You can check which remotes currently exist with the `git remote -v` command:
|
|
|
|
```shell
|
|
$ git remote -v
|
|
# View existing remotes
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
### Troubleshooting: Remote [new name] already exists
|
|
|
|
This error means that the remote name you want to use already exists. To solve this, either use a different remote name, or rename the original remote.
|
|
|
|
## Removing a remote repository
|
|
|
|
Use the `git remote rm` command to remove a remote URL from your repository.
|
|
|
|
The `git remote rm` command takes one argument:
|
|
* A remote name, for example, `destination`
|
|
|
|
Removing the remote URL from your repository only unlinks the local and remote repositories. It does not delete the remote repository.
|
|
|
|
### Example of removing a remote repository
|
|
|
|
These examples assume you're [cloning using HTTPS](/get-started/git-basics/about-remote-repositories#cloning-with-https-urls), which is recommended.
|
|
|
|
```shell
|
|
$ git remote -v
|
|
# View current remotes
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
> destination https://{% data variables.product.product_url %}/FORKER/REPOSITORY.git (fetch)
|
|
> destination https://{% data variables.product.product_url %}/FORKER/REPOSITORY.git (push)
|
|
|
|
$ git remote rm destination
|
|
# Remove remote
|
|
$ git remote -v
|
|
# Verify it's gone
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (fetch)
|
|
> origin https://{% data variables.product.product_url %}/OWNER/REPOSITORY.git (push)
|
|
```
|
|
|
|
> [!NOTE]
|
|
> `git remote rm` does not delete the remote repository from the server. It simply removes the remote and its references from your local repository.
|
|
|
|
### Troubleshooting: Could not remove config section 'remote.[name]'
|
|
|
|
This error means that the remote you tried to delete doesn't exist:
|
|
|
|
```shell
|
|
$ git remote rm sofake
|
|
> error: Could not remove config section 'remote.sofake'
|
|
```
|
|
|
|
Check that you've correctly typed the remote name.
|
|
|
|
## Further reading
|
|
|
|
* ["Working with Remotes" from the _Pro Git_ book](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes)
|