Bitbucket Pipeline 试图获取与以下文件相比发生更改的文件列表
Bitbucket Pipeline trying to get list of files changed compared to
我有以下 bash 脚本用于在 bitbucket 管道中执行 linting 检查。
#!/bin/bash
set -e
git fetch origin master:refs/remotes/origin/master
FORK_POINT=$(git merge-base HEAD origin/master)
PY_FILES=$(git --no-pager diff --name-only HEAD $FORK_POINT | grep "\.py$")
if [ "$PY_FILES" ]; then
flake8 $PY_FILES
else
echo "No *.py files found"
exit 0
fi
在 UTC 时间 12 月 4 日下午 4 点左右之前,它一直运行良好。经过一些试验,我将问题缩小到这一行
PY_FILES=$(git --no-pager diff --name-only HEAD $FORK_POINT | grep "py$")
。当我删除 grep 和 echo $PY_FILES
脚本成功完成但日志中没有显示任何内容。因此,当管道 运行 时 git --no-pager diff --name-only HEAD $FORK_POINT
似乎没有返回任何内容,我猜这会导致 grep 出错?当我在本地 运行 时一切正常,所以 git --no-pager diff --name-only HEAD $FORK_POINT
肯定会返回结果。
任何人都可以帮我找出这里出了什么问题,或者以另一种方式告诉我我可以获得 python 文件的列表,该文件在分支中更改为 运行 flake8 on?
看来您只需要调试您的管道;您的本地克隆与 bitbucket 管道使用的克隆之间的一个明显区别是您很可能不在处理同一个活动提交 (HEAD
)。
让您的管道输出它正在处理的内容:
- 它的主动提交:
git rev-parse HEAD
- 它的
origin/master
版本:git rev-parse origin/master
git merge-base
的结果:echo $FORK_POINT
根据您的评论:空的 FORK_POINT
可能表示管道是从与 origin/master
不再有共同祖先的提交中触发的。
检查远程的历史记录 HEAD
:
git log --graph --oneline <sha from the pipeline>
例如,您可以将其与 origin/master
的历史进行比较:
git log --graph --oneline <sha> origin/master
我有以下 bash 脚本用于在 bitbucket 管道中执行 linting 检查。
#!/bin/bash
set -e
git fetch origin master:refs/remotes/origin/master
FORK_POINT=$(git merge-base HEAD origin/master)
PY_FILES=$(git --no-pager diff --name-only HEAD $FORK_POINT | grep "\.py$")
if [ "$PY_FILES" ]; then
flake8 $PY_FILES
else
echo "No *.py files found"
exit 0
fi
在 UTC 时间 12 月 4 日下午 4 点左右之前,它一直运行良好。经过一些试验,我将问题缩小到这一行
PY_FILES=$(git --no-pager diff --name-only HEAD $FORK_POINT | grep "py$")
。当我删除 grep 和 echo $PY_FILES
脚本成功完成但日志中没有显示任何内容。因此,当管道 运行 时 git --no-pager diff --name-only HEAD $FORK_POINT
似乎没有返回任何内容,我猜这会导致 grep 出错?当我在本地 运行 时一切正常,所以 git --no-pager diff --name-only HEAD $FORK_POINT
肯定会返回结果。
任何人都可以帮我找出这里出了什么问题,或者以另一种方式告诉我我可以获得 python 文件的列表,该文件在分支中更改为 运行 flake8 on?
看来您只需要调试您的管道;您的本地克隆与 bitbucket 管道使用的克隆之间的一个明显区别是您很可能不在处理同一个活动提交 (HEAD
)。
让您的管道输出它正在处理的内容:
- 它的主动提交:
git rev-parse HEAD
- 它的
origin/master
版本:git rev-parse origin/master
git merge-base
的结果:echo $FORK_POINT
根据您的评论:空的 FORK_POINT
可能表示管道是从与 origin/master
不再有共同祖先的提交中触发的。
检查远程的历史记录 HEAD
:
git log --graph --oneline <sha from the pipeline>
例如,您可以将其与 origin/master
的历史进行比较:
git log --graph --oneline <sha> origin/master