必须从远程 git 存储库删除大量无意签入

问题描述 投票:0回答:1

我的情况是,一个巨大的 2GB 文件被无意中推送到我们在 Azure DevOps 上的远程 git 存储库。 我在审查拉取请求时注意到了这一点。

我的存储库中不能有那么大的文件,需要将其删除。 从历史来看也是如此。 我不希望有人克隆存储库来拉取毫无意义的 2 GB 文件

签到仍在分行。 它尚未合并到母版中。 但它在远程仓库上

只要没有其他人使用此分支,我的用户在此分支上执行 git 重置是否安全? 我被告知 git revert 不会从历史记录中删除该文件,并且我需要 git 重置。

这是我的解决之道吗?

git visual-studio azure-devops
1个回答
3
投票

我被告知 git revert 不会从历史记录中删除该文件,并且我需要 git 重置。这是我的解决之道吗?

大多数情况下,是的。用户应该重写他们的分支,以便大文件不再存在于该分支上的任何提交中。有几种不同的方法可以做到这一点,

reset
就是其中之一。据推测,它们是用户仍然需要的分支上的其他更改,因此您可以进行删除文件的提交,然后进行交互式变基并将删除提交压缩到添加文件的提交中。无论您使用什么方法重写分支,您都需要简单地强制推送该分支来更新 PR。

请注意,这里有一些注意事项:

  1. 一旦存储库没有任何引用(例如分支、标签等)指向大错误提交,所有new克隆将不会包含大文件,但它不会立即从所有现有文件中消失已获取该提交的存储库的副本。它最终会被垃圾收集,但是在强制推送分支之后,我建议您找出需要强制
    gc
    或修剪从存储库提交的确切命令,测试它,并与以下人员共享说明其余的用户。
  2. Azure DevOps 可能永远不会删除该提交,即使它已从存储库的所有本地副本中删除。换句话说,该提交将在服务器上被孤立,可能永远被孤立。如果您知道提交 ID 或引用它的任何历史 PR(甚至废弃),您仍然可以导航到并访问原始提交。从那里,您甚至可以通过在该提交处创建远程分支来“恢复”提交,这将使文件重新出现在获取和克隆中。事实上,这种能力通常存在,这不应该是一个问题,但如果文件从未真正从远程服务器上删除这一事实对您来说是个问题,您可能需要联系微软支持人员,看看他们是否可以以某种方式删除该文件。从历史中提交。 (请注意,这是否可能还取决于您使用的是 AzDO 服务器还是服务。)

提示:在AzureDevOps中,在项目设置->存储库下,有针对整个系统以及每个单独存储库的选项,您可以在其中设置可以推送的最大文件大小。我建议您将该设置启用为一个明智的选项。我还建议将其设置得有点太低而不是太高,因为您可以在极少数情况下暂时禁用该设置,他们需要有目的地将某些内容推到限制之上。 (当然,这是假设管理员暂时禁用并随后重新启用的情况很少见,不会成为开发人员的瓶颈或烦恼。)

© www.soinside.com 2019 - 2024. All rights reserved.