并行创建git历史,blob和树对象

时间:2017-09-16 08:09:02

标签: multithreading git migration gitlab clearcase

我们公司决定将我们的源代码从clearcase迁移到git,这很棒: - )

我知道clearcase和git是完全不同的源代码管理系统。 但是我们开发人员只有一个包含完整历史记录的SCM。

我的同事找到了以下工具,它将我们的clearcase历史记录导入git:https://github.com/charleso/git-cc

不幸的是,我们的代码有超过46000个源代码文件,导入的历史记录超过10年。

我分析了这个工具,在我看来有两个瓶颈。 第一个是从clearcae服务器导入文件。通过在多个线程中执行此操作很容易解决。 第二个是git-cc本身的工作流程。

  1. 通过cleartool lshistory获取master-branch的历史
  2. 创建文件的更改集并将它们分组到comit的
  3. 从cc服务器获取指定版本的文件并复制到工作目录
  4. git add。
  5. git commit
  6. 选择下一组并再次从3.
  7. 开始

    我认为我可以通过使用低级git命令和使用多个线程来改进它。

    每个comit-group从服务器查询其更改并在git数据库中创建blob对象,因此可以在多个线程中运行多个组。 另外我有一个线程,它从刚刚创建的blob对象创建git中的历史记录。

    现在我的问题是,这对你有意义还是你认为我是天真的?

    我忘记了任何git锁定机制吗?

    你还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

使用多个线程在Git仓库的同一分支中导入提交是有风险的(除非,如你所说,你创建" blob对象",这是你可以重放的补丁)。

但是可以在不同分支上使用多个线程进行提交:您创建不同的repo,每个repo用于分支导入,然后您可以将这些repos获取到一个公共repo中并使用git replace or grafts重新附加它们。

但请记住:每个Git仓库都是一个组件,所以如果你的巨型ClearCase Vob包含多个组件(文件组),最好将它们分成多个Git仓库,而不是试图创建一个巨大的Git仓库。登记/> 我在" ClearCase to Git migration"。

中详述了这一点