何百ものブランチとタグを含む大きな 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