在刚开始使用 的过程中,由于对 的工作方式不甚了解,总会产生一些很傻很天真的操作。比如,为了方便项目读取,将二进制文件和代码一起提交到了 仓库;亦或者一不小心,将本地打出来的部署包一同提交到了 仓库,导致整个项目庞大无比,别人在克隆项目时苦不堪言。虽然可以重建项目,但是又不想丢弃提交记录,该怎么解决呢?

其实我们可以通过 git 命令,来清除文件缓存,而不清除提交记录。

比如,当初为了方便部署,将应用部署包放入 files 文件夹一同提交到了 git 仓库,现在虽然已经删除部署包后重新提交,但是部署包依然后存在于提交记录(以便回退)。我们可以按以下步骤清除指定文件缓存。

步骤1:整理需要删除缓存的包及路径

整理出包相对于项目的路径。比如,整理出路径如下:

roles//files/--7.0.52.tgz
roles/GraphicsMagickDeployment/files/ImageServer.tar.gz
roles/GraphicsMagickDeployment/files/probe.tar.gz
roles/java/files/jdk1.7.0_51.tgz
roles/-yuminstall/files/apache--7.0.52.tgz
roles//files/-2.8.13.tgz
roles/zookeeper/files/zookeeper-3.4.6.tar.gz

步骤2:执行命令清除缓存

清除命令如下:

git filter-branch --index-filter \
'git rm --cached --ignore-unmatch \
roles/tomcat/files/apache-tomcat-7.0.52.tgz \
roles/GraphicsMagickDeployment/files/ImageServer.tar.gz \
roles/GraphicsMagickDeployment/files/probe.tar.gz \
roles/java/files/jdk1.7.0_51.tgz \
roles/tomcat-yuminstall/files/apache-tomcat-7.0.52.tgz \
roles/redis/files/redis-2.8.13.tgz \
roles/zookeeper/files/zookeeper-3.4.6.tar.gz' \
-f -- --all

执行后, git 会遍历所有的提交,删除相关记录及文件(只删除提交记录中的文件记录,并不会删除整个提交),所以过程需要等待。

需要注意的是,清除后的文件无法通过提交记录还原。

步骤3:删除原有项目并重建

需在 git 仓库上删除原有项目并重新提交,才可顺利进行,否则会出新冲突。

步骤4:删除本地项目后重新克隆

若不删除本地项目,重新拉会导致冲突,所以执行操作前,最好先通知本地人员提交当前版本,并等待操作完成。