gpt4 book ai didi

git - 从 git 中删除大量提交

转载 作者:太空狗 更新时间:2023-10-29 12:44:55 24 4
gpt4 key购买 nike

我们正在运行一个中央 git 存储库 (gforge),每个人都可以从中提取和推送。不幸的是,一些无能的同事认为将几个 10-100Mb 的 jar 文件推送到存储库中是个好主意。因此,我们经常使用的服务器磁盘空间不足。

当我们意识到这一点时为时已晚,大多数人已经撤回了新的巨大的 repo 协议(protocol)。如果问题没有被解决,那么我们可以做一个 rebase 来剪掉那些巨大的提交并修复它,但是现在每个人都从它中退出了,删除那个提交的最好方法是什么(或者只做一个 rebase删除大文件),然后让这个在每个人都想从/向 repo 中 pull/推送时造成困惑?

它应该是一个小型脚本库,但现在大小约为 700M :-(

最佳答案

避免困惑的最简单方法是给服务器更多的磁盘。

这是一个艰难的过程。删除文件也需要将它们从历史记录中删除,这只能通过 git filter-branch 来完成。 .例如,此命令将删除 <file>来自历史:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file>' \
--prune-empty --tag-name-filter cat -- --all

问题是这会重写 SHA1 哈希值,这意味着团队中的每个人都需要重新设置到新的分支版本,否则可能会出现一些严重的问题。如果没有人正在进行工作并且你们都使用主题分支,那一切都很好。如果你更集中,你的团队很大,或者他们中的许多人在工作时保留了脏工作目录,那么没有一点困惑和不和谐就没有办法做到这一点。您可能会花很多时间让每个人的本地工作正常。那写,git filter-branch可能是最好的解决方案。只要确保您有一个计划,您的团队理解它,并且您确保他们备份他们的本地存储库,以防一些正在进行的重要工作丢失或被破坏。

一个可能的计划是:

  1. 让团队为正在进行的工作生成补丁,例如 git diff > ~/my_wip .
  2. 让团队为他们 promise 但未共享的工作生成补丁:git format-patch <branch>
  3. 运行 git filter-branch .确保团队知道在发生这种情况时不要 pull 。
  4. 有团队问题 git fetch && git reset --hard origin/<branch>或者让他们重新克隆存储库。
  5. 将他们之前 promise 的工作应用到 git am <patch> .
  6. 将他们正在进行的工作应用到 git apply ,例如git apply ~/my_wip .

关于git - 从 git 中删除大量提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397392/

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