This answer解释了如何同时推送多个回购。
我的.git/config
包含:
[remote "all"]
url = git@github.com:commerce-sciences/scale-master.git
url = git@heroku.ron:scale-master.git
git push all
成功部署到heroku。
由于某种原因,似乎没有将更改推送到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)
我错过了什么?
答案 0 :(得分:5)
您配置all
远程存储库的方式根本没有链接到本地存储库中的现有存储库。因此,all
中的第二个存储库与origin
不同,尽管它具有相同的网址。
当你全力以赴时,Git并不知道在这样做时它也会推送到origin
。因此,它无法更新本地存储库中的远程分支。
不幸的是,您无法更改此行为。 git push
不支持git fetch
的远程存储库组。至少尚未。如果是这样,Git将具有从远程存储库(组)all
到origin
的显式链接,并且可以更新本地引用。
所以现在,唯一的选择就是在推送到all
之后,使用git fetch origin
或仅git fetch
(对于远程跟踪分支)立即获取单个遥控器,或者明确地向他们推送。
答案 1 :(得分:2)
根据我对你的需求的理解,你不需要一个"所有"远程。 :只需在" origin"上配置第二个推送网址。遥远的,你不会遇到这个问题。
[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
现在推送到两个网址。
- git fetch origin
(仍然)仅从第一个网址
答案 2 :(得分:1)
但如果你真的想要分开的“全部”和“原点”遥控器,你仍然可以正确地做你想要的。
关键是(再一次)在非常酷的git配置中。
让我们看看git push all
时会发生什么:
git推送第一个网址(好的)
git推送第二个网址(好的)
然后提取第一个网址以更新存储库的远程分支refs/remote/all
。
为什么git抱怨“提前提交”?因为它将您当前的分支(主)与上游分支(origin / master)进行比较。
事实是,我们可以改变(任何一个就足够了):
更新的分支,因此我们将所有内容提取到refs / remotes / 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配置可能会导致您无法知道实际操作的存储库。所以保持简单和合乎逻辑。
如果你git push --set-upstream 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