【发布时间】:2018-03-04 04:10:23
【问题描述】:
只是一个简单的问题,在列出这些文件夹时,有没有办法列出不同文件夹的分支?
我的意思是,假设您有几个包含不同项目的文件夹,并且您想做ls -l 并查看不同文件夹中的哪个分支,有什么办法吗?
【问题讨论】:
标签: linux git ubuntu terminal gnome-terminal
只是一个简单的问题,在列出这些文件夹时,有没有办法列出不同文件夹的分支?
我的意思是,假设您有几个包含不同项目的文件夹,并且您想做ls -l 并查看不同文件夹中的哪个分支,有什么办法吗?
【问题讨论】:
标签: linux git ubuntu terminal gnome-terminal
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,这只是一个粗略的解决方案。
【讨论】:
这将打印目录和当前:
find . -type d -depth 1 -print0 -exec git --git-dir={}/.git rev-parse --abbrev-ref HEAD \;
输出将类似于:
./dir<branch>
要使用空格./dir<space><branch> 改进输出,这可以工作:
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 HEAD 与 branch
假设您在一个目录中有多个存储库,您也可以通过替换 branch 来执行 pull 以保持所有项目同步。
别名可能会很方便,例如:
alias pb='find . -type d -depth 1 -print0 -exec git --git-dir={}/.git rev-parse --abbrev-ref HEAD \;'
【讨论】:
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