问题标签 [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 回答
644 浏览

bitbucket-server - Bfg-repo-cleaner 工具成功但 repo 大小没有减少

我的 bitbucket 服务器中有一个存储库,其 .git 文件夹为 660 MB,存储库的总大小为 714 MB。

我在存储库上使用了 bfg-repo-cleaner 工具,并使用 git count-objects,看到大小减少到 125 MB。命令 git push 也成功了。

但是,当我再次尝试克隆存储库时,我收到了较旧的大小。bitbucket 中的提交 id 已更新,因为在提交列表下,我可以看到“之后”提交 id,并且工具提示还显示之前的提交 id,表示推送已成功完成。

但回购的规模保持不变。

我对另一个 repo 遵循了相同的程序,它似乎在那里工作正常。该存储库的大小已从 970 MB 减少到 60 MB。

这种行为是预期的吗?

0 投票
2 回答
355 浏览

git - 从现有的仅包含相关文件和提交的子目录创建新存储库

我有monorepo很多不同packages的地方。我想拿一个包并为它创建一个新的仓库。我想保留与项目文件夹中的文件有关的提交。

我尝试使用git filter-branchwith--subdirectory-filter可以使用指定文件夹中的文件创建一个分支。

但是,通过log命令和--all标志,您可以看到比在主分支中看到的更多提交。

这些提交中的每一个都有不属于所需的文件和数据subdirectory

如何删除这些文件?这是bfg进来的地方。

使用-p( --protect-blobs-from) 标志我可以传入master.

这将从整个存储库历史记录中删除不在分支中的所有文件。master

然而!如果您git log --all仍然看到所有额外的提交,提交中没有文件。

我正在寻找一种方法来为命令(例如./src/project)提供目录并拥有一个仅包含与该目录中的文件有关的文件和提交的存储库。

如何在不更改文件的情况下删除这些提交?

有一个bfg用于--prune-empty命令的 PR。这可能会有所帮助,但在合并之前不是一个可行的解决方案,而且我似乎仍然需要同时使用filter-branchbfg.

我也试过clone这个分支。理想情况下,有一种方法可以获取 master 并从中创建一个全新的存储库,其中只有那些refs.

更新:

我已经扩展了@BlythMeister 的帖子,文章中的filter-branch命令存在一个问题,它将把内容移到头部。所以我必须在之后运行它。subdirectory-filtersubdirectory

0 投票
1 回答
1209 浏览

github - BFG 不更新 github 拉取请求

所以我按照这里的说明运行了 BFG。 https://rtyley.github.io/bfg-repo-cleaner/ BFG 的控制台输出看起来不错,但是在推送之后,当我回到 github 时,我仍然可以在 pull requests > clsoed > old merge 中找到敏感数据请求> 文件已更改。我见过谈论 github 的 gc 可能需要一些时间。我必须等待更改显示吗?


编辑我忽略了推送输出中的一行 ! [remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref) 我要删除的一些文本位于隐藏文件中。那是源头吗?

0 投票
1 回答
124 浏览

git - GitHub - 清理不需要的文件的历史记录

我对 GitHub 和 commits/push/pull/etc 的过程相当熟悉。但我不确定解决这个问题的最佳方法是什么,如果有的话。我有一个用于去年秋天上课的 Unity 项目的存储库,该存储库中有很多我不希望在提交历史记录中看到的文件。例如,大量的 .meta 文件和其他类似的东西会大大增加每次提交中编辑的文件数量,这使得很难找到和查看我想要看到的文件更改(主要是 Assets 文件夹中的所有内容) .

有人告诉我 BFG Repo Cleaner 在这里可能很方便,我已经阅读了它遵循的一般过程,并同意它在这里似乎是一个不错的选择。但是,我看到的大多数命令示例都与特定文件或超过一定大小的文件等有关提交历史。

实现这一目标的最佳方法是什么,BFG 是最好的方法吗?如果这很重要,我已经进行了一个新的提交,其中只有我想要保留的文件,作为比较的基线。

0 投票
1 回答
1751 浏览

git - 清理 git 存储库 BFG Repo-Cleaner --- 推送后 repo 大小仍然很大

我正在尝试使用 BFG 存储库清洁器清理我的 git 存储库。所以我做了: git clone --mirror https://github.com/FourierFlows/FourierFlows.jl.git 使用 BFG,例如, java -jar bfg-1.13.0.jar --delete-files 'twodturb*.png' FourierFlows.jl.git 然后 cd FourierFlows.jl.git git reflog expire --expire=now --all && git gc --prune=now --aggressive

存储库现在要小得多(1.9MB 与 880MB 相比)。但是当我推迟并稍后git clone --mirror再次尝试时,我仍然得到了我开始时大小的存储库。

但是,如果我将存储库推送到一个空的 git 存储库,然后从那里克隆它,它确实很小。

任何想法为什么会这样?显然不知何故,我并没有告诉 git 放弃存储库中已经存在的文件......

0 投票
1 回答
248 浏览

git-lfs - 如何使用 GIT-LFS 重写 GIT 历史记录以跟踪整个目录

我尝试了很多命令,但它不起作用:

BFG repo 清洁器是否支持它?如果是这样,命令是什么?

0 投票
2 回答
1220 浏览

git - 使用 BFG 清除文件后无法推送到 >2gb 存储库

我不小心将一些应该被忽略的大文件推送到了 git,结果我的 repo 超过了 2gb。我正在尝试使用 BFG 清除一些文件并且已经能够清除大约 400mb 但是在尝试推送时出现以下错误

我在网上读到强制推送可以解决这个问题,但我觉得这可能有风险,--mirror在使用 bfg 删除文件之前,我确实有我的 repo 的备份。

0 投票
1 回答
243 浏览

git - BFG Repo 清洁器 - 将目录的 git 历史记录从存储库 A 移动到存储库 B

我有两个存储库,即。存储库 A 和存储库 B。我正在从存储库 A 移动一个目录,即。dir-to-move 到存储库 B。但我只想保留 git-filter-branch 花费大量时间的那个目录的 git 历史记录(即 dir-to-move )。所以我想使用更快的 BFG Repo 清洁器。但我也想减小 .git 文件夹的大小。所以问题是双重的

  1. 如何使用 BFG Repo 清洁器执行以下命令?

git filter-branch --subdirectory-filter {dir-to-move} -- --all

  1. 运行 BFG Repo 清洁器后如何减小 .git 大小?(现在以 GB 到 MB 为单位)
0 投票
0 回答
130 浏览

git - git filter-branch 和 BFG repo 清洁器创建重复分支

我正在努力将一个 git repo 从一个提供商转移到另一个提供商。作为该过程的一部分,由于历史记录中文件的大小(文件在几个月前被删除但仍然存在于历史记录中),新的 repo 在推送时被拒绝。

我找到了两者git filter-branch,并BFG repo-cleaner作为解决此问题的选项。它们按预期工作,并允许我推送到新的 repo,但我发现任何带有签名的 ref 都task/my-branch被复制到Task/my-branch,我找不到任何可以解释为什么或如何避免这种情况的参考。最坏的情况我可以在移动后手动清理这些,但想更好地了解它发生的原因以及是否有办法阻止它。

使用 BFG 清洁剂采取的步骤

1) git clone --bare ssh://path/to/repo.git

2) cd repo.git

3) git 分支 -a

观察分支,例如task/my-branch

4) 光盘..

5) java -jar bfg.jar --delete-files repo.git

6) git reflog expire --expire=now --all && git gc --prune=now --aggressive

7) git 分支 -a

观察分支,例如task/my-branchANDTask/my-branch

与 git filter-branch 类似的过程

1) git clone --bare ssh://path/to/repo.git

2) cd repo.git

3) git 分支 -a

观察分支,例如task/my-branch

4) git filter-branch -f --prune-empty --tag-name-filter cat --tree-filter 'rm -f -- --all

5) git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

6) git reflog expire --expire=now --all && git gc --prune=now --aggressive

7) git 分支 -a

观察分支,例如task/my-branchANDTask/my-branch

0 投票
1 回答
330 浏览

git - git push --force 失败

我最近对我的仓库进行了一些清理,因为它在历史记录中有一些大文件。我曾使用 BFG 进行清理,并按照此处所述执行了必要的步骤。在执行 git push 以发布更新的更改的最后步骤中,它失败了。错误信息:

一些附加信息:

  1. 我在一个非裸仓库中进行了清理
  2. 我目前在拉取 repo 时遇到了麻烦,因为它已经超过 2G,因此想要清理一些我不小心推送到远程 repo 的图像文件。
  3. 还有其他几个人在使用这个 repo,我想以一种尽量减少对他们工作的干扰的方式进行清理。
  4. 目前,我们所有人都在通过以下命令提取最新的提交并从那里开始工作:

    git clone -b dev https://my/personal/repo.git --depth=1