在git filter-branch --index-filter'git rm ...'之后对克隆的存储库有什么影响?

时间:2010-12-13 12:31:14

标签: git git-filter-branch

我最近从一个共享的git存储库中提取了一些子目录 git filter-branch --subdirectory-filter foodir -- --all

现在我的子目录仍然留在中央共享存储库中,我想删除它们。据我所知,从网上搜索的是像  git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
应该用于从历史中删除旧目录。

虽然我相信这会有效,但我现在想知道这是否是在共享存储库的情况下从历史记录中删除某些东西的最佳方法,因为我知道每个拥有本地克隆的人基本上都必须重新克隆存储库?

所以我的最终问题是,我对这些假设是否正确,或者是否有办法从历史记录中的多个分支中删除目录,而不必每个人都必须再次克隆存储库?

更新
所以我运行了一些测试,并且当前正在使用此命令运行: git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch -- Dir1 DIR2' --prune-empty --tag-name-filter cat -- --all有效,但它也完全改变了所有提交的所有SHA-1密钥,这是可以理解但不可取的。这意味着每个人都必须重新克隆存储库,所有以前通过Gitweb的链接都将被破坏。

1 个答案:

答案 0 :(得分:1)

如果其他人已经拥有它们,您无法默默地更改提交。这就是Git的工作原理,它是一个功能。