gpt4 book ai didi

git - 在 reflog 过期和 gc prune 后推送到源

转载 作者:太空狗 更新时间:2023-10-29 13:35:49 24 4
gpt4 key购买 nike

我使用

在我的本地仓库中删除了一些无法访问和悬空的提交
git fsck --unreachable --dangling --no-reflogs
git reflog expire --expire=now --all
git gc --prune=now

但我发现已删除的提交在原点(准确地说是 GitHub)上仍然可用。

我尝试了 git push --force 但它没有将更改同步到 origin。我如何强制将更改同步到源(也从远程删除无法访问/悬空的提交)?

这是一个没有答案的类似问题:

Scope of gc prune and git reflog expire, and related config

最佳答案

缩写

您无法指定远程设备如何存储来自客户端的数据。

更长的形式

首先,我认为首先要了解您的本地存储库与远程存储库不同。 git fsckgit gc 在本地存储库上运行——您已经知道了,因为您在问这个问题。

其次,Git 通过传递对象来工作。这里的技巧是它只讨论网络上可达的对象。意思是,必须有一条从引用(分支或标签)到历史中的对象的路径。如果所引用的对象不可访问,Git 将拒绝将其传输给客户端,即使它在对象数据库中也是如此。不利的一面是,您在本地所做的任何不涉及修改或更新引用的事情都无法在本地和远程存储库之间进行通信。你不能说“将我的本地对象数据库布局同步到远程”。你只能说“让我的本地和远程之间的可达对象相同”。

最后,事物如何在 GitHub 中表示,以及对象最终是否被修剪,完全取决于 GitHub。扎克霍尔曼 has given a talk关于幕后发生的一些事情。我想他们有时会在后台运行一些东西来修剪悬挂的对象,但从远程访问的角度来看,这真的无关紧要——人们无法访问未引用的对象。剩下的唯一问题是尺寸。我知道他们正在进行某种修剪,因为我过去修剪过存储库并减小了它们的大小(您可以通过使用 api 调用查看 size 成员来检查这一点。您可以以此为例:https://api.github.com/repos/jszakmeister/vimfiles ).

如果您的目标是缩小存储库大小,因为您 checkin 了太大的对象,请查看 Removing sensitive data GitHub 帮助部分的页面。它同样适用于您想要永久删除的大文件(简单地通过提交删除它们不会将它们从历史记录中完全删除)。

如果目标是通过压缩和删除悬挂对象来减少存储库大小,GitHub 已经在做自己的事情了,而您对如何完成并没有太多控制权。不过,他们竭尽全力保持其小巧、快速和高效。

关于git - 在 reflog 过期和 gc prune 后推送到源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25907313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com