【问题标题】:Git hooks - how to handle only files that belong to specific folder inside repo?Git hooks - 如何只处理属于repo中特定文件夹的文件?
【发布时间】:2021-03-31 11:53:41
【问题描述】:

我是 git 的新手,不太擅长 bash。

我有一个存储库(如果重要,在 Bitbucket 中),它只包含两个文件夹。

我已经有一个钩子(用 bash 编写),可以触发 Jenkins 作业。

现在我想更改它,因此它只会为提交到其中一个文件夹的文件触发作业,而不是另一个。

我想使用提交文件的名称,因为它会包含文件夹名称,但我不知道该怎么做。

任何帮助将不胜感激。

【问题讨论】:

  • 你用什么钩子?它是在客户端还是在服务器端?请同时指定钩子的名称(例如post-receive)。
  • 我使用 External Post Receive Hook

标签: bash git hook


【解决方案1】:

post-receive 钩子将在标准输入上提供旧引用、新引用和分支引用。由于可以推送多个分支,因此我们将查找我们感兴趣的那个。然后我们可以使用git diff-tree 列出正在该分支上推送的文件。 glob 表达式$deploy_dir/* 只会列出进入部署目录的文件。

#!/bin/bash
# post-receive script

deploy_branch='master'
deploy_dir='folder2'
trigger_jenkins=0

while read -r oldref newref ref; do
    if [ "${ref##*/}" == "$deploy_branch" ]; then
        if [ ! -z $( git diff-tree --no-commit-id --name-only -r "$newref" $deploy_dir/* ) ]; then
            trigger_jenkins=1
        fi
    fi
done

if [ $trigger_jenkins -eq 1 ]; then
    echo trigger jenkins job
fi

【讨论】:

  • 很高兴能帮上忙。这是一个有趣的谜题!
  • 完美运行!再次非常感谢您
  • 太好了!感谢您的跟进。
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多