我正在开发一个开源项目,并且我已将他们的存储库分配给我的Github。不幸的是,他们的github包含了许多我不会使用的资源 - 即大型资产文件,它们将存储库大小增加了大约一百兆字节。更糟糕的是,我已经致力于我的存储库并推送到它,因此我的存储库的历史记录将这些文件版本化 - 这意味着如果这些文件在主存储库中发生更改,那么我的提交将与他们的存在冲突,将无法自动合并。
有什么方法可以排除我已经提交/推送到我的存储库但没有影响fork存储库的某些文件?理想情况下,我想让git认为那些文件永远不在我的存储库中。
答案 0 :(得分:0)
您可以使用git filter-branch
删除项目整个历史记录中的文件。然而,这将重写整个历史记录中的每个提交,并且出于所有实际目的,您的fork将成为一个完全独立的项目,具有不同的提交,顺便说一下"与源存储库共享文件。
一旦你这样做了,你就可以强行推进你的分叉,即使在历史上,原始文件也不会再存在。这将使git成为"那些文件永远不会出现在我的存储库中#34;但我不确定这是好事还是你考虑所有后果
更新
这是你怎么做的。
master
,请运行此git filter-branch --tree-filter 'rm -f <list of assets to delete>'
。 git log
来仔细检查。 git push --force
这就到你的叉子了。你甚至可以删除你的fork并推送到一个新的存储库,因为它总是会有所不同。 其他分支仍将具有旧提交的引用和链接,因此如果要从存储库中删除实际的blob,则必须删除未重写的所有引用(标记,分支等),然后运行存储库上的git gc
。