我们计划在Git存储库中迁移最后一个大型CVS存储库。
对于迁移,我们使用svn2git的cvs2git。因为这个CVS存储库已经增长了近12年,所以它拥有31 12的数据。
我找不到任何解决方案来删除所有超过指定时间段(例如2年)的历史。
您知道其中一个工具/命令/解决方案吗?:
谢谢和问候,安德烈亚斯
解决方案由Dmitry:在编辑移植之后,我编写了一个BASH脚本tp来清理混乱的标记和分支:
#!/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发布于 2015-10-22 10:38:56
在一个结构良好的Git回购历史的深度通常不是一个问题。在linux回购中,有超过500 k的提交,并且工作正常。今年,我们将一个~15年前的CVS (5GB的,v文件)迁移到Git。Git占用200 70k,包含~70k提交。
我们面临两个主要问题:二进制文件和标签数量。
二进制文件
在CVS中,二进制文件的所有修订都存储在服务器上,只有当前的修订在签出时被转移。所以在CVS中存储二进制文件一点问题都没有,您只需要在服务器上有足够的磁盘空间。吉特的情况就不一样了。当您对Git进行克隆时,二进制文件的所有修订都会转移到您的本地克隆中。即使一个文件在最近的提交中不存在,它的所有历史修订都在您的本地回购中。通过从历史记录中删除不需要的二进制文件,我们设法将Git的大小从大约700 by缩小到了~200 by。这里最重要的一点是,根据Git中文件的大小,而不是CVS中的文件大小来做出决定。Git使用zlib压缩和增量压缩来打包对象,因此同一个文件的历史可以在Git和CVS中占用完全不同的磁盘空间。您可以使用Git扩展名中的“查找大文件”插件。
标记数
我们在CVS回购系统中有超过20k的构建标签。对于这样数量的标记,Git扩展和源树的工作都非常缓慢(特别是当它们需要将所有标记加载到下拉列表中时)。由于Git 2.3.0中的性能回归固定,Git 1.9.5的git push也很慢。目前,在Git中,我们只保存最近两年的构建标记(~7k标记),定期对旧标记进行归档。
丢弃旧历史
如果您仍然需要它,那么在Git中丢弃旧历史要比在CVS或迁移过程中容易和安全得多。
grafts文件中设置新的根提交:echo %commit_hash% >.git/info/graftsgit tag --contains和git branch --contains)git filter-branch --tag-name-filter cat -- --all或者,您也可以解析git-dump.dat文件( git快速导入格式的cvs2git输出),并从那里删除旧的提交、标记和分支。
https://stackoverflow.com/questions/33276110
复制相似问题