2013-11-01 177 views
0

我的git仓库中有很多大型资产,我想从仓库中删除所有以前的版本和删除的文件。但它需要保留该目录中文件的最新副本。删除Git Repo目录中所有以前版本的文件

到目前为止,我只看到如何清理以前删除的文件,而不需要保留最近的修订。

+0

请记住,git提交完整的文件树,而不是更改。因此,“除当前版本以外的所有版本”基本上与“删除所有版本”的操作基本相同,仅适用于不包含当前版本的提交。你只需要决定是否找到具有“旧”版本的“最新”提交,或者只是从除最近版本以外的每个提交中删除它。 – torek

回答

1

你正在使用git进行文件存储,这不是它的目的。

如果您不关心更改历史记录,只需创建一个包含您的大型资产的tar.gz文件(或任何合适的存档/压缩方法),并从您的git仓库引用它,也许使用脚本或Makefile它并将其解包到正确的位置。

至于从历史中删除一个文件完全(包括当前版本!),有两个步骤:

  1. 删除文件从所有提交:git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILENAME_WITH_PATH' --prune-empty --tag-name-filter cat -- --all

  2. 清理/清除文件对象的存储库:rm -rf .git/refs/original/; git reflog expire --expire=now --all; git gc --prune=now; git gc --aggressive --prune=now

如果您正在使用远程回购工作,需要把它清理干净为好,push -f可能不够;您将需要从头开始重新创建它并将其本地(已清理)的副本推送到它。

+0

不,我不是,这是一个xCode项目,有更新的图像资源。你假设我的目的而不是看我的问题。你也给了我一个建议,去做与我所问的完全相反的事情。 – napierzaza

+0

它是怎样的完全相反?您可以从回购库中删除所有出现的资产文件,然后重新提交当前版本(如果您选择)。就目的而言,即使使用Xcode项目,您仍然可以通过分割将哪些文件提交到源存储库来使用正确的大文件管理。 .gitignore以及哪些文件最终存放在文件存储库中。 –

相关问题