Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 强制远程签出分支_Git_Deployment - Fatal编程技术网

Git 强制远程签出分支

Git 强制远程签出分支,git,deployment,Git,Deployment,目前,我们通过带有post接收挂钩的Git部署到开发人员服务器。它是一个开发服务器,而不是临时服务器,因此我们希望能够部署/查看多个分支(而不仅仅是一个“开发”分支或类似的分支) 当推送一个新分支或提交时,post接收钩子会成功地对推送的任何分支的远程repo执行签出 我们的典型周期可能是: 在开发服务器上查看新branch1-git推送开发服务器branch1 查看开发服务器上的新branch2-git推送开发服务器branch2 再次查看dev服务器上的旧branch1-git推送devse

目前,我们通过带有post接收挂钩的Git部署到开发人员服务器。它是一个开发服务器,而不是临时服务器,因此我们希望能够部署/查看多个分支(而不仅仅是一个“开发”分支或类似的分支)

当推送一个新分支或提交时,post接收钩子会成功地对推送的任何分支的远程repo执行签出

我们的典型周期可能是:

在开发服务器上查看新branch1-
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,但是是的,您在预接收情况下观察到的是正确的。它不会像预期的那样工作。如果有帮助的话,看看我的答案。对不起,你是对的。预接收挂钩不是用于此的正确机制。非常好,没有考虑过