Git 强制远程签出分支
目前,我们通过带有post接收挂钩的Git部署到开发人员服务器。它是一个开发服务器,而不是临时服务器,因此我们希望能够部署/查看多个分支(而不仅仅是一个“开发”分支或类似的分支) 当推送一个新分支或提交时,post接收钩子会成功地对推送的任何分支的远程repo执行签出 我们的典型周期可能是: 在开发服务器上查看新branch1-Git 强制远程签出分支,git,deployment,Git,Deployment,目前,我们通过带有post接收挂钩的Git部署到开发人员服务器。它是一个开发服务器,而不是临时服务器,因此我们希望能够部署/查看多个分支(而不仅仅是一个“开发”分支或类似的分支) 当推送一个新分支或提交时,post接收钩子会成功地对推送的任何分支的远程repo执行签出 我们的典型周期可能是: 在开发服务器上查看新branch1-git推送开发服务器branch1 查看开发服务器上的新branch2-git推送开发服务器branch2 再次查看dev服务器上的旧branch1-git推送devse
git推送开发服务器branch1
查看开发服务器上的新branch2-git推送开发服务器branch2
再次查看dev服务器上的旧branch1-git推送devserver branch1
但是,当我们想签出到比当前活动分支更老的分支时,我们不能执行git push devserver branch1
,因为远程repo响应“一切都是最新的”,因为branch1
之前已经推送过了。显然,post-receive钩子没有运行,那么是否有其他方法来操作远程签出
我知道我可以用SSH连接到dev服务器并通过这种方式签出到branch1
,但如果可能的话,我希望从本地repo执行该操作。我尝试过预接收和更新挂钩,但在这种情况下,这两种挂钩似乎都没有运行
非常感谢任何帮助 控制远程工作副本是非常有限的,因为git并不是专门用于此目的的,所以您必须对服务器进行SSH。制作一个小脚本来连接和签出将节省您的时间和手指肌肉。您也可以尝试将同一个脚本连接到另一个脚本。这意味着无论push命令是否成功,脚本都将运行。这就是说,我会对这类东西非常谨慎,因为你现在所做的是以一种他们不是设计用来使用的方式使用钩子,并且可能在将来为自己挖一个洞 真正的解决方案是@CharlesB建议的——使用一个简单的脚本 编辑:请忽略此答案。正如评论所说,这是行不通的。也可以随意否决;) 既然它只是一个(dev)服务器,为什么不删除该分支并重新创建它呢
git push devserver :branch1
git push devserver branch1
谢谢你的建议,我试过使用pre-receive钩子,但它似乎没有任何作用。默认情况下没有pre-receive.sample文件(和其他文件一样),所以我想你不知道是否需要做些什么来启用它?你似乎暗示pre-receive钩子运行,即使它说所有内容都是最新的,并且没有推送任何引用。事实并非如此。@atkaye-我的评论是在carleeto,但是是的,您在预接收情况下观察到的是正确的。它不会像预期的那样工作。如果有帮助的话,看看我的答案。对不起,你是对的。预接收挂钩不是用于此的正确机制。非常好,没有考虑过