我使用 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 prune
,git reflog expire --expire=now --all && git gc --prune=now --aggressive
这是 BFG 推荐的,但仍然有 80 Mb。
UPD:现在无法重现 40 Mb 回购:/ BFG 清理后为 80,复制笔记后为 86