问题标签 [bfg-repo-cleaner]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
143 浏览

regex - 从 git 历史记录中删除多个换行符

我试图用 bfg repo 清洁器从代码中的多个空行(超过 4 行)中清除我的 repo。我尝试了各种正则表达式,但没有想出解决方案。我获得的最接近的结果是简单地从文件中删除所有新行。

任何想法如何使用 bfg 或任何其他工具来做到这一点?

0 投票
1 回答
95 浏览

git-rewrite-history - BFG repo 清理器可以对文件执行任意操作吗?

我想使用 MacOS 上的 imageoptim-cli 之类的工具从 git 历史记录中压缩图像以缩小 repo 大小。BFG 可以支持运行一些更任意的命令吗?我git filter-branch看起来像这样:https ://gist.github.com/zbeekman/7482ccd0e87f495387951bd612dc390e

git filter-branch --prune-empty --tree-filter 'pwd ; ls -a ; imageoptim -a -q --verbose -d <path/to/img/dir/here> || true' -- --all

但这在每次提交时都会在这些文件上运行图像工具,即使在它们被引入之后也是如此。

0 投票
2 回答
1876 浏览

git - 从 github 和历史记录中删除文件

我知道之前有人问过这个问题,但我仍然对我需要采取的确切步骤感到困惑。

几个月前,我在 github 上的公共存储库(我拥有)中提交了一个包含敏感信息的文件。我现在必须删除这个文件以及它的任何痕迹。

具体来说,它是一个web.config包含一些数据库详细信息的文件。我需要删除连接字符串,但我很乐意删除整个文件并在需要时将其添加回来。

从那以后有很多提交。

我查看了BFG,这听起来像是适合这项工作的工具,但这并没有奏效——可能我犯了一个错误。

脚步:

输出:

该文件仍然存在,我究竟需要做什么才能web.config从存储库中删除该文件?

更新

好的,因此建议删除 web.config,然后重新运行命令:

然后我重新运行了上面的所有命令,我得到了:

更新 2

原来 BFG 工作正常,我不小心输入了web.config小写而不是实际的Web.config. 无论如何它已经解决了我的问题:)

0 投票
1 回答
266 浏览

git - Git rebase 非裸仓库后如何使用 bfg-repo-cleaner?

概述

我有 Git 存储库,它作为来自其他地方的许多配置的存档:

  • 200个目录
  • 每个目录 100 个文件
  • 每个文件 10K 纯文本
  • 每天约 1000 次提交,通常编辑不到 10 行
  • 1 家分店
  • 1 个用户处理所有提交
  • 所有其他只读的视图回购

在有人建议我尝试将这个 repo 分解成更小的 repo 之前,这不是一个选择,因为客户。

回购包含约 2 年的数据,但我们的客户只需要最后 90 天。

过程

90 天前,我使用此处描述的方法成功地将根嫁接到了提交上:

  • git checkout -b newroot xyz_90_days_old_rev
  • git 重置 abc_original_root_rev
  • 混帐添加。
  • git commit --amend -m '清除历史记录'
  • git结账大师
  • git rebase --onto newroot xyz_90_days_old_rev

问题是之后使用 git-filter-branch cleanup - 它需要 > 24 小时,这对用户来说是不可接受的停机时间。

我想改用 bfg-repo-cleaner ,但我不清楚:

  • 它支持这个用例吗?
  • 它适用于非裸回购吗?

PS:我现在知道这git checkout --orphan会稍微优雅一些​​,但它并没有真正改变BFG需要 repo 裸露而checkout要求它不裸露的问题

0 投票
3 回答
13593 浏览

git - 如何使用 BFG 删除受保护的提交

使用 BFG ( https://rtyley.github.io/bfg-repo-cleaner/ ) 清理 repo 时,遇到以下情况:

0 投票
2 回答
551 浏览

git - Git LFS - 两台不同机器上缺少不同文件的致命错误

我正在将现有的存储库迁移到 git lfs,似乎我设法创造了一场完美的风暴。

目前有两台机器:A和B。

机器 A 缺少文件 X 的内容。调用git lfs fetch --all origin. 机器 B 缺少文件 Y 的内容。

我尝试调用git lfs push --all origin两者。它在机器 A 上不起作用,因为它没有文件 X。它在机器 B 上不起作用,因为它没有文件 Y。

我怎么可能解决这种情况。我不知道这是怎么发生的,甚至可能发生。


git lfs push在其中一台机器上的输出:

git lfs fetch在其中一台机器上的输出:

我正在使用 bfg repo 清洁器执行到 LFS 的迁移。

** 编辑 **

我执行的步骤:

  1. 以旧形式(从转换之前)到机器 A 的整个 repo 的 Git 克隆。
  2. 我在机器 A 上运行 BFG,它基本上重写了主分支的历史(没有其他分支远程保存)。
  3. git push origin master --force按照你应该用新版本的 master 替换旧版本的 master 来运行。
  4. git fetch在机器 B 上运行以获取所有文件。
  5. 机器 B 上有一些提交,在 master 中尚未发送到服务器 - 因为它们会导致 repo 超出配额。因此,我运行git rebase --onto origin/master HEAD~3 HEAD将未发送的新提交移动到新版本的 master。
  6. git push origin master在机器 B 上运行。

这就是我现在的位置。

0 投票
1 回答
134 浏览

git - 为什么当我复制笔记时存储库大小会翻倍?

我使用 Subgit 导入 SVN 存储库,这是一个出色的工具,可以快速完成并支持自定义 svn 布局。Subgit 将 git commit -> svn 修订参考保存在git notes. 每个提交在注释中都有修订号,您可以使用git log.

在 SVN->git import 之后,我使用 BFG 存储库清理器从 jar、dll 等二进制文件中清理旧项目存储库。BFG 不会重写 git 注释和更改的提交之间的链接,但幸运的是它留下了object-id-map.old-new.txt文件。

我使用此文件将注释从旧提交复制到新提交:

cat object-id-map.old-new.txt | git notes copy --stdin

复制笔记后,我将它们从旧对象中删除:

cat object-id-map.old-new.txt | cut -d' ' -f 1 | git notes remove --stdin --ignore-missing

问题是在修复 git notes 存储库大小后会变大 2 倍(即使我没有克隆--bare)。为什么?

示例:我已经使用 Subgit 从 svn 导入了 repo,并且有 400Mb .git。然后我应用 BFG 并获得 40 Mb 裸存储库。我想通过使用上面的 2 个命令移动(复制和删除)它们来恢复 git 笔记,但不幸的是 repo 的大小从 40 Mb 增长到 80 Mb。我尝试执行git notes prunegit reflog expire --expire=now --all && git gc --prune=now --aggressive这是 BFG 推荐的,但仍然有 80 Mb。

UPD:现在无法重现 40 Mb 回购:/ BFG 清理后为 80,复制笔记后为 86

0 投票
0 回答
239 浏览

git - 我怎么知道我已经成功完成了 BFG Repo-Cleaner 的最后一步?

我在这里按照 BFG Repo-Cleaner 网站的指示进行操作...

https://rtyley.github.io/bfg-repo-cleaner/

一切似乎都已成功运行,我的仓库现在要小得多,但是当我尝试做最后一步时......

我得到的回报就是这个

执行 git push 后,我检查了我的远程仓库,它位于我完全控制的 GitLab 实例上,我没有看到任何推送发生的记录。另外,GitLab 上的存储库仍然显示它是我开始使用 BFG Repo-Cleaner 之前的大容量。

我确保我在 GitLab 上的分支不受保护,并且我的帐户有权推送到它。

我不确定我是否做错了什么,或者这是预期的行为,我不知道如何验证 git push 是否确实有效。

0 投票
1 回答
1059 浏览

bfg-repo-cleaner - can bfg-repo-cleaner list affected files before deleting them

From the command line option I can not see that there is a way to see what bfg will do before doing it.

If I run this command:

Can I get a list of files larger than 1M before actual deleting them?

0 投票
1 回答
262 浏览

git - 使用 BFG 重写 git 历史后是否需要垃圾回收

我们在我们的 bitbucket 存储库中提交了一些密码,这违反了我们的组织安全策略,因此我使用 BFG Repo Cleaner通过在本地创建镜像然后将所有密码替换为Removed一词

它完成了他们网站上描述的工作,密码确实被删除了!

令人惊讶的是它

  • 替换文件中的密码
  • 删除旧的提交
  • 然后进行一些新的提交,而不是根据旧的提交重写历史......

所以问题是仍然可以从指向旧提交的旧 bitbucket url 查看密码

我的问题是如何从 bitbucket 或 git 历史记录中删除已删除的提交?这反过来会阻止指向已删除/旧提交的 URL 显示我们打算删除的密码?