代码之家  ›  专栏  ›  技术社区  ›  Jimmix

git为所有分支设置一个远程而不推

  •  0
  • Jimmix  · 技术社区  · 6 年前

    是否有任何git命令可以为本地存储库中的分支设置远程存储库(完全适用于所有分支),而无需将提交从本地推到远程?

    简而言之,我想得到的一切都可以通过使用flag来完成 --all : git push --all

    可以选择设置上游 -u git push --all -u

    但我不想推任何承诺。

    所期望的结果就是在本地和远程存储库之间为 git push 所以如果你 git推送 --全部 选项。

    1 回复  |  直到 6 年前
        1
  •  3
  •   torek    6 年前

    对于一个分支,请参见问题 phd linked-to ,即。, Make an existing Git branch track a remote branch?

    要对某些分支集执行此操作,请使用循环。要对所有分支执行此操作,请使用 git for-each-ref 要在所有分支上循环,如在此sh/bash循环构造中:

    git for-each-ref --format='%(refname:short)' |
        while read name; do
            git branch --set-upstream-to=origin/$name $name
        done
    

    (实际上,这都是一行,只是在这里分成了更可读的行)。

    这假设您需要每个的上游名称 name 成为 origin/ name 请注意,这将覆盖每个此类名称的任何现有上游集,如果还不存在具有该名称的上游集,则会失败。

    如果 origin/xyzzy xyzzy 作为它的上游。这是完全合乎逻辑的。然而,这可能不是你想要的。

    你可以通过低于 git branch git branch --set-upstream-to 生的 git config 操作:

    git for-each-ref --format='%(refname:short)' |
        while read name; do
            git config branch.$name.remote origin
            git config branch.$name.merge refs/heads/$name
        done
    

    这假设您的 remote.origin.fetch 设置为 +refs/heads/*:refs/remotes/origin/* . 如果不是,您应该已经知道您正在做什么以及如何修改上面的循环。

    git branch -vv 将上游报告为“消失”。Git对于因果关系不是很聪明,所以它认为如果上游被设置为不存在的分支,那么因果序列一定是:

    1. 分支的上游设置为现有上游
    2. 上游被删除,导致分支的上游设置不正确

    而事实上,真正的原因是你设置上游不适当 故意地 ,在预期的设置 . 所以忽略“消失”的注解。