2011-01-26 86 views
2

我正在为Plastic SCM/Git编写一个快速导出/快速导入套件,我发现了一些问题。git快速导入提交订单

正如我从documentation读:

这种设计允许一个前端程序 处理的同时 分支数量不受限制,在顺序生成 提交他们是 可以从源数据

但是,实现“导出器”,我发现你不能引用尚未创建的提交。例如,假设你首先引入合并的提交目标,而不是源代码,那么你只需在那里引用源代码,但它不起作用。

所以,据我所知,“从源头获取顺序生成提交”这句话根本就是错误的,git fast-import确实需要按顺序提供提交,并且引用只能存在于对象中介绍之前。

它是正确的吗?

谢谢。

+0

后来我发现1.7版本之前出现了一个令cset数字溢出的bug。这意味着如果您的cset编号太大,它会在“标记输出”上溢出。在Git 1.7后修复。 – pablo 2011-05-26 10:49:01

回答

1

是的,git-fast-import需要按照从最旧到最新的顺序查看每个分支的提交。您从文档中引用的陈述有些模棱两可,因为“它们可从源数据获得的顺序”实际上必须增加每个分支的时间顺序。

我认为该声明意味着您不必按照严格的时间顺序在所有分支中提交所有提交。相反,就像通常使用Git一样,每个提交必须在创建所有祖先之后创建。

这种方法在如何导入提交方面仍然存在一些灵活性。我写了一个导入程序(对于一个旧的专有源代码控制系统),它分别处理每个分支的整体(当然是从最旧到最新)。 Git将不同分支之间的共同祖先进行匹配,并且制作了一个非常合理的层次结构树,因为每个分支中共同祖先的SHA1哈希值是相同的。