如果文件被修改,阻止主分支被推送
Block master branch being pushed if file modified
由于我们在生产环境中有多台服务器,我正在努力简化代码部署过程。
对于部署自动化,我参考了以下内容 link: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
它应该给我一个错误。
我不会讲授与 "modifying the code on production servers" 相关的邪恶 - 这是可怕的做法,但你处于某种情况,它就是这样。
但是,您可以简单地要求在生产服务器上修改代码的开发人员定期签入他们的代码,即使只是使用以下命令检查服务器本身的本地 git 存储库git commit -a -m "emergency change for customer xyz"
这样,即使更改未合并回实际的开发存储库,也会在进行更改的机器上对其进行跟踪。
当有人这样做时,这确实会阻止传入的更改 git push prod1 master
,因为 master 分支将与开发存储库上的 master 分支分道扬镳,并且无法快进推送。
如果您遵循此建议,命令 git push prod1 master
最终会产生错误,正如您所要求的那样。
由于我们在生产环境中有多台服务器,我正在努力简化代码部署过程。
对于部署自动化,我参考了以下内容 link: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
它应该给我一个错误。
我不会讲授与 "modifying the code on production servers" 相关的邪恶 - 这是可怕的做法,但你处于某种情况,它就是这样。
但是,您可以简单地要求在生产服务器上修改代码的开发人员定期签入他们的代码,即使只是使用以下命令检查服务器本身的本地 git 存储库git commit -a -m "emergency change for customer xyz"
这样,即使更改未合并回实际的开发存储库,也会在进行更改的机器上对其进行跟踪。
当有人这样做时,这确实会阻止传入的更改 git push prod1 master
,因为 master 分支将与开发存储库上的 master 分支分道扬镳,并且无法快进推送。
如果您遵循此建议,命令 git push prod1 master
最终会产生错误,正如您所要求的那样。