引言
不知道各位有没有试过一种情况
git提交记录
A功能第1次提交
A功能第2次提交
B功能第1次提交
B功能第2次提交
B功能第3次提交
A功能第3次提交
这里A功能做完了,但是B功能不能上
这里B功能和A功能没有交叉的文件
那就需要提取出来A功能所有涉及到的文件,并且去重了!
前提条件
- 需要在
Linux
系统或者Windows
系统下的git-bash
窗口执行此命令 - 提前安装好
git
软件和zip
命令,安装方法如下
实现效果
注意!!!
这里生成的所有文件,都是基于本地工作区内的文件打包的
并不是某次提交时的文件状态
git
提交指示的几个时间点只是汇总出来文件名而已,不是那时候的文件状态
注意,这个目录必须是git
项目的目录噢
这个文件名可以自己修改
然后生成的目录会保存在git_commit_files
目录下
代码实现
#!/bin/bash
# 检查参数
if [ $# -lt 1 ]; then
echo "用法: $0 <commit1> [<commit2> ...]"
exit 1
fi
# 输出目录
output_dir="git_commit_files/$(date +%s)"
mkdir -p "$output_dir"
# 遍历所有提交
for commit in "$@"; do
echo "处理提交: $commit"
# 检查提交是否存在
if ! git rev-parse --verify $commit &>/dev/null; then
echo "错误: 提交 $commit 不存在!" >&2
continue
fi
# 获取文件列表
output_file="$output_dir/files_$commit.txt"
# 判断是否为初始提交
git diff-tree --no-commit-id --name-only -r $commit > "$output_file"
echo " 文件列表已保存至: $output_file"
done
# 生成合并文件(去重)
cat "$output_dir"/files_*.txt | sort -u > "$output_dir/all_files_combined.txt"
echo "合并文件列表(去重): $output_dir/all_files_combined.txt"
cat "$output_dir"/all_files_combined.txt | xargs zip "$output_dir"/all_files.zip
echo "完成! 所有结果保存在: $output_dir"