我写了一个小的Bash函数,主要使用awk来处理ls命令的输出,并将git分支名称附加到目录中,如果它们是仓库的一部分。
安装方法:
要安装这个函数,只需复制下面的行并将其追加到您的~/.bashrc文件的末尾。之后您需要执行source .bashrc或重新启动shell会话以使更改生效。
lg (){ ls -alF "$@"|awk '{match($0,/^(\S+\s+){8}(.+)$/,f);b="";c="git -C \""f[2]"\" branch 2>/dev/null";while((c|getline g)>0){if(match(g,/^\* (.+)$/,a)){b="("a[1]")"}};close(c);print$0,b}';}
之后,您将拥有一个名为lg
的新命令,其行为类似于默认的ll
别名(实际上是ls -alF
),但附加了当前的git分支。
示例用法:
这里是一些示例输出,注意在git1/
和git2/
后面的分支名称:
$ lg
total 48
drwxrwxr-x 12 bytecommander bytecommander 4096 Aug 26 14:48 ./
drwxr-xr-x 74 bytecommander bytecommander 4096 Aug 26 15:30 ../
drwxrwxr-x 6 bytecommander bytecommander 4096 Aug 26 14:43 git1/ (master)
drwxrwxr-x 7 bytecommander bytecommander 4096 Aug 26 14:42 git2/ (develop)
drwxrwxr-x 4 bytecommander bytecommander 4096 Aug 26 14:45 no-git/
-rw-rw-r-- 1 bytecommander bytecommander 0 Aug 26 14:42 regular-file
lg
命令仍然接受各种参数,就像
ls
一样。例如,您可以运行
lg -h
,
lg ~/projects
,
lg ..
等。
更新:
已知的错误和缺点:
- 输出不会像默认的
ls
输出那样有颜色(例如,目录是蓝色的,可执行文件是绿色的,符号链接是青色的等)。
- 它无法处理文件名中包含换行符的情况。它们将被显示,但不会显示分支信息。
ls
输出始终正确,并显示您指定为参数的路径的信息(如果有的话,默认情况下为当前目录)。然而,./
和../
条目的分支信息始终相对于当前工作目录,而不是指定的目录。
- 如果在存储库内运行此命令,每个子目录也将附加分支信息。该函数不区分存储库根目录和任何存储库子目录。
如果你遇到更多问题或者恰好知道其中一个列出的问题的解决方案,欢迎留下评论。