我已经迁移了一个大型的svn存储库,其中包含数百个分支和标签,将它们拆分为多个存储库,现在我正在检查在推动迁移之前,这些存储库中是否有任何空*分支/标记应删除。直播。
是否有比找到每个存储库并检出每个分支更快的方法?
*出于这个问题的目的,“空分支”或“空标记”是指指向不包含文件的提交的分支或标记。
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
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