我在git中有一个本地项目,它包含一些数据(例如输入用于单元测试)。这个数据在整个项目过程中发生了变化,并且在某一点上要大得多。现在,我没有必要将项目恢复到该状态,但每当我使用git执行一个新的clone
时,项目的大小是巨大的(来自所有数据更改)。
有没有办法以某种方式重置我的项目以清除某些目录中的历史记录(例如项目/数据/),以便只存储最新的状态?
答案 0 :(得分:1)
要从历史记录中删除某些文件但将其保留在最近的提交中(例如最近6个月),您可以使用git filter-branch
,如下所示:
cutoff=`date -d '6 months ago' +'%s'`
remove="git rm --cached --ignore-unmatch 'project/data/*.zip'"
git filter-branch --tag-name-filter cat --index-filter \
"[ `git log -1 --format=%at \$GIT_COMMIT` -lt $cutoff ] && $remove || true" \
-- --all
要删除此后剩余的任何剩菜,请参阅git filter-branch – Checklist for Shrinking a Repository。
答案 1 :(得分:0)
您可能只想尝试git gc --aggressive
来清理未引用的项目。如果大文件在过去两周内发生了变化(默认情况下),这将不会消除它们,但是经过足够的时间后它应该会消失。这会自动发生,但您可以使用git gc
您还可以通过添加--prune=now
来更改为期两周的日期,但可能不是一个好主意,因为您希望保留大多数文件的历史记录。< / p>
答案 2 :(得分:0)
如果您的合作者不会完全被淘汰,只需cp
当您处于最下游状态时的某个位置,git filter-branch
the directory out of your codebase and cleanup after yourself,然后cp
它回到回购并且重新提交。
公平警告:重写历史不是轻描淡写,但如果仅仅是你,或者是一些知道他们正在做什么的合作者,如果它能显着改善你的日常工作,那就不是什么大不了的事了。日常生活。