2011-05-02 68 views
2

这是我的设置:不能从一个裸git回购拉到另一个

我有一个'主'git存储库与托管服务。所有的代码都必须在这里结束。称这个'主'。

由于权限(希望限制用于托管服务的SSH密钥的数量),并且因为我最初开始编码指向另一个repo,所以我在VPS上有一个裸存储库。称这个'VPS'。

我在本地开发工作,推送到VPS,定期登录VPS并推送给主。

我得到的问题是,我通过从主站复制来部署我的网站。我做了一些改变,并将它们推回给主人。所以现在我需要在VPS上执行git pull,所以它会从主控端获得最新的代码。不幸的是,当我尝试这个时,git告诉我,我不能用裸仓库来做这件事。为了使事情更加复杂,我没有意识到这一点,所以我将一些新的代码从开发推向VPS,所以VPS在部分日志中缺少一些提交(即不是所有代码中最近提交的提交)。

我该如何解决这个问题,以及如何设置这些东西,以便我可以从VPS推拉?

感谢

- 编辑 -

OK,所以我需要能够从VPS最后3个提交合并到主的新克隆。我该如何做到这一点,我应该如何在git中配置存储库?

+0

从已部署的网站仓库中的主服务器和VPS中获取合并信息,然后将其推送到主服务器/ VPS。 – Artefact2 2011-05-02 20:30:54

+0

@ Artefact2 - 部署的站点只能访问主站,而不幸的是不能访问VPS。 – John 2011-05-02 20:35:57

回答

1

如果您必须执行合并(或cherrypick,可能涉及合并),则需要在不是裸露的存储库上执行合并。

你可以在你的本地开发机器上做到这一点。制作Master和VPS遥控器,从两者中获取,并将它们合并到本地开发主分支中。然后将此分支推送到VPS,然后将其从VPS推送到主设备。这两种推动应该是快进和工作的(如果没有人同时推动对VPS或主人的任何改变,则在这种情况下再次合并)。

另一种选择是将VPS从裸露转换为正常并在那里进行合并。您可以通过重新创建VPS(不使用--bare开关的主从克隆)来完成此操作。如果你在同一个地方重新创建它,本地开发的远程设置仍然会指向它。

+0

我这样做的第二种方式,但它不会工作,所以我最终使用git diff和补丁。因为我失去了一些元数据,但不是理想的世界末日。谢谢。 – John 2011-05-02 21:11:26

3

git pull相当于git fetch + git merge

合并显然需要工作副本(为了能够解决冲突,如果有的话)。

由于在两个裸存储库之间移动东西时实际上不想合并任何东西(合并应该在您自己的克隆的工作副本中完成),并且您只想获取分支的新值,您应该直接调用git fetch

+0

嗯......Git fetch工作在VPS上,但我需要将我直接推送给主控的变更合并,因为它并没有将这些变更引入,因为我已经承诺VPS。我在其他地方克隆了主人。我可以选择最近3次提交VPS到这个新回购吗?这就是我需要做的...... – John 2011-05-02 20:31:44

1

我不明白你的问题。您可以访问VPS和主控。你可以推和拉两者。您可以从两者中拉出,合并这些更改,然后将结果推送到两者。

+0

我不知道能够从两者中拉/推。所以我从proxy.git裸回购克隆,cd到非纯裸克隆,从master.git裸回购拉(拉也做了合并),然后推送到proxy.git。最后,我将cd.gd转换为proxy.git,然后推送给master.git。 <现在两个裸回购方式同步>。然后我通过从master.git和proxy.git中克隆测试。目录是否使用'kompare'与内容进行比较,内容是否相同。 - >听起来像设置两个遥控器会更容易? – 2015-07-22 13:41:35