1

这个答案解释了如何同时推送到多个仓库。

  1. 我的.git/config包含:

    [remote "all"]
        url = git@github.com:commerce-sciences/scale-master.git
        url = git@heroku.ron:scale-master.git
    
  2. git push all成功部署到heroku。

  3. 由于某种原因,似乎没有将更改推送到 github。

> git push all
Everything up-to-date
Everything up-to-date

> git status
# On branch master
# Your branch is ahead of 'origin/master' by 22 commits.
#
nothing to commit (working directory clean)

我错过了什么?

4

3 回答 3

5

您配置all远程存储库的方式根本没有链接到本地​​存储库中的现有存储库。因此,虽然它具有相同的 URL ,但其中的第二个存储库all并不相同。origin

当你向所有人推送时,Git 并不知道它origin在执行此操作时也会推送。因此,它无法更新本地存储库中的远程分支。

不幸的是,您无法更改此行为。git push不支持远程存储库组git fetch。至少现在还没有。如果是这样,Git 将有一个从远程存储库(组)all到本地引用的显式链接,origin并且可以更新本地引用。

因此,目前,您唯一的选择是在推送到all、使用git fetch origin或只是git fetch(对于远程跟踪分支)之后立即获取各个遥控器,或者一开始就明确地推送到它们。

于 2013-03-07T14:12:09.670 回答
2

根据我对您需求的了解,您不需要“全部”遥控器。: 只需在“origin”遥控器上配置第二个push url,就不会出现这个问题。

[remote "origin"]
    url = git@github.com:commerce-sciences/scale-master.git
    url = git@heroku.ron:scale-master.git

输出git remote -v

origin git@github.com:commerce-sciences/scale-master.git (fetch)
origin git@github.com:commerce-sciences/scale-master.git (push)
origin git@heroku.ron:scale-master.git (push)

这意味着: -git push origin现在推送到两个 url。- git fetch origin(仍然)仅从第一个 url 获取

于 2015-02-04T17:43:04.953 回答
1

但是如果你真的想要分离“所有”和“原点”遥控器,你仍然可以正确地做你想做的事。

关键是(再一次)在非常酷的 git 配置中。

让我们看看当你git push all

  • git 推送第一个 url(好的)

  • git 推送第二个 url(好的)

  • 然后它会获取第一个 url 以更新存储库的远程分支,refs/remote/all.

为什么 git 抱怨“提前提交”?因为它将您当前的分支(master)与上游分支(origin/master)进行比较。

事实是,我们可以改变(任何一个都足够了):

  1. 更新的分支,因此我们将所有内容都提取到 refs/remote/origin 而不是 refs/remote/all 中。在[remote "all"]配置块中,该行

    fetch = +refs/heads/*:refs/remotes/all/*

意思是“更新 refs/remotes/all”。因此,您只需将其添加/更改为:

`fetch = +refs/heads/*:refs/remotes/origin/*`

它完成了:git fetch origin现在git fetch all将具有相同的效果(更新origin/master分支)

警告:过多地使用 fetch 配置可能会导致您不知道真正完成了什么的存储库。所以保持简单和合乎逻辑。

  1. git 比较当前分支的远程分支

如果你git push --set-upstream all,那么你的 master 分支将跟随 all/master 而不是 origin/master。所以它不会抱怨你有承诺。请注意,您只需要这样做一次,因为上游分支是永久保留的。

简而言之 :

方法 1:更改远程“全部”的获取配置

[remote "all"]
   url = (url1)
   url = (url2)
   -fetch = +refs/heads/*:refs/remotes/all/*
   +fetch = +refs/heads/*:refs/remotes/origin/*

方法 2:让你的分支跟随 all/master 而不是 origin/master

[branch "master"]
    -remote = origin
    +remote = all
    merge = refs/heads/master
于 2015-02-04T18:08:30.850 回答