我有一个脚本可以生成大量的git存储库提交,然后定期推送所有分支。没有必要在该计算机上保留一个大的历史,它会很快占用磁盘空间(而且我的磁盘空间很少)。
我目前正在定期运行
git commit -a (...)
git push --all
git prune
git gc
从长远来看,这不足以使磁盘使用率保持足够低。我正在寻找一个命令来添加到这个脚本中,该命令只保留每个分支的最后几次提交(我只有2个)在这台机器上,然后让git gc
回收磁盘空间我
让我澄清一下:我不想重写历史记录,只是为了保持本地存储库.git
目录尽可能小,同时保留origin
的完整历史记录。令人惊讶的是,我发现的信息非常少。
编辑:这听起来很像浅的存储库(我从未使用过),但从我读到的here来看,浅存储库意味着只有在克隆时跳过部分历史记录,在提交/推送后不要忘记数据。
有一种可能的解决方法,如果没有更好的方法,我将使用它:
# recreate a shallow clone every commit
git commit -a && git push
rm -rf .git/
git clone --depth=1 # shallow clone
答案 0 :(得分:1)
你可以继续修改上次提交和强制推送。
在你的剧本中:
git commit -a --amend --reuse-message=HEAD
git commit --force push --all
这将保持只有您当前拥有的当前提交数。
要说清楚,这是重写历史,所以它不是团队友好的。
答案 1 :(得分:0)
我最终以cron
的身份进行了磁盘空间检查,每当本地存储库超过阈值(200MB)时,便对其进行“重置”。
git commit -a && git push # just in case
rm -rf .git/
git clone --depth=1 https://....
此解决方案需要git> = 1.9,因为以前的版本不允许从标记为浅的存储库进行推送。 另外请注意,如果您不能100%确定工作目录是否干净,则可能会发生非常糟糕的事情。
这绝不是一个优雅的解决方案,但这就是我最终要解决的问题,因为我无法让git仅维护当前的HEAD并自动忘记其余的HEAD。