这是我的设置:
我有一个带有托管服务的'master'git存储库。所有代码必须在这里结束。称之为“主人”。
由于权限(想要限制用于托管服务的SSH密钥的数量),并且因为我最初开始编写指向另一个repo的代码,所以我在VPS上有一个裸存储库。称之为'VPS'。
我在开发本地工作,推送到VPS,定期登录VPS并推送到掌握。
我遇到的问题是我通过克隆主人来部署我的网站。我做了一些改变,然后把它们推回主人。所以现在我需要在VPS上执行git pull
,这样它才能从master获得最新的代码。不幸的是,当我尝试这个时,git告诉我,我不能用裸存储库做到这一点。为了使事情变得更复杂,我没有意识到这一点,所以我将一些新的代码从开发推送到VPS,因此VPS在日志的一部分中缺少一些提交(即不是所有代码中的最新提交)。
我该如何解决这个问题?什么是一个很好的设置方式,以便我可以从VPS推送和拉出?
由于
- 编辑 -
好的,所以我需要能够将VPS的最后3次提交合并到master的新克隆中。我该怎么做,我应该如何在git中配置存储库?
答案 0 :(得分:3)
git pull
相当于git fetch
+ git merge
。
合并显然需要工作副本(为了能够解决冲突,如果有的话)。
因为在两个裸存储库之间移动东西时你实际上并不想合并任何东西(合并应该在你自己的克隆工作副本中完成),而你只想获得分支的新值,你应该只是调用直接git fetch
。
答案 1 :(得分:1)
如果你必须进行合并(或者可能涉及合并的cherrypick),你需要在非裸露的存储库上进行。
您可以在本地开发机器上执行此操作。制作主服务器和VPS远程服务器,从两者中获取,并将它们合并到本地开发主分支中。然后将此分支推送到VPS,然后将其从VPS推送到主服务器。这两个推送应该是快进和工作(假如没有人同时推动对VPS或master的任何更改,在这种情况下再次合并)。
另一种选择是将VPS从裸转换为正常并在那里进行合并。您可以通过重新创建VPS(从master没有--bare开关克隆)来完成此操作。如果在同一位置重新创建它,本地开发的远程设置仍将指向它。
答案 2 :(得分:1)
我不明白你的问题。您可以访问VPS和master。您可以从/向两者推送。您可以从两者中提取,合并这些更改,然后将结果推送到两者。