【问题标题】:How to fetch new remote branches when having more than one remote?拥有多个遥控器时如何获取新的远程分支?
【发布时间】:2012-08-07 07:04:38
【问题描述】:

我有一个包含 3 个远程存储库的设置,即原始存储库、内部存储库、外部存储库。 当我创建一个新的本地安装时,我克隆源并将内部和外部添加为远程。

当我这样做时,会显示原点上的新远程分支 git fetch --all 但在内部和外部,它们似乎没有从服务器获取(尽管我看到服务器已被联系和查询)。

我也尝试过 git remote update internal 没有任何运气。

使用 git ls-remote internal 我可以看到任何新创建的远程分支,但我无法克隆它们(可能是因为有关分支的信息尚未提取到我的本地存储库)。

在互联网上搜索我发现这篇博文http://www.jukie.net/bart/blog/fetch-all-git-branches 描述了同样的问题并使用自定义脚本解决了它。

当您使用最近的 git 版本克隆一个新的 git 存储库时,默认情况下 git 将创建一个包含所有远程分支的 .git/remotes/origin。该文件列出了在一次提取时要更新的所有远程分支。

随着时间的推移,远程可能会获得更多分支,并且可能需要更新远程分支列表。找出远程可用的方法是调用 git-ls-remote origin,然后挑选出感兴趣的分支,并将它们添加到 .git/remotes/origin 文件中。

git fetch --all 为什么不使用新的分支更新 .git/remotes/[remote_name] 文件? 真的没有办法用普通的git命令来更新吗?

【问题讨论】:

  • git fetch -all 应该可以工作,并且可以在本地工作(我有 15 个已配置的遥控器)。你确定internalexternal 包含你认为他们做的事情吗?您使用什么命令“克隆它们”失败了?
  • 谢谢克里斯托弗。知道某些东西是否应该与所讨论的设置一起工作总是令人放心的。那么你至少可以确定这只是一个用户问题。

标签: git


【解决方案1】:
git fetch internal --all
git fetch external --all

【讨论】:

  • 致命: fetch --all 不接受存储库参数
【解决方案2】:

我发现了另一个帖子 [1]:In git, how do I check out a remote repository's remote branches?,它让我在 git config 中查找我的设置。出于某种原因,我设法让远程只跟踪主分支,而不是远程的默认 glob refspec(在 refs/remotes/remote_name/ 命名空间下)。

所以我的配置看起来像这样

[remote "internal"]
    url = path_to_my_remote_repo
    fetch = +refs/heads/master:refs/remotes/internal/master

把它改成这个

[remote "internal"]
    url = path_to_my_remote_repo
    fetch = +refs/heads/*:refs/remotes/internal/*

为我解决了问题。

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 2018-12-29
    • 2016-04-29
    • 2022-06-23
    • 2017-08-20
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多