如何在CLI中以类GitHub风格查看Git裸仓库追踪文件?
实现Git裸仓库的类GitHub CLI浏览方案
基础版:树形结构展示(类似tree --dirsfirst)
裸仓库无工作区,无法直接用tree命令,但可通过git ls-tree输出文件列表,结合tree的--fromfile参数生成目录优先的树形结构:
git ls-tree -r --name-only HEAD | sort | tree --dirsfirst --fromfile -
git ls-tree -r --name-only HEAD:递归列出HEAD指向的所有追踪文件/目录sort:配合tree --dirsfirst确保目录排在文件前tree --dirsfirst --fromfile -:从标准输入读取文件名,生成树形视图
进阶版:带提交信息+彩色显示
编写bash脚本,结合git log获取每个文件的最后提交信息,同时用颜色区分目录、文件与提交内容:
创建脚本git-bare-tree.sh:
#!/bin/bash # 颜色定义 DIR_COLOR="\033[1;34m" FILE_COLOR="\033[0;37m" COMMIT_COLOR="\033[0;36m" RESET="\033[0m" # 生成树形并追加提交信息 git ls-tree -r --name-only HEAD | sort | tree --dirsfirst --fromfile - --noreport | while read line; do file=$(echo "$line" | sed 's/^[│├└─ ]*//') [ -z "$file" ] && { echo -e "$line"; continue; } # 判断条目类型(目录/文件) type=$(git ls-tree HEAD "$file" | awk '{print $2}') # 获取最后提交的哈希、时间、作者 commit_info=$(git log -1 --format="%h %ci %an" -- "$file") # 带颜色输出 if [ "$type" = "tree" ]; then echo -e "${DIR_COLOR}$line${RESET} ${COMMIT_COLOR}[$commit_info]${RESET}" else echo -e "${FILE_COLOR}$line${RESET} ${COMMIT_COLOR}[$commit_info]${RESET}" fi done
赋予执行权限后运行:
chmod +x git-bare-tree.sh ./git-bare-tree.sh
高阶版:交互式目录导航
方案1:fzf交互式脚本
创建git-bare-nav.sh,实现目录跳转与文件提交详情查看:
#!/bin/bash current_dir="" while true; do # 获取当前目录下的所有条目(目录优先) entries=$(git ls-tree "${HEAD:-HEAD}" "$current_dir" | awk '{print $2, $4}' | sort -k1,1r) # 用fzf选择条目 selected=$(echo "$entries" | fzf --prompt="$current_dir > " --color=dir:blue,file:white,info:cyan) [ -z "$selected" ] && break type=$(echo "$selected" | awk '{print $1}') name=$(echo "$selected" | awk '{print $2}') if [ "$type" = "tree" ]; then current_dir="$current_dir/$name" else # 显示文件提交详情 echo -e "\n=== $name 提交详情 ===" git log --stat -- "$current_dir/$name" read -p "按回车返回..." fi done
运行后通过上下键选择条目,回车进入子目录或查看文件提交信息,按ESC退出。
方案2:lf文件管理器自定义配置
修改~/.config/lf/lfrc,适配裸仓库场景:
# 检测当前目录是否为Git裸仓库 if git rev-parse --is-bare-repository >/dev/null 2>&1; then # 替换默认文件列表命令 set ls 'git ls-tree -r --name-only HEAD | sort' # 查看文件提交信息 map i '$git log -1 --stat -- "$f"' # 快速显示树形视图 map t '$git ls-tree -r --name-only HEAD | sort | tree --dirsfirst --fromfile -' fi
在裸仓库目录启动lf,即可用常规快捷键导航,按t显示树形,按i查看文件提交详情。
内容的提问来源于stack exchange,提问作者sloppy
相关产品推荐
相关产品推荐

