git filter-branches - 最后没有进展

时间:2010-09-20 14:47:26

标签: git

我刚刚使用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输出结束 - 我不知道它是否会变大;我阻止了它。

造成这种奇怪行为的原因是什么? 是否有任何其他方法可以创建具有现有存储库的子目录+历史记录的新存储库?

3 个答案:

答案 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>