&引用;git“推送全部”;(多个存储库)不';行不通
解释如何同时推送多个回购协议&引用;git“推送全部”;(多个存储库)不';行不通,git,heroku,Git,Heroku,解释如何同时推送多个回购协议 My.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 我缺少什么?按照您配置all远程存储库的方式,它根本没有链接到本地存储库中的现有存储库。因此all中的
.git/config
包含:
[remote "all"]
url = git@github.com:commerce-sciences/scale-master.git
url = git@heroku.ron:scale-master.git
git push all
成功部署到heroku我缺少什么?按照您配置
all
远程存储库的方式,它根本没有链接到本地存储库中的现有存储库。因此all
中的第二个存储库与origin
不同,尽管它具有相同的URL
当您推送到all时,Git不知道在这样做的同时它也推送到origin
。因此,它无法更新本地存储库中的远程分支
不幸的是,您无法改变这种行为。不支持远程存储库组。至少现在还没有。如果这样做,Git将有一个从远程存储库(组)all
到origin
的显式链接,并可以更新本地引用
所以现在,您唯一的选择是在按下
all
之后立即获取单个远程设备,使用git fetch origin
或只使用git fetch
(对于远程跟踪分支),或者直接从它们开始。您配置all
远程存储库的方式,它根本没有链接到本地存储库中的现有存储库。因此all
中的第二个存储库与origin
不同,尽管它具有相同的URL
当您推送到all时,Git不知道在这样做的同时它也推送到origin
。因此,它无法更新本地存储库中的远程分支
不幸的是,您无法改变这种行为。不支持远程存储库组。至少现在还没有。如果这样做,Git将有一个从远程存储库(组)all
到origin
的显式链接,并可以更新本地引用
因此,目前,您唯一的选择是在按下
all
后立即获取单个遥控器,使用git fetch origin
或只使用git fetch
(对于远程跟踪分支),或者从一开始就明确地推到它们。据我所知,您不需要“all”遥控器只需在“源”远程设备上配置第二个推送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获取根据我对您需求的了解,您不需要“全部”遥控器:只需在“源”远程设备上配置第二个推送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获取但是如果您确实想要分离“全部”和“源”远程,您仍然可以正确地执行您想要的操作
关键是(再一次)git的非常酷的配置
让我们看看当您git push all
时会发生什么:
- git推送第一个url(好的)
- git推送第二个url(好的)
- 然后它获取第一个url以更新存储库的远程分支,
refs/remote/all
为什么git抱怨“提前提交”?因为它将当前分支(主分支)与上游分支(即原始分支/主分支)进行比较
事实是,我们可以改变(任何一个都足够):
更新的分支,因此我们将所有内容都提取到refs/remotes/origin中,而不是提取到refs/remote/all中。在[remote“all”]
配置块中,行
fetch=+refs/heads/*:refs/remotes/all/*
表示“更新参考/远程/全部”。因此,您只需将其添加/更改为:
`fetch = +refs/heads/*:refs/remotes/origin/*`
完成后:git-fetch-origin
和git-fetch-all
现在将具有相同的效果(更新origin/master
分支)
警告:过多地使用获取配置可能会导致存储库中出现您不知道真正要做什么的情况。因此,保持它的简单性和逻辑性
git比较当前分支的远程分支
如果您git push--set upstream all
,那么您的主分支将跟随all/master,而不是origin/master。这样它就不会抱怨你犯了错。请注意,您只需执行一次,因为上游分支将永久保留
简而言之:
方法1:更改远程“全部”的提取配置
方法2:使您的分支遵循all/master而不是origin/master
[branch "master"]
-remote = origin
+remote = all
merge = refs/heads/master
但是,如果您真的想要分离“全部”和“源”遥控器,您仍然可以正确地执行您想要的操作
关键是(再一次)git的非常酷的配置
让我们看看当您git push all
时会发生什么:
- git推送第一个url(好的)
- git推送第二个url(好的)
- 然后它获取第一个url以更新存储库的远程分支,
refs/remote/all
为什么git抱怨“提前提交”?因为它将当前分支(主分支)与上游分支(即原始分支/主分支)进行比较
事实是,我们可以改变(任何一个都足够):
更新的分支,因此我们将所有内容都提取到refs/remotes/origin中,而不是提取到refs/remote/all中。在[remote“all”]
配置块中,行
fetch=+refs/heads/*:refs/remotes/all/*
表示“更新参考/远程/全部”。所以你只需要添加/更改