如何获取/拉取匹配通配符字符串的多个分支?

7

目标: 我有几个由相同规则管理的存储库。我想创建一个 git 别名来帮助只获取和/或拉取相关分支,而不会获取与我不关心的工作相关的许多远程分支的信息。我希望最终结果将保持我的日志输出干净和易于管理,同时仍然提供我相关的信息。

具体要求: 我想要一个单一的命令来拉取 "master" 和任何以 "development/" 开头的分支(即 development/2.0...)。还有几个分支我想要避免获取,这些通常采用以 "integration/" 或 "personal/" 开头的形式。

现状: 我现在知道了 git Porcelain 是什么,这要归功于 "git fetch --help" 中的一条评论,下面是我如何使用它:

git fetch origin master:master -u

这甚至适用于获取主分支和一个开发分支:

git fetch origin master:master development/2.0:development/2.0 -u

但是我在将其扩展到每个开发分支时遇到了麻烦,而不是逐个列出它们(这似乎没有任何作用):

git fetch origin development/*:development/* -u

感谢您提前提供的帮助!

development/* 的东西 应该 可以工作,只要你的命令解释器不会吃掉或者损坏星号。请注意,通常的本地分支名称是“远程跟踪”分支,即 refs/remotes/<remote>/...,而不是你的本地分支,所以看起来有点奇怪。 - torek
请参见https://dev59.com/j3rZa4cB1Zd3GeqPxABm#20452710。 - VonC
1个回答

4
我不知道你是否可以在命令行上完成此操作,但是您可以通过配置git配置文件中的refspec来完成。

配置通常看起来像这样。

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = .....

您可能需要这样的东西(未经测试)
[remote "origin"]
    fetch = +refs/heads/development/*:refs/remotes/origin/*
    fetch = +refs/heads/master:refs/remotes/origin/*
    url = .....

尽管获取这些行可能需要更像这样,但我不确定。

    fetch = +refs/heads/development/*:refs/remotes/origin/development/*
    fetch = +refs/heads/master:refs/remotes/origin/master

1
在我意识到这需要在个人存储库配置中而不是我的全局git配置中之前,我尝试了几次。fetch = +refs/heads/development/:refs/remotes/origin/development/ fetch = +refs/heads/master:refs/remotes/origin/master正好符合我的要求。感谢您的快速回复! - Jason L
删除你所说未经测试的代码块怎么样?这样下一个读者就能得到直接的答案了。 - fikr4n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接