每个项目我有两个远程存储库:一个位于本地NAS上,另一个位于GitHub上。将我的项目存储在两个物理上不同的位置,我感觉更安全。只要我按下这个,就可以在Visual Studio中很好地工作:
我只创建两个远程存储库,提交本地更改,然后推送到每个远程存储库。
但它如何以另一种方式运作?我需要能够创建分支,使用它们,同时提交repos和merge。 如何在两个远程存储库中创建相同的新分支?
答案 0 :(得分:1)
如何在两个远程存储库中创建相同的新分支?
在某些方面,Git对于分支名称有点狡猾。 Git真正关心的是提交。当你运行git push
时,你让你的Git在网络电话上打电话给另一个Git;你的Git将你拥有的任何新提交交给其他Git,他们没有。
为了让他们的 Git 记住记住这些提交的名称,你的Git也给他们的Git一些名字更新:“请设置这个分支名称以记住这个特定的承诺。”在这里,Git的devil-may-care attitude关于分支名称有一个例外:当他们的Git收到git push
时,如果名称已经存在,Git“想要”推送做根据新提交的内容对名称进行快进操作。
如果名称尚未,他们的Git只会设置名称,现在名称已存在。所以创建分支是微不足道的:只有git push
(如果这是第一次推送到默认远程,可能还有-u
,通常称为origin
) 。接收Git没有此名称的分支,只会创建您要求他们创建的名称。
要反复推送到两个不同的“其他Git”,你可能想制作两个不同的遥控器(好吧,听起来你已经这么做了)。这些遥控器中只有一个可以是您自己的存储库中分支的(单个)上游,但您可以随时git push remote1 branch:branch
和git push remote2 branch:branch
。这取决于接收Git在冒号后创建或更新他们的分支名称 - 或者,可能拒绝更新,因为它不是快进操作。
如果其他Git拒绝推送,您可以设置强制标志并重试:这会使您的请求“请将名为branch
的分支设置为1234567...
”,并将其设置为命令,没有礼貌的“请”在前面。他们仍然可以拒绝,但默认情况下,大多数接收Gits都会遵守。 (GitHub具有基于网页的控制旋钮,用于设置是否遵守此类命令。在NAS上,您可以使用ssh,创建和管理pre-receive
和update
挂钩以执行相同类型的操作控制。)