【问题标题】:Get incoming branch from push in a Git hook在 Git 钩子中从推送中获取传入分支
【发布时间】:2016-12-19 06:53:26
【问题描述】:

我们目前是一个由 3 名开发人员组成的团队,他们使用 gitlab.com 在一个项目中工作

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

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

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

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

这就是为什么我认为我们可以在测试服务器中签出传入的分支,这样每个人都可以在实时服务器上测试他们的代码,而不必总是签出测试分支。这可以做到吗?我尝试用谷歌搜索传入分支的 git 环境变量,这将使它从那里变得微不足道,但没有得到任何运气。我知道我们都可以推送并手动签出测试服务器中的分支,但该解决方案并不吸引人。只使用 git push 并让服务器处理其余部分会更有效!

这绝对不是使用 Git 进行部署的最佳方式,所以我全心听取建议!

【问题讨论】:

  • 所以您希望测试和生产服务器都有修补程序分支,但不希望将修补程序从测试服务器推送到生产?
  • @Marina-MSFT 是的,但不仅仅是修补程序分支,任何分支都可以。我的主要目标是能够看到我们唯一的测试服务器中的任何分支只做推送。

标签: git version-control git-branch githooks


【解决方案1】:

首先,没有办法从推送中获取传入分支,因为不存在与推送相关的特定传入分支。

任何push 都由多个commits 组成。 commits 可以在一个分支上,但它们也可以在多个分支上。 您甚至可以推送不在任何 named 分支上的提交。

所以这个问题在这方面真的没有意义。

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

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

推送特定的分支
 git push deployement master

【讨论】:

  • 你好。我们的生产服务器很好,除了 master 签出之外,不需要其他分支。我的问题在于测试服务器,因为我们所有人都需要在实时环境中测试我们的分支。
  • 假设 developerA 有一个名为 featureA 的新功能并想在测试服务器上对其进行测试,developerB 与 featureB 处于相同的情况。在测试服务器上签出各自分支以查看更改的最佳方式是什么?
【解决方案2】:

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

更多详情请参考automatically push to another repo

【讨论】:

  • @user2430929,链接中的方式有​​没有帮助你解决问题?
猜你喜欢
  • 2013-12-01
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2020-08-31
  • 1970-01-01
  • 2016-10-25
  • 2020-10-08
相关资源
最近更新 更多