bash - Git应用忽略失败的补丁
问题描述
我有一个 bash 脚本,它应用了一个目录中的所有 git 补丁(脚本见底部)。每次我在服务器上部署网站时都会运行此脚本。
我现在遇到了一个问题,几周后补丁抛出错误并退出脚本并出现错误“补丁不适用”。有谁知道是否有一种方法可以忽略损坏的/旧的补丁,并且可能只是显示脚本不再工作的错误,而不是完全退出导致我的网站部署失败的脚本?
for file in ${PROJECT_PATH}/${PATCH_DIR}/*.patch; do
if [[ -e ${file} ]]; then
echo -n "Applying patch '${file}' ... "
${RUN_AS} git ${GIT_PROJECT_PATH} apply --directory="${PROJECT_PATH}" --unsafe-paths "${file}"
echo "Done"
fi
done
解决方案
我看不出它会停止应用补丁的任何原因。如果一个失败,你可能会得到一些错误输出,然后你说“完成”(我认为这可能有点误导)然后for会继续。
我想对于初学者来说,你需要控制补丁是否成功。像这样(根据您的需要调整):
for file in ${PROJECT_PATH}/${PATCH_DIR}/*.patch; do
if [[ -e ${file} ]]; then
echo -n "Applying patch '${file}' ... "
${RUN_AS} git ${GIT_PROJECT_PATH} apply --directory="${PROJECT_PATH}" --unsafe-paths "${file}"
if [ $? -ne 0 ]; then
# there was an error
echo git apply of patch $file failed on $GIT_PROJECT_PATH/$PROJECT_PATH
else
echo "Done"
fi
fi
done
或类似的规定。
推荐阅读
- angular - 从 JSON 响应生成 Angular 组件所需的新格式
- snowflake-cloud-data-platform - 在雪花中检索帐户的所有可用屏蔽策略
- flutter - 颤振:firebase_admob 与 admob_flutter
- java - 所有用户都可以使用 azure spring security 登录
- java - 使用仅使用单个代码行的表示法将多个元素分配给数组的时间复杂度是多少?
- javascript - 任何人都可以告诉我的 hbs Templete 没有运行的快递错误在哪里?
- python - 在 python 脚本调用中传递文件的位置而不是变量
- angular - 如何在 ngOnit 方法中为订阅者和超时编写测试用例?
- php - 使用php和html上传单个文本文件并遍历查找重复的单词
- blazor - 在 .Net Core Blazor 服务器应用程序中显示 ASP.NET 表单