如何在git中查找空的分支和标签

问题描述 投票:4回答:2

我已经迁移了一个大型的svn存储库,其中包含数百个分支和标签,将它们拆分为多个存储库,现在我正在检查在推动迁移之前,这些存储库中是否有任何空*分支/标记应删除。直播。

是否有比找到每个存储库并检出每个分支更快的方法?


*出于这个问题的目的,“空分支”或“空标记”是指指向不包含文件的提交的分支或标记。

git git-svn
2个回答
0
投票
使用您选择的编程语言为每个分支和标签运行git ls-tree <branch/tag> | wc -l,然后检查0。您可以通过git branch获得分支列表,并通过git tag获得标签列表。

这是使用bash的分支的简单示例:

#!/bin/bash for branch in $(git branch | cut -c 3-) do if [ $(git ls-tree $branch | wc -m) -eq 0 ] then echo "branch $branch is empty" fi done


0
投票
我实际上最终为此编写了此脚本:

https://github.com/maxandersen/jbosstools-gitmigration/blob/master/deleteemptybranches.sh

## this will treat $1 as a repository and go through it and delete all branches and tags with empty content. export GIT_DIR=$1/.git export GIT_WORK_TREE=$1 echo Looking for empty branches in $1 git branch | while read BRANCH do REALBRANCH=`echo "$BRANCH" | sed -e 's/\*//g'` NOFILES=`git ls-tree $REALBRANCH | wc -l | tr -d ' '` # echo $NAME "$REALBRANCH" $NOFILES if [[ "$NOFILES" == "0" ]] then git branch -D $REALBRANCH fi done git tag | while read BRANCH do REALBRANCH=`echo "$BRANCH" | sed -e 's/\*//g'` NOFILES=`git ls-tree $REALBRANCH | wc -l | tr -d ' '` # echo $NAME "$REALBRANCH" $NOFILES if [[ "$NOFILES" == "0" ]] then git tag -d $REALBRANCH fi done

© www.soinside.com 2019 - 2024. All rights reserved.