由于生产中有多台服务器,我正在尝试简化代码部署过程。
对于部署自动化,我引用了以下链接:https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps,这非常有用。
但问题是,在我们的案例中,我们必须立即解决客户的问题,最终修改生产服务器上的代码。
因此,由于git推动,我们无法承受失去的变化。
我在post-receive hook中添加了一个检查,以检查是否有任何文件的修改,如下所示。
MODIFICATIONS="git --work-tree=/code/path --git-dir=/home/git/repo_path status | grep modified:"
if [ -z "$MODIFICATIONS" ];then
git --work-tree=/code/path --git-dir=/home/git/repo_path checkout -f
else
echo "Modified present !!!"
fi
这有助于保留对文件的更改。但每个git push prod1 master
都会更新存储库。
我试过预先接收&更新钩子,但它们不起作用(我想因为我不断推动同一个分支master
)。
请建议我如何避免更改甚至被推送到远程git存储库到master
分支
所以,当我说git push prod1 master
时,它应该给我一个错误。
答案 0 :(得分:2)
我不打算讲述与修改生产服务器上的代码相关的邪恶" - 这是一种可怕的做法,但是你处于某种状况,它就是这样。
但是,您可以简单地要求正在修改生产服务器上的代码的开发人员定期检查他们的代码,即使只使用orders.shipmentId
<等命令,也只检查服务器本身的本地git存储库。 / p>
这样,即使更改未被合并回实际开发存储库,也会在制作它们的计算机上跟踪它们。
当某人确实git commit -a -m "emergency change for customer xyz"
时,这确实会阻止传入的更改,因为主分支将与开发存储库上的主分支分开,并且无法快进推送。
如果您遵循此建议,命令git push prod1 master
最终会产生错误,就像您要求的那样。