2

我在 git 中有一个本地项目,其中包含一些数据(例如单元测试的输入)。这些数据在项目过程中发生了变化,并且在某一时刻要大得多。现在,我不需要将项目恢复到那个状态,但是每当我clone使用 git 执行新的操作时,项目的大小是巨大的(来自所有数据更改)。

有没有办法以某种方式重置我的项目以擦除某些目录(例如项目/数据/)中的历史记录,以便只存储最近的状态?

4

3 回答 3

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 – 缩小存储库的清单

于 2012-12-11T15:26:43.400 回答
0

您可能只想尝试git gc --aggressive清理未引用的项目。如果在过去两周内进行了大文件更改(默认情况下),这不会消除它们,但经过足够的时间后它应该会消除它们。这会自动发生,但您可以使用git gc

您还可以通过添加更改该两周日期--prune=now,但这可能不是一个好主意,因为您希望保留大多数文件的历史记录。

于 2012-07-23T19:00:03.097 回答
0

如果你的合作者不会完全被淘汰,只是cp在你处于最下游状态时的某个git filter-branch目录,你的代码库中的目录并在你自己之后清理,然后cp它回到 repo 并重新提交。

公平警告:改写历史不能掉以轻心,但如果只是你自己,或者几个知道自己在做什么的合作者,如果它显着改善了你的日常生活,这没什么大不了的。

于 2012-07-23T23:41:30.183 回答