如何在 git 中的接收后钩子中处理分支上的文件



我有一个远程服务器,我在其上创建了一个裸 git 存储库。

我想创建一个钩子,以便在任何给定分支上收到的最新代码上运行给定的脚本。

我知道post-receive钩可以用于它。但是我想执行以下操作:

  1. 获取接收代码的分支。
  2. 签出临时位置中的代码并对其运行操作。

我该如何执行上述操作?

  • 对于 1),您有一个读取分支名称(通过 stdin)的示例:
    "无法从 Git 接收后钩子检测到分支"
  • 对于 2),您需要适当设置GIT_WORK_TREE:
    "使用 git + 接收后钩子管理网站:推送更改时出错"

请参阅"多个远程分支和工作树的 Git 接收后"中结合的这两种技术:

#!/bin/bash
while read oldrev newrev ref
do
  branch=`echo $ref | cut -d/ -f3`
  if [ "master" == "$branch" ]; then
    git --work-tree=/path/under/root/dir/live-site/ checkout -f $branch
    echo 'Changes pushed live.'
  fi
  if [ "dev" == "$branch" ]; then
    git --work-tree=/path/under/root/dir/dev-site/ checkout -f $branch
    echo 'Changes pushed to dev.'
  fi
done

最新更新