【发布时间】:2021-08-22 08:14:07
【问题描述】:
我想要自上次推送以来已更改的文件。
目前我可以找到上次提交的差异。但是,如果我在一次推送中有多个提交,则只考虑最后一次提交:
git diff-tree --no-commit-id --name-only -r ${CI_COMMIT_SHA} | while read FILE ; do
infra="$(echo ${FILE} | cut -d'/' -f1)";
application="$(echo ${FILE} | cut -d'/' -f2)";
project="$(echo ${FILE} | cut -d'/' -f3)";
if [[ " ${seen[*]} " == *"$project"* ]]
then
echo "Project ${project} has already been sync"
continue
fi
seen+=($project)
if [[ ! -d "${SCRIPT_DIR}/${infra}" ]] || [[ ! -d "${SCRIPT_DIR}/${infra}/${application}" ]] || [[ ! -d "${SCRIPT_DIR}/${infra}/${application}/${project}" ]]
then
echo "${SCRIPT_DIR}/${infra}/${application}/${project} not a valid folder"
continue
fi
pushd ${SCRIPT_DIR}/${infra}/${application}/${project}
echo "Auto delivery ${project}"
bash delivery.sh auto
retVal=$?
if [ $retVal -ne 0 ]; then
echo "Error (code $retVal) : check rsync return"
exit 1
fi
popd
done
在 delivery.sh 中,我对上次提交 (${CI_COMMIT_SHA}) 中更改的文件夹执行 rsync。但是,我想考虑上一次推送/MR 中的所有文件夹,而不仅仅是提交。
这可能吗?
【问题讨论】:
-
这个工作流程似乎有点脆弱。如果出于某种原因,
delivery.sh一次推送失败会发生什么。然后你修复导致delivery.sh在下一次提交中失败的问题并推送它。delivery.sh应该只查看最后一次提交,还是重做之前失败的提交?对我来说,设计delivery.sh来根据当前快照进行分析似乎更安全,而不仅仅是最近的更改。 -
对于它的价值,我不知道有一种方法可以做你所要求的,尽管可能有一个服务器端相当于 GitLab 中的 reflog。
-
@joanis 我在问题中添加了更多代码。回答您的问题:
delivery.sh是一个 rsync 命令(比一个文件夹更复杂)。我想知道我是否可以使用 push_id 而不是${CI_COMMIT_SHA}。因为实际上,如果我在一次推送中进行两次提交,那么只有最后一个会在${CI_COMMIT_SHA}中,然后,只有最后一个会同步