Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
永久性地从git存储库中删除文件,同时保留历史记录_Git_Revision History - Fatal编程技术网

永久性地从git存储库中删除文件,同时保留历史记录

永久性地从git存储库中删除文件,同时保留历史记录,git,revision-history,Git,Revision History,以下是我的情况: 我有一个git存储库,其布局如下 myrepo/ myrepo/index myrepo/data/data01 myrepo/data/data02 myrepo/data/data03 ... 我有几百个提交,每个提交都改变索引文件并添加一个数据文件。现在,存储库已经变得相当大了,我希望完全摆脱数据文件,不仅从我的头脑中删除它们,而且从元数据中删除它们,从而减少存储库的实际大小。但我希望这样做,保留提交的其余部分(在添加数据的同时修改索引)。有可能吗?我自己在网上找到了答

以下是我的情况:

我有一个git存储库,其布局如下

myrepo/
myrepo/index
myrepo/data/data01
myrepo/data/data02
myrepo/data/data03
...

我有几百个提交,每个提交都改变索引文件并添加一个数据文件。现在,存储库已经变得相当大了,我希望完全摆脱数据文件,不仅从我的头脑中删除它们,而且从元数据中删除它们,从而减少存储库的实际大小。但我希望这样做,保留提交的其余部分(在添加数据的同时修改索引)。有可能吗?

我自己在网上找到了答案。以下是必要的命令:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch data/*' --prune-empty --tag-name-filter cat -- --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now