我刚刚使用cvs2git在一个git仓库中转换了一个10G CVS仓库(大约120个模块),而在RHEL5机器上没有任何错误。 我想从存储库中拆分一个子目录+历史记录并创建一个新目录。 (如:How can I move a single directory from a git repository to a new repository whilst maintaining the history?)
我试过了:
git filter-branch --subdirectory-filter xxx.model -- --all
工作正常,直到处理完最后一项 - 然后它使用CPU挂起而没有任何进展。
使用strace
,它看起来像这样:[断链]。
strace
- 所有分叉都以> 2.5G输出结束 - 我不知道它是否会变大;我阻止了它。
造成这种奇怪行为的原因是什么? 是否有任何其他方法可以创建具有现有存储库的子目录+历史记录的新存储库?
答案 0 :(得分:4)
运行数小时后,操作成功完成。唯一的问题是,对我们来说似乎没有进展,但事实并非如此。没有输出。
设置GIT_TRACE = 1并重做命令,输出和进度可见。
大量标签可能会导致操作速度变慢。
答案 1 :(得分:0)
无论你做什么都需要重写现有的git存储库。所以你也可以再次运行转换,首先拆分项目 然后单独转换项目。
如果这两个项目已经在CVS存储库的单独子目录中,您只需将cvs2git指向一个子目录,然后指向另一个子目录。
如果项目彼此混合较多,则复制CVS存储库,使用filesystem命令将项目分成单独的子目录,然后再单独转换它们。
答案 2 :(得分:0)
在freenode / #git中向人们说话我找到了另一种方法来删除(git rm)除我想要保留的目录之外的所有内容。
git filter-branch --prune-empty --index-filter "git ls-files --exclude-standard |grep -v '^foobar'|xargs git rm -r -f --cached --ignore-unmatch" HEAD
此操作很慢,但有效(猜测如此)。由于堕胎,我没有看到结果。
BTW:#git中的某个人告诉我这些操作通常可能需要几天时间才能完成,所以很可能如果我等了(虽然看起来没有进展/“它挂起”)它已经完成了。 / p>