问题标签 [git-rewrite-history]

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 回答
1976 浏览

windows - Git:查找大型包文件的最大文件

我发现了一些脚本可以在 mac 上显示 git pack 文件中的最大文件,但我不清楚这些是否适用于 Windows。我的直觉是他们不会,因为它明确表示在 Mac 上运行。

也就是说,它似乎正在运行......永远。

问题:

  1. 这里的脚本可以在windows上工作吗
  2. 如果没有,什么会起作用?
  3. 如果没有,mac/windows 上的 repo 有什么不同
0 投票
2 回答
12187 浏览

git-rewrite-history - BFG 删除多个文件夹

我发现 BFG 比原来的 git-filter-branch 快得多。

我们有多个 svn 存储库可以移动到更多的 git 存储库,这意味着一些存储库文件夹合并和拆分。在此过程中,我需要删除一组根文件夹,并且我想将它们删除到整个历史记录中。

我尝试使用 BFG --delete-folders并且它适用于单个文件夹,但我没有找到删除多个文件夹的方法。甚至可能吗?或者我应该循环调用 BFG 多少次,因为我有文件夹要删除?

谢谢你的帮助。

0 投票
1 回答
416 浏览

git - git filter-branch --tree-filter 给我留下了 2x 提交对象

我这样做了:

基本上修复了一些行尾问题。(大约 793 个提交被重写)。然后我意识到,嘿,我不妨将制表符转换为 4 个空格。所以我这样做了:

现在我正在浏览 1594 个提交对象(添加了一些新对象)。

显然我的整棵老树还在 git repo 的某个地方?如果是这样,我该如何摆脱它以及如何检查它是否消失了?我只想保留重写的“原始”约 800 次提交,仅此而已。

0 投票
1 回答
1831 浏览

git - 正确并行化 git filter-branch

我有一个带有大量分支的存储库,并且“git filter-branch ... -- --all”逐渐减慢(大约 400,000 次提交,大约运行 7 天)。但是单个分支上的“git filter-branch”可以显着提升性能(大约 5 天)。

使用以下算法在大量分支上并行化“过滤器分支”是否正确?

  1. 对于 bx (B1..Bn) 执行: git clone --bare -b bx repo.orig repo.bx
  2. 在 repo.bx 上并行化: git filter-branch --index-filter ... -- HEAD
  3. git init --bare repo.new
  4. 对于 bx (B1..Bn) 执行:cd repo.bx;git push repo.new HEAD:bx

问候,格特

0 投票
0 回答
623 浏览

git - 与来自 git ls-files 的多个文件一起使用时,git filter-branch 确实会失败

我试图将一些带有历史记录的文件从一个存储库移动到另一个存储库。有很多话题都在讨论这个问题,但我遇到了一些我还没有看到的问题。

所以我做的步骤是:

旨在保留仅与这两个文件相关的历史记录并将它们移动到另一个存储库。但是,我遇到了以下问题:

重写 6768c299b2b25754a558336e025ce92576c954f2 (1/200)/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-filter-branch: line 329: CMakeLists.txt: command not found ....

奇怪的是,我可以一个一个地删除文件,例如:

我还在虚拟存储库(只有几个文件)上尝试了这个,一切正常!所以它在现实生活中不起作用,也许与输出的长度有点关系git ls-files

更新: 我一直在寻找解决方案,我想知道输出应该是什么git ls-files?我列出了带有换行符的文件(每行 1 个文件),而似乎git rm应该在一行中有文件,例如:

这会是个问题吗?

更新2:

我遵循这个解决方案来实现目标,一切正常。

0 投票
2 回答
3595 浏览

git - 无效的作者/提交者行 - 电子邮件前缺少空格

我有一个使用git-remote-bzrbzr存储库克隆的git存储库,如下所示:经过数百次提交后,我执行了所有bzr提交,但出现以下错误:git clone bzr::/repo new-repogit fsck

提交 41bf5 中的错误:无效的作者/提交者行 - 电子邮件前缺少空格

当我检查这些修订时,git cat-file -p 41bf5我确实可以看到作者姓名和电子邮件没有用空格分隔。

如何为所有错误提交添加这个缺失的空间?

我可以完全访问服务器上的存储库,因此我可以毫无问题地重写历史记录。修改后,代码的用户将不得不重新克隆存储库。我已经尝试过以下帖子中提出的解决方案但没有成功:

0 投票
2 回答
687 浏览

git - 以增量方式使用过滤器分支的任何方式

有没有办法在分支上以增量方式使用过滤器分支?

大致这样说(但这实际上不起作用):

0 投票
2 回答
2016 浏览

git - 如何重写 Git 历史记录以使所有文件都在子目录中?

我想将多个 Git 存储库(比如说 repoA 和 repoB)合并到一个新的存储库中。新存储库 (repoNew) 应在单独的子目录中包含每个 repoA 和 repoB。由于到目前为止我只在本地工作,所以我可以对存储库做任何我想做的事情。

在这种情况下,标准方法似乎是使用git filter-branch重写每个 repoA 和 repoB 的历史记录,使其看起来好像它们一直在子文件夹中,然后将它们合并到 repoNew 中。

第一步是困扰我的事情。我很清楚这样的答案,例如如何重写历史记录,以便所有文件,除了我已经移动的文件,都在子目录中?(Dan Moulding 的回答),这正是我想要的。

他提出了一些大致如下的建议:

结果应该是下面的文件夹结构<repoA-GIT-base>现在应该在<repoA-GIT-base>/repoA. 然而,这种情况并非如此。上述命令在不同的提交中随机失败,并显示类似“mv: cannot move 'src' into 'repoA/src'

如上所述重写历史记录时,如何避免这些错误的提交?

编辑:

您应该考虑将 排除.gitignore在移动之外,如下所示:

该命令似乎仍然随机失败。我尝试了几次,每次不同的提交都发生了“无法移动”的失败。我观察到,当我排除.gitignore所有提交时,通过所有提交的机会似乎增加了。我能够在所有三个不同的存储库上连续执行迁移而不会失败。当我为了好玩而再次尝试使用其中一个存储库的另一个一次性副本时,它又失败了。

由于据称使用某些文件的过程,有时我也很难删除我的一次性副本,这个问题可能与 Windows 7 文件访问处理有关,但我无法在那里做出严肃的假设。

继续尝试直到成功当然是荒谬的,并且可能不适用于具有大量提交的存储库(我的只有大约 30 个)。

信息:我在 Windows 7 64 位企业版上使用 git-bash 和 git 版本 1.7.10.msysgit.1。

0 投票
2 回答
82 浏览

git - git :历史中没有提交的文件,如何解释?

我正在将许多 svn 存储库迁移到许多其他 git 存储库。那些 svn 存储库有超过 113000 次提交。我最终得到了非常大的 git repos,我喜欢缩小它们。

我使用了一个脚本来找出最大的对象。这些对象不再在任何分支中,我想知道它们与哪个提交相关。我找不到任何???

我使用了命令

但是什么都没有返回。有人能解释一下为什么这个文件没有关联的提交吗?如果确实如此,如何删除所有未链接到任何提交的文件?

PS:迁移过程非常繁重,我正在使用bfg(这太棒了)来删除一些已知的未使用文件夹。

0 投票
3 回答
1424 浏览

python - Git tree-filter 在提交时运行 python 脚本

早些时候有人问过我这个问题,#git但由于它相当重要,我会在这里发布。我想filter-branch在 repo 上运行 a 以使用 python 脚本在数百次提交中修改(数千个)文件。我clean.py在 repo 目录中使用以下命令调用脚本:

Clean.py看起来像这样,并将修改路径中的所有文件(即files/*/*/**):

运行命令后,将以下内容输出到终端:

python 脚本成功执行并正确修改了文件,但filter-branch没有完成修复提交。似乎存在权限问题,但是我无法以提升的权限运行它。我尝试使用 git v1.8 和 v1.9 在 win7、win8 和 ubuntu 上运行过滤器分支。
编辑该脚本在 Centros 上的工作方式与git1.7.1

files/*/*/**目标是在内容完成与数据库同步后减小 CDN 存储库的大小(接近 1GB) 。用于重写的项目目标 repo
的源代码