【问题标题】:Git: How to show all urls added on a remoteGit:如何显示远程添加的所有 URL
【发布时间】:2023-01-24 19:02:05
【问题描述】:

上下文:在克隆回购协议后,我有一个带有默认 url 的 origin 遥控器。由于一些 Bitbucket 更新,有人建议我们的团队通过为团队处理的所有项目创建一个应用程序密码的另一个帐户来集中存储库。

起初,我决定使用以下方法添加另一个遥控器:

git remote add norigin <new url>

但是每次都推到两个遥控器会很麻烦。 我对一键式命令解决方案的搜索为我带来了 here

基本上你可以编辑/添加另一个 url 到现有的遥控器,因此我输入了:

git remote set-url --add --push origin git@bitbucket.com:username/repo2

测试了 now git push origin &lt;some branch&gt; 命令是否会推送到两个远程 url。 git log 然后会显示 norigin 将比 origin 落后一次提交,但我认为这是因为它仍然被视为另一个单独的遥控器,然后检查每个单独的 repo,它确实被推送到两个回购,因此我删除了norigin遥控器。

一切都很好,但是当我输入 git remote -v 时,它只会显示:

origin  git@bitbucket.com:username/repo (fetch)
origin  git@bitbucket.com:username/repo2 (push)

当预期输出应该是:

origin  git@bitbucket.com:username/repo (fetch)
origin  git@bitbucket.com:username/repo (push)
origin  git@bitbucket.com:username/repo2 (push)

问题:如标题和预期输出所示,如何显示添加到特定遥控器上的所有网址?

我试过的:

git remote -v show origin
git remote get-url --push origin
git remote get-url --all origin

但它们都返回一个单一的网址,它要么是旧网址,要么是新网址。

【问题讨论】:

  • 您是否尝试过更简单的命令 git remote show origin
  • 是的,它会显示 1 个获取 URL 和 1 个推送 URL。

标签: git


【解决方案1】:

这可能取决于所使用的 Git 版本。

我刚刚用 Git 2.35.1 测试了你的命令,并且 git remote -v 按预期工作:

origin  git@bitbucket.com:username/repo1  (fetch)
origin  git@bitbucket.com:username/repo1  (push)
origin  git@bitbucket.com:username/repo2 (push)

检查 .git/config 是否包括

[remote "origin"]
        url = git@bitbucket.com:username/repo1
        fetch = +refs/heads/*:refs/remotes/origin/*
        pushurl = git@bitbucket.com:username/repo1
        pushurl = git@bitbucket.com:username/repo2

【讨论】:

  • 您是指.gitconfig 文件吗?我似乎无法在本地 Git 文件夹或用户文件夹中找到 .git 目录。只有 .gitconfig 文件中的对象是 [user][credential]
  • 我已经尝试将我的 git 更新到 latest/2.35.1 删除了所有(推送)url,然后只添加了新的 url,它是一样的。
  • 也许需要进行全新安装,而不是仅仅更新 git。
  • @Yong 对不起,我没有立即回答(对我来说是晚上)。我的意思是 .git/config 文件,.git 是您的存储库根文件夹下的子文件夹。那是本地配置。
  • 不用担心!感谢您的回答,我确实找到了 config 文件,正如预期的那样,[remote "origin"] 中只有 3 个网址。 url = git@bitbucket.com:username/repo1fetch = +refs/heads/*:refs/remotes/origin/*pushurl = git@bitbucket.com:username/repo2
【解决方案2】:

要获得预期的输出:

origin  git@bitbucket.com:username/repo  (fetch)
origin  git@bitbucket.com:username/repo  (push)
origin  git@bitbucket.com:username/repo2  (push)

我所要做的就是像添加第二个一样添加原始 repo url。使用相同的命令但使用原始 url(不是真正的解决方案,因为一开始并没有真正的问题,但如果你像我一样吹毛求疵并且你只想看到旧的/原始遥控器的 push url 那么您可以使用以下命令添加它):

git remote set-url --add --push origin git@bitbucket.com:username/repo

我如何到达“解决方法?”:

重读this后,我注意到在git remote add之后添加时,指令是添加原始repo url。您可以看到下面的说明(示例使用 .org 和 .com 网址):

# Create a new remote called "all" with the URL of the primary repo.
git remote add all git@github.com:jigarius/toggl2redmine.git
# Re-register the remote as a push URL.
git remote set-url --add --push all git@github.com:jigarius/toggl2redmine.git
# Add a push URL to a remote. This means that "git push" will also push to this git URL.
git remote set-url --add --push all git@bitbucket.org:jigarius/toggl2redmine.git

我昨天做的另一个实验是删除所有添加到 origin 存储库中的 push url,结果揭示了这个问题。

C:~pp> git remote -v
origin  git@bitbucket.com:username/repo (fetch)
origin  git@bitbucket.com:username/repo2 (push)

C:~pp> git remote set-url --delete --push origin git@bitbucket.com:username/repo2

C:~pp> git remote -v
origin  git@bitbucket.com:username/repo (fetch)
origin  git@bitbucket.com:username/repo (push)

删除所有push url 后,它会自动添加一个与fetch url 相同的默认url。我不知道确切的行为,但我只是将其解释为 git 将原始/旧 url 设为默认 push url,这就是为什么它不必显示?无论如何,请随意添加任何内容。无论是否显示它,只要您添加了新的回购协议,它仍然会按预期工作(即它将推送到旧的和新的回购协议)。

PS:正如@VonC 在他的回答中所说,不同的 git 版本之间可能会有所不同。

【讨论】:

    【解决方案3】:

    在遥控器上显示所有网址:

    git remote -v
    

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 2017-03-12
      • 2017-08-07
      • 2013-02-07
      • 2016-06-14
      • 2012-07-15
      • 1970-01-01
      • 2020-02-07
      • 2023-04-10
      相关资源
      最近更新 更多