【问题标题】:Showing git branch when listing directories - Ubuntu Terminal列出目录时显示 git 分支 - Ubuntu 终端
【发布时间】:2018-03-04 04:10:23
【问题描述】:

只是一个简单的问题,在列出这些文件夹时,有没有办法列出不同文件夹的分支?

我的意思是,假设您有几个包含不同项目的文件夹,并且您想做ls -l 并查看不同文件夹中的哪个分支,有什么办法吗?

【问题讨论】:

    标签: linux git ubuntu terminal gnome-terminal


    【解决方案1】:
    ls -l  | awk '{cmd="git --git-dir="$NF"/.git branch 2>/dev/null| grep ^*";system(cmd "> .tmp");getline branch < ".tmp";close(".tmp");print $0" "branch} END {cmd="rm -rf .tmp";system(cmd)}'
    

    我不擅长awk,这只是一个粗略的解决方案。

    【讨论】:

    • 谢谢,效果很好,只是需要做一些修剪!
    【解决方案2】:

    这将打印目录和当前:

    find . -type d -depth 1 -print0 -exec git --git-dir={}/.git rev-parse --abbrev-ref HEAD \;
    

    输出将类似于:

    ./dir<branch>
    

    要使用空格./dir&lt;space&gt;&lt;branch&gt; 改进输出,这可以工作:

    find . -type d -depth 1 -print0 -exec sh -c 'b=$(git --git-dir={}/.git rev-parse --abbrev-ref HEAD); echo " $b"' \;
    

    要查看所有分支,这将起作用:

    find . -type d -depth 1 -print0 -exec git --git-dir={}/.git branch \;
    

    注意 rev-parse --abbrev-ref HEADbranch

    假设您在一个目录中有多个存储库,您也可以通过替换 branch 来执行 pull 以保持所有项目同步。

    别名可能会很方便,例如:

    alias pb='find . -type d -depth 1 -print0 -exec git --git-dir={}/.git rev-parse --abbrev-ref HEAD \;'
    

    【讨论】:

    • 嗨,我无法使用你显示的命令,我从 find 中得到一个错误,如下所示:“find:paths must before expression:1”。非常感谢您的回答!
    • find . -type d -depth 1 -print0 -exec git --git-dir={}/.git --work-tree=$PWD/{} rev-parse --abbrev-ref HEAD \; ?那个,它确实可以更短:find . -type d -depth 1 -print0 -exec git --git-dir={}/.git branch \;我在包含项目的目录中尝试了一个 macOS
    猜你喜欢
    • 2013-05-20
    • 2021-12-05
    • 2014-03-30
    • 2018-05-31
    • 2018-12-03
    • 2011-08-24
    • 2014-04-29
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多