3

在使用 bazaar(和启动板)几年后,我们计划将FEniCS 项目迁移到 Git。我们对此迁移有一些要求,这使得它相当复杂:

  1. 我们希望保留历史记录,但对其进行过滤并从历史记录中删除(现在已过时的)文件列表以减小存储库大小。
  2. 有来自许多独立贡献者的许多特性分支(目前来自 25 个不同人的 76 个分支)。我们想为他们提供一个简单的迁移路径(可由 git 新手完成),以便将他们的分支放入转换和过滤的存储库中。

有一个解决方案1。

我以DOLFIN为例:

导入 bzr 主干:

git init dolfin && cd dolfin
(cd path/to/bzr/trunk; bzr fast-export --plain) | git fast-import

过滤历史:

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch ${files_to_strip}" --prune-empty

2也有解决方案

它需要为上述bzr fast-export( dolfin.marks.bzr) 和git fast-import( dolfin.marks.git) 步骤导出标记文件。我们可以将这些提供给贡献者,他们可以像这样导入他们的特性分支:

(cd path/to/bzr/branch; bzr fast-export --marks=path/to/dolfin.marks.bzr --git-branch=$(bzr nick)) | \
git fast-import --import-marks=path/to/dolfin.marks.git --export-marks=path/to/dolfin.marks.git

然而,当我们过滤分支时,这个秘诀就失效了,因为这个操作使所有主干提交的 SHA1 哈希无效,因此标记文件也无效。

但是对于 1.和2没有解决方案。

所以问题是:是否有可靠地满足要求 1. 和 2. 的配方

请注意,理想情况下,这也应该适用于复杂情况,例如已将主干重新合并(甚至多次)的功能分支:应该正确识别来自主干的这些合并的父级(就像它们在 2. 中一样)。

4

1 回答 1

1

不幸的是,目前无法使用标记文件对 1 和 2 执行此操作。

如果您忽略标记文件(只是不生成它们),让用户进行完全转换并确保过滤对所有用户一致发生,那么您最终应该得到相同的 SHA1,因此到处都有相同的公共历史记录。

于 2013-09-10T22:22:32.353 回答