4

何百ものブランチとタグを含む大きな svn リポジトリを移行し、それらを複数のリポジトリに分割しました。現在、移行をライブにプッシュする前に削除する必要があるこれらのリポジトリに空の * ブランチ/タグがあるかどうかを確認しようとしています。

すべてのリポジトリに移動してすべてのブランチをチェックアウトするよりも、これを見つけるためのより速い方法はありますか?


*この質問では、「空のブランチ」または「空のタグ」とは、ファイルを含まないコミットを指すブランチまたはタグを意味します。

4

2 に答える 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
于 2012-10-02T16:14:14.547 に答える
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
于 2012-10-05T13:36:39.353 に答える