我正在使用分散式工作流程(中央+ fork )。有时,我想将叉上的所有远程分支与中央存储库中相应分支的最新更改一起快速转发。

我已经创建了中央存储库的第二个克隆版本,它只是一个裸版本。使用一个git push命令,是否可以将所有分支都推送到 fork ?我知道通配符可用于 push ,但我无法使其工作。例如,我尝试了此操作(我的裸仓库中有两个远程服务器,“上游”和“原点”;起源指向我的 fork ,上游是中央仓库:

git push origin refs/remotes/upstream/*:refs/heads/*

我仍然发现git的refspec令人困惑。具体来说,我不确定使用什么 namespace 。我假设所有远程分支都存储在refs/heads/*下。

最佳答案

只需使用

git push <fork> --all

.git/refs/heads/下的所有分支引用推到另一个远程。

文献资料

git-scm documentation for git push 中(截断为相关选项):



您的原始命令应该已经奏效

仅供引用,您的原始命令
git push origin refs/remotes/upstream/*:refs/heads/*

应该也能正常工作,所以我不确定您的情况出了什么问题。

引用规范说明

照你说的,



所以这是表单的refspec的处理
<source>:<destination>
  • 所有Git存储库在.git/refs/目录下共享相同的引用目录结构。
  • 每个存储库都在refs/heads/下存储本地分支(相对于其自身)。
  • 每个存储库都在refs/remotes/<remote>/下存储远程跟踪分支(相对于其自身)。
  • 其他引用也可以存储在refs/下,包括但不限于refs/tags/,但我不会详细介绍这些内容。您还可以在refs/下创建自己的引用目录;以GitHub为例,将 pull 请求存储在refs/pulls/<request-number>/下的远程服务器上。
  • 冒号: 每一侧的引用是reft相对于refspec的那一侧所表示的仓库的。假冒结肠的每一侧都在该侧上安装了 repo 协议(protocol)。

    出于说明目的,我将[source]/[destination]/添加到下面的refspec示例中,即使这实际上不是它们的正确语法。

    因此,例如,如果要将本地分支推送到远程,则需要将它们推送到远程的本地分支。您可以使用这样的refspec:
    git push <remote> [source]/refs/heads/*:[destination]/refs/heads/*
    

    在上述情况下,您还可以省略:refs/heads/*,因为省略:<destination>会导致Git用与<source>端相同的引用替换该端:
    git push <remote> refs/heads/*
    

    现在,假设您想将本地远程跟踪分支推送到 Remote 上名为refs/special/的特殊“命名空间”文件夹中。然后,使用以下命令:
    git push <remote> \
    [source]/refs/remotes/<pick-a-remote>/*:[destination]/refs/special/*
    
  • 关于git - 如何将裸仓库 repo 分支推到另一个远程站点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24481335/

    10-14 17:18