使用git打patch

146 阅读1分钟

使用git打patch

#!/bin/sh
#set -x
# if [ $# -ne 1 ]; then
#   echo "请提供包含路径的输入文件"
#   exit 1
# fi

# input_file=$1
input_file="git-file-path.txt"

if [ ! -f "$input_file" ]; then
  echo "输入文件不存在"
  exit 1
fi

while IFS= read -r path; do
	path=$(echo "$path" | sed 's/[[:space:]]*$//')
  if [ ! -d "$path" ]; then
    echo "路径不存在: $path"
    continue
  fi

  cd "$path" || continue

  patch_file="$(git format-patch -1)"
  if [ -z "$patch_file" ]; then
    echo "未找到patch文件: $path"
    continue
  fi

  dir_name=$(pwd)

  dir_name=${dir_name//\//-}

  new_patch_file="${dir_name}-${patch_file}"
  new_patch_file="${new_patch_file/-/}"

  mv "$patch_file" "$new_patch_file"
  mv "$new_patch_file" "/data/code/git-patch"

  echo "已处理路径: $path"
done < "$input_file"

echo "操作完成"


这段脚本是一个 Shell 脚本,用于处理包含路径的输入文件中的每个路径。以下是脚本的解释:

脚本的开头是一些注释,使用 # 开头。这些注释提供了一些脚本的说明和注释掉的代码段,用于检查输入文件是否提供。 input_file 变量被设置为固定值 "git-file-path.txt",指定了包含路径的输入文件的名称。

  1. 使用条件判断语句 [ ! -f "$input_file" ] 检查输入文件是否存在。如果文件不存在,则输出错误信息并退出脚本。
  2. while 循环用于逐行读取输入文件中的路径。IFS= read -r path 语句将每行的内容赋值给变量 path。在赋值之后,使用 sed 命令去除路径末尾的空白字符。
  3. 在循环中,使用条件判断语句 [ ! -d "$path" ] 检查路径是否存在。如果路径不存在,则输出错误信息并继续下一次循环。
  4. cd "$path" || continue 用于尝试切换到指定的路径。如果切换成功,则继续执行下面的命令。如果切换失败(例如,路径无法访问),则继续下一次循环。
  5. patch_file="$(git format-patch -1)" 执行 git format-patch -1 命令并将输出的补丁文件名赋值给变量 patch_file
  6. 使用条件判断语句 [ -z "$patch_file" ] 检查变量 patch_file 是否为空。如果为空,表示未找到补丁文件,输出错误信息并继续下一次循环。
  7. dir_name=$(pwd) 将当前路径赋值给变量 dir_name
  8. dir_name=${dir_name////-} 是一种字符串替换语法,用于将变量 dir_name 中的所有斜杠 / 替换为连字符 -
  9. new_patch_file="${dir_name}-${patch_file}" 生成一个新的补丁文件名,将 dir_name 和 patch_file 连接起来。
  10. new_patch_file="${new_patch_file/-/}" 使用字符串替换语法将新补丁文件名中的第一个连字符 - 移除。
  11. mv "$patch_file" "$new_patch_file" 将补丁文件重命名为新的补丁文件名。
  12. mv "$new_patch_file" "/data/code/git-patch" 将补丁文件移动到 /data/code/git-patch 目录下。
  13. 输出已处理的路径信息。
  14. 脚本结束时输出 "操作完成"。