目前,我使用 git 将项目部署到生产环境,使用git push production master
具有以下接收后挂钩的存储库:
#!/bin/bash
GIT_WORK_TREE=/home/username/www.example.com/myproject/ git checkout -f
production
是一个遥控器,通过添加git remote add production ssh://server/home/username/projects/myproject.git
。
但是现在我需要将一个单独的分支部署到服务器上的一个单独路径。我确实想出了一个解决方案,但我想有更好的方法来做到这一点。
我所做的是在服务器上创建一个新存储库myproject-alternate.git
,使用类似的 post-receive 钩子(替换/myproject/
为/myproject-alternate/
),将这个新存储库添加为git remote add alternate ssh://server/home/username/projects/myproject-alternate.git
. 现在我可以使用git push alternate branchname:master
.
这有效,但我有一些问题:
- 部署到备用服务器的命令不是我所期望的——不止一次我忘记了
:master
最后的命令,服务器的存储库收到了一个新的分支,并且没有触发 post-receive 钩子。 - 我不确定在服务器上创建一个新的存储库是否是最好的解决方案,我想知道一个更大的项目会发生什么。
是否有其他方法可以在没有上述问题的情况下完成此部署流程?也许一个更好的 post-receive 钩子使用接收到的分支名称来部署到正确的路径?(这甚至可能吗?)