Git 通过推送到远程服务器传递变量

Git pass variable through push to remote server

我有一个服务器设置为 "production" 远程服务器,它运行 post-recieve shell 脚本来部署站点,或者使用 'hard' 部署主分支。或者 'soft' 将 dev 分支部署到不同的目录。

soft (fast, low resources) - checks out the work-tree to the /dev directory (fast)

hard (slower, more resources) - check out the work-tree to a new '/temp' directory, 
       copies the non-tracked files from the '/live' directory to '/temp' (can be large)
       if successful, renames the '/live' directory to '/live-old'
       renames the '/temp' to '/live' and deletes the older '/live-old' directory

有时我只想在主分支推送上做一个 'soft' 部署,如果它像修补程序一样很小,因为很难复制上传等非跟踪文件,并且如果为不同的应用程序执行多个修补程序,似乎会浪费服务器资源。

我可以将变量从我的本地服务器(如 git 配置文件的远程部分)传递到远程服务器以告诉它对 master 分支进行软部署或硬部署吗?

我在想,如果远程服务器知道本地远程名称是什么,我可以知道,或者我可以向远程定义中的 url 添加一个变量,例如:

[remote "production-hard"]
    url = ssh://project.git?deploy=hard
    fetch = +refs/heads/*:refs/remotes/production/*
[remote "production-soft"]
    url = ssh://project.git?deploy=soft
    fetch = +refs/heads/*:refs/remotes/production/*

我确定这种方式可能行不通,但希望您能理解我正在尝试做的事情。

此外,请说明这是否真的是不好的做法,我应该使用其他方法。

谢谢。

不,您不能传递额外的变量。

但是您可以评估被推送到的分支名称。

因此,您可以设置一个 post-receive hook 检查被推送到的分支:

  • 推送到 production-hard → 执行 hard 部署
  • 推送到 production-soft → 执行 soft 部署