42

我正在尝试从我的 git 存储库中拆分一个子项目。然而,与 分离(移动)子目录到单独的 Git 存储库不同, 我没有将它放在它自己的子目录中(移动它并执行上述操作只会在移动后产生历史记录)。

我已经将要从中拆分子项目的分支克隆到它自己的存储库中,并删除了子项目未使用的所有内容,因此基本上我可以将其用作子项目的存储库。

现在我想摆脱所有不再在此存储库中的文件的历史记录,以便只保留使其成为后代的文件的文件历史记录。

我认为 git-filter-branch 一定是可能的,但我不知道怎么做

提前谢谢了

4

2 回答 2

11

这里有一些说明来做你想做的事。

这将删除file_to_remove

git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_to_remove' --prune-empty -- --all
于 2012-05-20T22:57:53.543 回答
6

好的,现在我正在尝试使用以下技术,如果它有效,将报告它,因为它似乎运行了很长时间: On a zsh or bash ON A CLONED Repository

git log --diff-filter=D --summary <start_commit>..HEAD | egrep -o '*[[:alnum:]]*(/[[:alnum:].]*)+$' > deleted.txt

获取所有已删除的文件

for del in `cat deleted.txt`
do
    git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --prune-empty -- --all
    # The following seems to be necessary every time
    # because otherwise git won't overwrite refs/original
    git reset --hard
    git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
    git reflog expire --expire=now --all
    git gc --aggressive --prune=now
done;

这可能对您的数据非常危险,因此只能尝试克隆。

于 2012-05-22T19:01:20.427 回答