从Git钩子中推送传入的分支

时间:2016-12-19 06:53:26

标签: git version-control git-branch githooks

我们目前是由使用gitlab.com

在项目中工作的3名开发人员组成的团队

我们有两台服务器,一台用于生产,另一台用于测试,两台服务器都运行在不同的水滴上。

在我们完成更改之后,我们将推送到测试服务器,我们有这个Git post-receive hook(它是一个裸存储库):

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

我们使用名为'testing'的分支(在测试服务器中检出),所以一切正常。一切正常后,我们将其合并为master,然后推送到生产。这里的问题是,有时我们可能需要创建一个分支来修复生产中的错误但我们不想在我们的测试分支中上传正在进行的工作,我们还想测试这个我们的测试服务器中的hotfix 分支。

这就是为什么我认为我们可以检查测试服务器中的传入分支,因此每个人都可以在实时服务器上测试他们的代码,而无需一直检查测试分支。可以这样做吗?我尝试用谷歌搜索git环境变量来获取传入的分支,这将使它从那里变得微不足道,但没有得到任何运气。我知道我们都可以推送并手动检查测试服务器中的分支,但该解决方案并不吸引人。使用git push做更高效的工作,让服务器处理剩下的工作!

这绝对不是使用Git进行部署的最佳方式,所以我很乐意接受建议!

2 个答案:

答案 0 :(得分:0)

首先,无法从推送获取传入的分支,因为没有与推送相关联的特定传入分支。< / p>

任何push都包含多个commitscommits 可以位于单个分支上,但它们也可以位于多个分支上。 您甚至可以推送不在任何命名分支上的提交。

所以这个问题在这方面确实没有意义。

其次,为什么您希望生产服务器看不到master分支?如果生产服务器已签出master分支,则hotfix分支不会自动部署,因为它已记录在.git/目录中。 因此推送未使用的分支实际上几乎没有什么害处。

第三,如果您完全确定不能将任何未使用的分支推送到部署系统(例如,因为部署服务器属于在他们付款之前不能看到该修补程序的客户),当然可以用

推送特定的分支
 git push deployement master

答案 1 :(得分:0)

有办法,您可以自动将测试服务器中的主分支推送到生产环境。您需要包含以下参数:<oldrev> <newrev> <refname>

更多细节,请参阅automatically push to another repo