From 8b6d33112f4bb40d9026bdf806da47fb7997622d Mon Sep 17 00:00:00 2001
From: Mike Lockhart | GitLab <mlockhart@gitlab.com>
Date: Thu, 22 Aug 2024 07:02:29 +0000
Subject: [PATCH] Apply 18 suggestions

Co-authored by @brendan777 and @mlockhart
---
 doc/topics/git/index.md                      |   3 +-
 doc/tutorials/update_git_remote_url/index.md | 166 +++++++++++++++++++
 2 files changed, 168 insertions(+), 1 deletion(-)
 create mode 100644 doc/tutorials/update_git_remote_url/index.md

diff --git a/doc/topics/git/index.md b/doc/topics/git/index.md
index eb22eb652fcdb..8cf398e12b1a0 100644
--- a/doc/topics/git/index.md
+++ b/doc/topics/git/index.md
@@ -20,4 +20,5 @@ platform for software development. GitLab adds many powerful
 | [**Get started**](get_started.md) **{chevron-right}**<br><br>Overview of how features fit together. | [**Install Git**](how_to_install_git/index.md) **{chevron-right}**<br><br>Download, configuration, system requirements. | [**Tutorial: Create your first commit**](../../tutorials/make_first_git_commit/index.md) **{chevron-right}**<br><br>Initial commit, Git basics, repository setup. |
 | [**Clone a repository to your local machine**](clone.md) **{chevron-right}**<br><br>Local repository, clone, remote repository, SSH. | [**Create a branch for your changes**](branch.md) **{chevron-right}**<br><br>Branching, branch switch, checkout. | [**Add files to your branch**](../../gitlab-basics/add-file.md) **{chevron-right}**<br><br>Git add, staging changes, file management, commits. |
 | [**Stash changes for later**](stash.md) **{chevron-right}**<br><br>Temporary storage, work in progress, context switching. | [**Undo changes**](undo.md) **{chevron-right}**<br><br>Reverting commits, removing changes, Git reset, unstage. | [**Tutorial: Update Git commit messages**](../../tutorials/update_commit_messages/index.md) **{chevron-right}**<br><br>Commit message editing, version history, best practices. |
-| [**Rebase to address merge conflicts**](git_rebase.md) **{chevron-right}**<br><br>Conflict resolution, rebase, branch management. | [**Common Git commands**](../../gitlab-basics/start-using-git.md) **{chevron-right}**<br><br>Git cheatsheet, basic operations, command line. | [**Troubleshooting**](troubleshooting_git.md) **{chevron-right}**<br><br>Error resolution, common issues, debugging, Git problems. |
+| [**Rebase to address merge conflicts**](git_rebase.md) **{chevron-right}**<br><br>Conflict resolution, rebase, branch management. | [**Common Git commands**](../../gitlab-basics/start-using-git.md) **{chevron-right}**<br><br>Git cheatsheet, basic operations, command line. | [**Tutorial: Update Git remote URLs**](../../tutorials/update_git_remote_url/index.md) **{chevron-right}**<br><br>Change the push/pull URL on a working copy.|
+| [**Troubleshooting**](troubleshooting_git.md) **{chevron-right}**<br><br>Error resolution, common issues, debugging, Git problems. | | |
diff --git a/doc/tutorials/update_git_remote_url/index.md b/doc/tutorials/update_git_remote_url/index.md
new file mode 100644
index 0000000000000..b3422032d6867
--- /dev/null
+++ b/doc/tutorials/update_git_remote_url/index.md
@@ -0,0 +1,166 @@
+---
+stage: Create
+group: Source Code
+info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+---
+
+# Tutorial: Update Git remote URLs
+
+DETAILS:
+**Tier:** Free, Premium, Ultimate
+**Offering:** GitLab.com, Self-managed, GitLab Dedicated
+
+Update your Git remote URLs if:
+
+- You imported an existing project from another Git repository host.
+- Your organization has moved your projects to a new GitLab instance with a new domain name.
+- The project was renamed to a new path in the same GitLab instance.
+
+NOTE:
+If you don't have an existing local working copy from the old remote, then you don't need this tutorial.
+You can instead clone the project from the new GitLab URL.
+
+This tutorial explains how to update the remote URL for your local repository without:
+
+- Losing any of your local changes that are incomplete.
+- Losing changes that are not yet published to GitLab.
+- Creating a new cloned working copy of the repository from the new URL.
+
+This tutorial uses the `git-remote` command to
+[manage remote and tracked repositories](https://git-scm.com/docs/git-remote).
+
+To update Git remote URLs:
+
+- [Determine existing and new URLs](#determine-existing-and-new-urls)
+- [Update Git remote URLs](#update-git-remote-urls)
+- [(Optional) Keep original remote URLs](#optional-keep-original-remote-urls)
+
+## Before you begin
+
+You must have:
+
+- A GitLab project with a Git repository and a new GitLab URL.
+- A cloned local working copy of the project that you are migrating to the new GitLab URL.
+- Git [installed on your local machine](../../topics/git/how_to_install_git/index.md).
+- The ability to get to your local machine's command-line interface (CLI). In macOS,
+  you can use Terminal. In Windows, you can use PowerShell. Linux users are probably
+  already familiar with their system's CLI.
+- Authentication credentials for GitLab:
+  - You must authenticate with GitLab to update Git remote URLs. If your GitLab account uses
+  basic username and password authentication, you must have [two factor authentication (2FA)](../../user/profile/account/two_factor_authentication.md)
+  disabled to authenticate from the CLI. Alternatively, you can [use an SSH key to authenticate with GitLab](../../user/ssh.md).
+
+## Determine existing and new URLs
+
+To update the Git remote URL, determine the existing and new URLs for your repository:
+
+1. Open a terminal or command prompt.
+
+1. Go to your local repository working copy. To change directory, use `cd`:
+
+   ```shell
+   cd <repository-name>
+   ```
+
+1. Each repository has a default remote named `origin`. To view the current remote _fetch_ and _push_ URLs
+for your remote repository, run:
+
+   ```shell
+   git remote -v
+   ```
+
+1. Copy and keep note of the returned URLs. They are usually identical.
+
+1. Get the new URL:
+   1. Go to GitLab.
+   1. On the left sidebar, select **Search or go to** and find your project.
+   1. On the left sidebar, select **Code** > **Repository**, to go to the project's **Repository** page
+   1. In the upper-right corner, select **Code**
+   1. Depending on which method you use for authentication and cloning with `git`,
+   copy either the HTTPS or SSH URL. If you're not sure, use the same method as the `origin` URL from the previous step.
+   1. Keep note of the copied URL.
+
+## Update Git remote URLs
+
+To update the Git remote URL:
+
+1. Open a terminal or command prompt.
+
+1. Go to your local repository working copy. To change directory, use `cd`:
+
+   ```shell
+   cd <repository-name>
+   ```
+
+1. Update the remote URL, replacing `<new_url>` with the new repository URL you copied:
+
+   ```shell
+   git remote set-url origin <new_url>
+   ```
+
+1. Verify that the remote URL update is successful.
+The following command displays the new URL for both fetch and push operations,
+lists the local branches, and confirms that they are tracked to GitLab:
+
+   ```shell
+   git remote show origin
+   ```
+
+   - If the update was unsuccessful, go back to the previous step, ensure you
+   have the correct `<new_url>`, and try again.
+
+To update the remote URLs for multiple repositories:
+
+1. Use the `git remote set-url` command. Replace `origin` with the name of the
+remote you want to update. For example:
+
+   ```shell
+   git remote set-url <remote_name> <new_url>
+   ```
+
+1. Verify each remote URL update:
+
+   ```shell
+   git remote show <remote_name>
+   ```
+
+After updating the remote URL, you can continue to use Git commands as usual.
+Your next `git fetch`, `git pull`, or `git push` uses the new URL from GitLab.
+
+Congratulations, you have successfully updated the remote URL for your repository.
+
+## (Optional) Keep original remote URLs
+
+Your project might have more than one remote location.
+For example, you have a forked repository from a project hosted on GitHub,
+but you want to work on your fork in GitLab before you make a pull request to GitHub.
+
+To keep the original remote URL in addition to updating it, and maintain both new and old
+remote URLs, you can add a new remote instead of modifying the existing one.
+
+With this approach, you can gradually transition to the new URL while still maintaining
+access to the original repository.
+
+To add a new remote URL:
+
+1. Open a terminal or command prompt.
+
+1. Go to your local repository working copy.
+
+1. Add a new remote URL. Replace `<new_remote_name>` with a name for the new remote,
+for example, `new-origin`, and `<new_url>` with the new repository URL:
+
+   ```shell
+   git remote add <new_remote_name> <new_url>
+   ```
+
+1. Verify that the new remote was added:
+
+   ```shell
+   git remote -v
+   ```
+
+Now you can use both the original and new remotes. For example:
+
+- To push to the original remote: `git push origin main`
+- To push to the new remote: `git push <new_remote_name> main`
-- 
GitLab