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

时间:2012-10-02 07:22:08

标签: git git-svn

我已经迁移了一个包含数百个分支和标记的大型svn存储库,将它们拆分为多个存储库,现在我想查看这些存储库中是否有任何空分支/标记应该在推送之前删除住。

是否有更快的方法来找到这个,而不是去每个存储库并检查每个分支?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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