You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:52:47