由于我在bitbucket中的存储库大小随着时间的推移增加到1GB,所以我想删除我不再关心的旧历史。
我希望将我的存储库削减到至少100 mb (至少是当前存储库的一半),并且有3-5个月的历史。这意味着我可以在我的历史上少交一些。
这是我已经尝试过的,但并没有奏效:
git gc (带有像--aggressive --prune这样的标志)。它确实使我的回购规模在本地减少到大约400 my。但是我不能把它推到遥控器上,因此我的BitBucket的回购大小保持不变。我尝试使用此方法进行Bitbucket垃圾收集清理:https://stackoverflow.com/a/27868384/8610581和https://stackoverflow.com/a/37253227/8610581git clone --shallow-since=<date>和--depth),这正是我所需要的。不幸的是,我无法从浅层克隆中创建一个新的存储库(git不允许这样做)。发布于 2020-07-29 15:47:01
在Git中删除历史记录(同时保持最新提交)的唯一方法是替换存储库。
替换存储库可以具有与原始存储库相同的名称,但它将有一组完全不同的提交。原因是每个提交都有编号(使用散列ID),并且编号方案包含了前一个提交的编号。因此,如果在旧存储库中总共有1000次提交,而在新存储库中现在只有500次提交,那么新存储库中的第一次提交的提交数是不同的,这意味着新存储库中的最后提交的提交编号也是不同的。
要将一些旧的提交和/或将大型文件从旧存储库复制到新的存储库,有许多可用的工具。Git中包含的是git filter-branch,它正在被git filter-repo取代(但是filter还没有包含在Git本身中)。您也可以使用BFG。
请注意,这些工具通常是通过这个过程工作的:
git filter-branch)执行一些终结步骤(使用git filter-branch,终结是删除refs/original/或克隆这个克隆;参见文献资料)。记住,最终的结果实际上是一个全新的存储库。如果允许Git将其与旧存储库合并,您将得到所有旧的提交--您想要删除的提交--回退,并且现在有了您想要保留的提交的两个副本。
发布于 2020-07-29 22:00:38
git gc只删除不再引用的Git历史记录中的条目。为了消除回购中不必要的历史条目,您必须按照以下顺序进行清理:
master分支的旧提交:这将删除对旧条目的引用,但将旧条目保留在.git文件夹中。git gc和git prune:这将从本地.git文件夹中移除不再由新的较短Git历史记录引用的旧条目。git push --force。由于历史是不同的,BitBucket拒绝正常的推送,您必须使用--force覆盖服务器上的历史记录。git reset --hard origin/master或您的主要开发分支。master分支重新设置所有打开的特性分支,以便在合并它们时不会返回旧的历史记录。https://stackoverflow.com/questions/63150270
复制相似问题