Ubuntu 22.04下实现git_just_added命令筛选末次提交新增文件
实现
git_just_added命令,判断文件是否为HEAD最后一次提交的新增文件 首先先修正你提供的Bash脚本语法错误,原脚本存在循环结构缺失、条件判断语法错误等问题,修正后的脚本框架如下:
for f in $(find -name "abc.txt") do if git_just_added "$f" then echo "$f" fi done
实现git_just_added的两种方式
方式1:定义为Shell函数
在当前脚本开头或者你的Bash配置文件(如~/.bashrc)中添加以下函数:
git_just_added() { # 检查参数数量是否合法 if [ $# -ne 1 ]; then return 1 fi local target_file="$1" # 筛选最后一次提交中新增的文件,精确匹配目标文件 git diff --name-only --diff-filter=A HEAD~1 HEAD | grep -Fxq "$target_file" }
- 核心逻辑:
git diff --name-only --diff-filter=A HEAD~1 HEAD会列出当前HEAD与上一次提交之间新增的所有文件;grep -Fxq用于精确匹配文件名,静默返回匹配结果(匹配成功返回0,失败返回1),正好满足if判断的需求。
方式2:写成独立可执行脚本
- 创建脚本文件(命名为
git_just_added):
#!/bin/bash if [ $# -ne 1 ]; then exit 1 fi target_file="$1" git diff --name-only --diff-filter=A HEAD~1 HEAD | grep -Fxq "$target_file"
- 赋予执行权限:
chmod +x git_just_added
- 将脚本所在目录加入系统
PATH,或直接移动到/usr/local/bin下,即可全局调用该命令。
兼容首次提交场景
如果仓库是首次提交(没有HEAD~1节点),需要修改逻辑适配:
git_just_added() { if [ $# -ne 1 ]; then return 1 fi local target_file="$1" # 判断是否存在上一次提交节点 if git rev-parse --verify HEAD~1 >/dev/null 2>&1; then git diff --name-only --diff-filter=A HEAD~1 HEAD | grep -Fxq "$target_file" else # 首次提交时,直接检查文件是否在当前提交的文件列表中 git ls-tree --name-only HEAD | grep -Fxq "$target_file" fi }
内容的提问来源于stack exchange,提问作者Enzo Ferrazzano
相关产品推荐
相关产品推荐

