最後の大きな CVS リポジトリの 1 つを Git リポジトリに移行する予定です。
移行には、svn2git の cvs2git を使用しています。この CVS リポジトリは 12 年以上にわたって成長したため、31 GB のデータがあります。
指定された期間 (たとえば 2 年) より古いすべての履歴を削除する解決策が見つかりませんでした。
このいずれかのツール/コマンド/解決策を知っていますか?:
- CVS からの削除履歴
- cvs2git ですべての履歴をエクスポートしない
- Git インポートですべての履歴をインポートしない
- Git から履歴を削除
感謝と挨拶、 アンドレアス
Dmitry Oksenchuk によって提案された解決策: グラフトを編集した後、BASH スクリプトを作成して、めちゃくちゃになったタグとブランチをクリーンアップしました。
#!/bin/bash
NEW_ROOT_REF=$1
git tag --contains $NEW_ROOT_REF | sort > TAGS_TO_KEEP.tmp
echo "Keep Tags:"
cat TAGS_TO_KEEP.tmp | wc -w
git branch --contains $NEW_ROOT_REF | sort > BRANCHES_TO_KEEP.tmp
echo "Keep Branches:"
cat BRANCHES_TO_KEEP.tmp | wc -w
git tag -l | sort > TAGS_ALL.tmp
echo "All Tags:"
cat TAGS_ALL.tmp | wc -w
git branch -l | sort > BRANCHES_ALL.tmp
echo "All Branchess:"
cat BRANCHES_ALL.tmp | wc -w
# Remove tags
COUNTER=0
for drop in `comm TAGS_ALL.tmp TAGS_TO_KEEP.tmp -23`; do
git tag -d $drop
COUNTER=$[$COUNTER +1]
done
echo "Dropped tags: $COUNTER"
# Remove branches
COUNTER=0
for drop in `comm BRANCHES_ALL.tmp BRANCHES_TO_KEEP.tmp -23`; do
git branch -D $drop
COUNTER=$[$COUNTER +1]
done
echo "Dropped branches: $COUNTER"
# Clean up
rm TAGS_ALL.tmp TAGS_TO_KEEP.tmp BRANCHES_ALL.tmp BRANCHES_TO_KEEP.tmp