【问题标题】:How to change the URI (URL) for a remote Git repository?如何更改远程 Git 存储库的 URI(URL)?
【发布时间】:2011-01-26 19:51:44
【问题描述】:

我在我的硬盘驱动器(本地)上克隆的 USB 密钥上有一个存储库(来源)。我将“原点”移动到 NAS 并成功测试了从这里克隆它。

我想知道我是否可以在“local”设置中更改“origin”的 URI,这样它现在将从 NAS 中提取,而不是从 USB 密钥中提取。

目前,我可以看到两种解决方案:

  • 将所有内容推送到 usb-orign,然后再次将其复制到 NAS(由于对 nas-origin 的新提交,这意味着很多工作);

  • 向“本地”添加一个新遥控器并删除旧遥控器(我担心我会破坏我的历史记录)。

【问题讨论】:

  • 我必须在旧版本的 git (1.5.6.5) 上执行此操作,并且 set-url 选项不存在。只需删除不需要的遥控器并添加一个具有相同名称的新遥控器就可以毫无问题地维护历史记录。
  • 在我的情况下,我需要检查我的权限,我有两个私有 git 存储库,第二个帐户是该新存储库的管理员,第一个帐户是我的默认用户帐户,我应该授予第一个权限跨度>

标签: git url git-remote


【解决方案1】:

如果您在 Linux 或 Mac 上使用 sed/grep,那么在不丢失关联的情况下进行更改也很容易。

最近我这样做是为了在配置中本地更改我所有存储库的用户名,但我对远程线路也完全采用了相同的方法。

VARIABLE_FIND='old'; VARIABLE_REPLACE='new'; path_name='~/PycharmProjects/*/.git/'; grep -rl --include=config "${VARIABLE_FIND}" "${path_name}" | xargs sed -i "s|${VARIABLE_FIND}|${VARIABLE_REPLACE}|g"

要替换匹配的整行,您可以这样做:

VARIABLE_FIND='someneedle'; VARIABLE_REPLACE='somenewvalue'; path_name='/home/*/' grep -rl --include=config "${VARIABLE_FIND}" "${path_name}" | xargs sed -i "/${VARIABLE_FIND//\//\\/}/c\\${VARIABLE_REPLACE}" ;

参考: Replace whole line containing a string using Sed

【讨论】:

    【解决方案2】:

    git remote set-url {name} {url}

    git remote set-url origin https://github.com/myName/GitTest.git
    

    【讨论】:

    • 非常感谢,这工作完美且非常简单
    【解决方案3】:

    如果您是组织所有者或拥有仓库的管理员权限,则可以重命名仓库。

     git remote set-url origin new_url
    

    know more

    【讨论】:

      【解决方案4】:

      (仅限 Windows PS)在所有本地存储库中递归更改服务器/协议

      Get-ChildItem -Directory -Recurse -Depth [Number] -Hidden -name | %{$_.replace("\.git","")} | %{git -C $_ remote set-url origin $(git -C $_ remote get-url origin).replace("[OLD SERVER]", "[NEW SERVER]")}
      

      【讨论】:

        【解决方案5】:

        对我来说,接受的答案仅适用于 fetch 而不是 pull。我做了以下操作以使其也适用于推送。

        git remote set-url --push origin new.git.url/here
        

        所以要更新获取 URL:

        git remote set-url origin new.git.url/here
        

        要更新拉取 URL:

        git remote set-url --push origin new.git.url/here
        

        【讨论】:

          【解决方案6】:

          如果您想在源网址中设置用户名和密码,您可以按照以下步骤操作。

          在变量中导出密码可以避免特殊字符的问题。

          步骤:

          export gituser='<Username>:<password>@'
          git remote set-url origin https://${gituser}<gitlab_repo_url> 
          git push origin <Branch Name>
          

          【讨论】:

            【解决方案7】:

            你可以

            git remote set-url origin new.git.url/here
            

            (请参阅 git help remote)或者您可以编辑 .git/config 并在此处更改 URL。除非你做了一些非常愚蠢的事情,否则你不会有丢失历史的危险(如果你担心,只需复制你的 repo,因为你的 repo 是你的历史。)

            【讨论】:

            • 如果您有不同的 shell 用户,那么您可能想在新 url 的开头指定您的 git 用户,例如:myself@git://new.url.here
            • 您可能还想为您的新源位置设置主上游分支:git branch -u origin/master。这将使您只需git push 而不必每次都git push origin master
            • @kelorek 或者你可以git push -u origin master 第一次:)
            • 我还必须git remote set-url --push origin git://... 才能设置来源...(推送)url。
            • 对于多个分支,您可以使用git push -u --all将所有分支一次推送到新的url(而不是git push -u origin master
            【解决方案8】:

            here所见,

            $ git remote rm origin
            $ git remote add origin git@github.com:aplikacjainfo/proj1.git
            $ git config master.remote origin
            $ git config master.merge refs/heads/master
            

            【讨论】:

            • 当添加一个十年前的问题和其他二十一个答案的答案时,包含对您的答案的解释并指出您的答案所针对的问题的新方面非常重要。对于一系列命令的答案,解释每个命令在做什么以及如果可能的话如何撤消每个命令的影响是很有用的。撤消很重要,以防有人能够执行前几个步骤,但在后面的步骤中遇到错误。
            • @JasonAller 我认为这是不言自明的,这是迄今为止最好的答案,其他都是笑话。
            • 这也将更新 git status 你的分支在 'origin/master' 之前 n 次提交到新的
            【解决方案9】:

            另一种方法是重命名“旧”原点(在下面的示例中,我将其简单命名为 old-origin)并添加一个新原点。这可能是希望的方法,如果您仍然希望能够不时推送到旧的来源

            git remote rename origin old-origin
            git remote add origin git@new-git-server.com>:<username>/<projectname>.git
            

            如果您需要将本地状态推送到新的原点:

            git push -u origin --all
            git push -u origin --tags
            

            【讨论】:

              【解决方案10】:

              导航到本地存储库的项目根目录并检查现有远程:

              git remote -v
              

              如果您的存储库使用 SSH,您将看到如下内容:

              > origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
              > origin  git@github.com:USERNAME/REPOSITORY.git (push)
              

              如果您的存储库使用 HTTPS,您将看到如下内容:

              > origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
              > origin  https://github.com/USERNAME/REPOSITORY.git (push)
              

              使用 git remote set-url 更改 URL。根据git remote -v的输出,您可以通过以下方式更改URL:

              如果是 SSH,您可以将 URL 从 REPOSITORY.git 更改为 NEW_REPOSITORY.git,例如:

              $ git remote set-url origin git@github.com:USERNAME/NEW_REPOSITORY.git
              

              如果是 HTTPS,您可以将 URL 从 REPOSITORY.git 更改为 NEW_REPOSITORY.git,例如:

              $ git remote set-url origin https://github.com/USERNAME/NEW_REPOSITORY.git
              

              注意:如果您更改了 GitHub 用户名,您可以按照与上述相同的过程来更新与您的存储库关联的用户名的更改。您只需在git remote set-url 命令中更新USERNAME

              【讨论】:

                【解决方案11】:

                从您的 repo 终端编写以下命令:

                git remote set-url origin git@github.com:<username>/<repo>.git
                

                请参阅this 链接以获取有关更改遥控器中 url 的更多详细信息。

                【讨论】:

                • 它有帮助。链接很有用
                【解决方案12】:

                移除遥控器

                使用 git remote rm 命令从存储库中删除远程 URL。

                    $ git remote -v
                    # View current remotes
                    > origin  https://github.com/OWNER/REPOSITORY.git (fetch)
                    > origin  https://github.com/OWNER/REPOSITORY.git (push)
                    > destination  https://github.com/FORKER/REPOSITORY.git (fetch)
                    > destination  https://github.com/FORKER/REPOSITORY.git (push)
                
                    $ git remote rm destination
                    # Remove remote
                    $ git remote -v
                    # Verify it's gone
                    > origin  https://github.com/OWNER/REPOSITORY.git (fetch)
                    > origin  https://github.com/OWNER/REPOSITORY.git (push)
                

                【讨论】:

                  【解决方案13】:

                  检查您的权限

                  在我的情况下,我需要检查我的用户名

                  我有两个或三个具有单独凭据的存储库。

                  问题是我的许可,我有两个私有 git 服务器和存储库

                  第二个帐户是新仓库的管理员,第一个是我的默认用户帐户,我应该授予第一个权限

                  【讨论】:

                    【解决方案14】:

                    更改远程上游: git remote set-url origin &lt;url&gt;


                    添加更多上游: git remote add newplace &lt;url&gt;

                    所以你可以选择在哪里工作 git push origin &lt;branch&gt;git push newplace &lt;branch&gt;

                    【讨论】:

                      【解决方案15】:

                      您可以通过编辑配置文件来更改网址。 转到您的项目根目录:

                      nano .git/config
                      

                      然后编辑 url 字段并设置您的新 url。 保存更改。您可以使用命令验证更改。

                      git remote -v 
                      

                      【讨论】:

                        【解决方案16】:

                        如果您的存储库是私有的,那么

                        1. 从开始菜单打开控制面板
                        2. 选择用户帐户
                        3. 在左侧菜单中选择“管理您的凭据”
                        4. 删除与 Git 或 GitHub 相关的所有凭据

                        Reference

                        【讨论】:

                          【解决方案17】:

                          对于想要从 Visual Studio 2019 进行此更改的用户

                          打开团队资源管理器 (Ctrl+M)

                          首页 -> 设置

                          Git -> 存储库设置

                          遥控器 -> 编辑

                          【讨论】:

                            【解决方案18】:

                            将远程 git URI 更改为 git@github.com 而不是 https://github.com

                            git remote set-url origin git@github.com:<username>/<repo>.git
                            

                            例子:

                            git remote set-url origin git@github.com:Chetabahana/my_repo_name.git
                            

                            好处是当你使用ssh-agent时你可以做git push automatically

                            #!/bin/bash
                            
                            # Check ssh connection
                            ssh-add -l &>/dev/null
                            [[ "$?" == 2 ]] && eval `ssh-agent`
                            ssh-add -l &>/dev/null
                            [[ "$?" == 1 ]] && expect $HOME/.ssh/agent
                            
                            # Send git commands to push
                            git add . && git commit -m "your commit" && git push -u origin master
                            

                            将一个脚本文件$HOME/.ssh/agent 让它运行ssh-add 使用expect 如下:

                            #!/usr/bin/expect -f
                            set HOME $env(HOME)
                            spawn ssh-add $HOME/.ssh/id_rsa
                            expect "Enter passphrase for $HOME/.ssh/id_rsa:"
                            send "<my_passphrase>\n";
                            expect "Identity added: $HOME/.ssh/id_rsa ($HOME/.ssh/id_rsa)"
                            interact
                            

                            【讨论】:

                              【解决方案19】:

                              你有很多方法可以做到这一点:

                              控制台

                              git remote set-url origin [Here new url] 
                              

                              请确保您已在存储库所在的位置打开它。

                              配置

                              它被放置在 .git/config 中(与存储库相同的文件夹)

                              [core]
                                  repositoryformatversion = 0
                                  filemode = false
                                  bare = false
                                  logallrefupdates = true
                                  symlinks = false
                                  ignorecase = true
                              [remote "origin"]
                                  url = [Here new url]  <------------------------------------
                              ...
                              

                              TortoiseGit

                              然后只需编辑 URL。

                              源树

                              1. 单击工具栏上的“设置”按钮打开存储库设置窗口。

                              2. 单击“添加”以将远程存储库路径添加到存储库。将打开一个“远程详细信息”窗口。

                              3. 输入远程路径的名称。

                              4. 输入远程存储库的 URL/路径

                              5. 输入远程存储库托管服务的用户名。

                              6. 点击“确定”添加远程路径。

                              7. 返回“存储库设置”窗口,单击“确定”。现在应该在存储库中添加新的远程路径。

                              8. 如果您需要编辑已添加的远程路径,只需单击“编辑”按钮。您应该会被引导到“远程详细信息”窗口,您可以在其中编辑远程路径的详细信息(URL/路径/主机类型)。

                              9. 要删除远程存储库路径,请单击“删除”按钮

                              参考。 Support

                              【讨论】:

                                【解决方案20】:

                                切换远程 URL

                                打开终端。

                                Ist Step:- 将当前工作目录更改为您的本地项目。

                                第二步:- 列出您现有的遥控器以获得您要更改的遥控器的名称。

                                git remote -v

                                origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
                                
                                origin  https://github.com/USERNAME/REPOSITORY.git (push)
                                

                                使用 git remote set-url 命令将远程的 URL 从 HTTPS 更改为 SSH。

                                第三步:-git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

                                第四步:- 现在验证远程 URL 是否已更改。

                                git remote -v 验证新的远程 URL

                                origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
                                origin  git@github.com:USERNAME/REPOSITORY.git (push)
                                

                                【讨论】:

                                • 在添加新原点之前是否必须删除旧原点?
                                • 我没有从项目中删除任何东西。我只是做了上述步骤,它工作了
                                【解决方案21】:

                                检查 git 远程连接:

                                git remote -v
                                

                                现在,将本地存储库设置为远程 git:

                                git remote set-url origin https://NewRepoLink.git
                                

                                现在让它上游或推送使用以下代码:

                                git push --set-upstream origin master -f

                                【讨论】:

                                • 我在推,但 github 没有显示我的新分支。最后一个--set-upstream 让它工作了。
                                【解决方案22】:

                                疑难解答:

                                您在尝试更换遥控器时可能会遇到这些错误。 没有这样的远程 '[name]'

                                此错误表示您尝试更改的遥控器不存在:

                                git remote set-url sofake https://github.com/octocat/Spoon-Knife 致命的:没有这样的远程'sofake'

                                检查您是否正确输入了远程名称。

                                参考:https://help.github.com/articles/changing-a-remote-s-url/

                                【讨论】:

                                  【解决方案23】:

                                  我工作过:

                                  git remote set-url origin <project>
                                  

                                  【讨论】:

                                    【解决方案24】:

                                    如果您使用的是 TortoiseGit,请按照以下步骤操作:

                                    1. 转到本地结帐文件夹并右键单击转到TortoiseGit -&gt; Settings
                                    2. 在左侧窗格中选择Git -&gt; Remote
                                    3. 在右侧窗格中选择origin
                                    4. 现在将 URL 文本框的值更改为新远程存储库所在的位置

                                    您的分支和所有本地提交将保持不变,您可以像以前一样继续工作。

                                    【讨论】:

                                      【解决方案25】:

                                      如果你克隆了你的本地将自动组成,

                                      克隆它的远程 URL。

                                      您可以使用git remote -v查看它

                                      如果你想改变它,

                                      git remote set-url origin https://github.io/my_repo.git
                                      

                                      这里,

                                      起源 - 你的分支

                                      如果你想覆盖现有的分支你仍然可以使用它..它会覆盖你现有的......它会做,

                                      git remote remove url
                                      and 
                                      git remote add origin url
                                      

                                      为你...

                                      【讨论】:

                                      • 我添加了多个遥控器,因此需要git remote rm origin 命令来删除所有关联的网址。然后添加命令起作用了。
                                      【解决方案26】:

                                      在 Git Bash 中,输入命令:

                                      git remote set-url origin https://NewRepoLink.git

                                      输入凭据

                                      完成

                                      【讨论】:

                                        【解决方案27】:
                                        1. 在 gitbash 上使用命令删除原点 git远程rm来源
                                        2. 现在使用 gitbash 添加新的 Origin git remote add origin(从您的项目存储库中复制 HTTP URL 在位桶中) 完成

                                        【讨论】:

                                        • 这是一个非常有用的答案,因为没有git remote rm origin git 会记住有关旧起源的详细信息。
                                        • 以上git remote rm origin解决了多个遥控器的问题:我无法设置远程url的问题。 remote.origin.url has multiple values fatal: could not set 'remote.origin.url'
                                        【解决方案28】:
                                        git remote set-url origin git://new.location
                                        

                                        (或者,打开.git/config,查找[remote "origin"],然后编辑url = 行。

                                        您可以通过检查遥控器来检查它是否有效:

                                        git remote -v
                                        # origin  git://new.location (fetch)
                                        # origin  git://new.location (push)
                                        

                                        下次推送时,你必须指定新的上游分支,例如:

                                        git push -u origin master
                                        

                                        另请参阅:GitHub: Changing a remote's URL

                                        【讨论】:

                                        • 我无法通过编辑 .git/config 来设置新的原点。它说 URL 中命名的 git 存储库不是 git 存储库。一旦我删除并重新创建了原点,一切都很好。不过,我还没有查找 git remote set-url 作为我的问题的解决方案。
                                        • +1 用于使用git push -u 命令提供完整答案。也许对其他人来说很明显,但对我来说不是。
                                        【解决方案29】:
                                        git remote -v
                                        # View existing remotes
                                        # origin  https://github.com/user/repo.git (fetch)
                                        # origin  https://github.com/user/repo.git (push)
                                        
                                        git remote set-url origin https://github.com/user/repo2.git
                                        # Change the 'origin' remote's URL
                                        
                                        git remote -v
                                        # Verify new remote URL
                                        # origin  https://github.com/user/repo2.git (fetch)
                                        # origin  https://github.com/user/repo2.git (push)
                                        

                                        Changing a remote's URL

                                        【讨论】:

                                        • 为了获得所有这些,我添加了:git remote set-url --push origin git@github.com/User/Branch.gitgit remote set-url composer https://github.com/User/Branch.git
                                        • @MS Berends git remote -v 有助于验证,而公认的解决方案没有提供。
                                        • @MSBerends 他的回答在技术层面上更加冗长。
                                        • 注意:如果你被 403 禁止,请按照本教程操作:janac.medium.com/…
                                        【解决方案30】:

                                        Change Host for a Git Origin Server

                                        来自:http://pseudofish.com/blog/2010/06/28/change-host-for-a-git-origin-server/

                                        希望这不是您需要做的事情。我用来协作处理几个 git 项目的服务器的域名过期了。这意味着找到一种迁移本地存储库以恢复同步的方法。

                                        更新:感谢@mawolf 指出最近的 git 版本有一个简单的方法(2010 年 2 月发布):

                                        git remote set-url origin ssh://newhost.com/usr/local/gitroot/myproject.git
                                        

                                        详情请参见手册页。

                                        如果您使用的是旧版本,请尝试以下操作:

                                        需要注意的是,这仅适用于同一服务器,只是名称不同。

                                        假设新的主机名是newhost.com,旧的主机名是oldhost.com,那么更改很简单。

                                        编辑您工作目录中的.git/config 文件。您应该会看到如下内容:

                                        [remote "origin"]
                                        fetch = +refs/heads/*:refs/remotes/origin/*
                                        url = ssh://oldhost.com/usr/local/gitroot/myproject.git
                                        

                                        oldhost.com 更改为newhost.com,保存文件就完成了。

                                        根据我的有限测试 (git pull origin; git push origin; gitx),一切似乎都井然有序。是的,我知道弄乱 git 内部是不好的形式。

                                        【讨论】:

                                        • 格式错误?可能。但是,如果您需要做一些作者没想到任何人都需要做的事情,那么有时需要弄乱内部结构。但是如果你弄错了,你必须愿意接受后果。 Backup your local repository _before_ messing with git internals.
                                        • 在哪里可以找到 .git/config
                                        猜你喜欢
                                        • 2020-07-13
                                        • 2012-10-19
                                        • 2010-10-29
                                        • 1970-01-01
                                        • 2017-03-07
                                        • 2018-06-06
                                        相关资源
                                        最近更新 更多