0

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

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

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

github 帮助页面提供了一个示例,说明如何通过将其添加到以下内容来解决此问题的更简单版本.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

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

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

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

4

1 回答 1

0

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

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

如果你命名这个程序,比如说,git-synchrofetch(这个名字是为了回溯到synchromesh),你可以让它git fetch在更新后调用.git/config。然后,git fetch origin您可能会运行git synchrofetch origin, 来更新您的默认提取,然后再提取。

(请注意,该程序也可以git fetch直接使用完整的 refspecs 调用,但这里的想法是让大多数其他 Git 代码正常运行,并且仅在您认为用户名集发生更改时才进行重新同步。 )

于 2017-09-08T22:47:58.557 回答