gpt4 book ai didi

git - 如何在保留尽可能多的历史记录的同时从 git 的历史记录中清除一个词?

转载 作者:行者123 更新时间:2023-12-05 09:20:18 26 4
gpt4 key购买 nike

TL;DR: There is a phrase in our git repository that must be removed from history, not just the heads of branches. What other ways are there besides removing it from the head of develop and making a new repository? We want to maintain as much history as possible.

背景

出于棘手的法律原因,我和我的团队必须从我们的代码库中删除某个单词的所有实例(为了好玩和相关性,我们称之为 Voldemort)。令人恼火的是,我们不仅要从分支的提示中删除 Voldemort,我们还必须从我们存储库中的每个提交中删除它(诉讼与 “任何开发人员都不应该能够合理地恢复到 Voldemort 在代码中的状态”)。

我们不再使用 Voldemort,但代码中的一些地方仍然像注释一样提到它。 (是的,作为诉讼的一部分,我们必须从我们的代码中删除侵权评论。)

原计划是把不能提的词清除掉,然后建一个新的repository,把当前状态push为初始commit。不过,我们不想丢失所有历史记录1!所以我们想知道是否有办法避免这种情况。

那么,问题是我们如何将伏地魔这个绝不能提的词从历史中删除,同时尽可能多地保留历史1另外,我们可以做些什么来确保它不在任何提交中?我们想知道如何检查我们的工作以确保它已经消失。

1: By history I don't mean the specific commits, I just mean being able to look at the history of a file and know who did what, it's okay to me if the history is gone as in "rewriting history" in the git sense, I'm actually guessing it's the only approach.

关于 repo 状态的信息

  • 目前 develop 分支没有 Voldemort,但是我们在清除提交之前和之后都有“有意义的”提交
  • 可能只有初始提交有任何添加 Voldemort 的行(因为我们从 SVN 迁移到 git 并且 Voldemort 是很久以前添加的)
  • 可能唯一使用 Voldemort 修改任何文件的提交是删除它的提交(就像我说的,这是很老的东西)

方法的猜测

似乎我们想要做一些类似git log --patch | grep 'Voldemort' 查找添加 Voldemort 的提交,然后对所有内容进行交互式 rebase ,编辑添加 Voldemort 的提交以添加其他内容或根本不添加任何内容。

最佳答案

使用 BFG Repo Cleaner ,它比 git filter-branch 更快更易用。

要用文本*** REMOVED *** 替换所有文件中所有出现的Voldemort,您可以简单地:

% echo 'Voldemort' > badwords.txt
% bfg --replace-text badwords.txt myrepo.git

关于git - 如何在保留尽可能多的历史记录的同时从 git 的历史记录中清除一个词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38131157/

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