git refspec可以包含多个通配符吗?

时间:2017-09-08 22:13:45

标签: git git-refspec

在我有权访问的repo上运行git ls-remote origin,我使用git namespaces看到以下表单的分支。

refs/namespaces/share/refs/namespaces/<username>/refs/heads/<branch-name>

我想将这些映射到refs/remotes/<username>/<branch-name>

github help page举例说明了如何解决此问题的更简单版本,方法是将其添加到.git/config

[remote "origin"]
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

我可以通过以下方式使事情适用于我的案例:

[remote "origin"]
    fetch = +refs/namespaces/share/refs/namespaces/USER1/refs/heads/<branch-name>:refs/remotes/origin/USER1/*
    fetch = +refs/namespaces/share/refs/namespaces/USER2/refs/heads/<branch-name>:refs/remotes/origin/USER2/*
    # etc

但这需要我提前知道所有用户名。不幸的是,使用两个*并不起作用:

[remote "origin"]
    fetch = +refs/namespaces/share/refs/namespaces/*/refs/heads/<branch-name>:refs/remotes/origin/*/*

有没有办法实现这种重新映射?

1 个答案:

答案 0 :(得分:0)

不 - 或者更准确地说,不是编写程序来编写一系列fetch =行。

你可以使用一种元配置编写这样的程序(存储在.git/config或其他地方,在这个级别上并不重要)。该程序将在远程计算机上运行git ls-remote,计算相应的fetch =行,并更新.git/config以包含它们。

如果您将此程序命名为git-synchrofetch(此名称的目的是回到synchromesh),您可以在更新git fetch后调用.git/config。然后,您可以运行git fetch origin而不是git synchrofetch origin来更新默认提取,然后获取。

(请注意,程序也可以直接使用一整套refspec来调用git fetch,但这里的想法是让大多数其他Git代码正常运行,并且只在你认为时进行重新同步用户名集已更改。)