3

我已将 https://hackage.haskell.org/package/language-c-0.4.7中列出的存储库克隆为上游存储库,即:http ://code.haskell.org/language-c 。

我在其中做了一些修改和修复,并将它们记录为补丁。

但后来我发现,如果我想在 http://hub.darcs.net上发布它们,我需要一个 darcs-2 存储库,而我用于克隆的初始存储库出乎意料地是一个 darcs-1 存储库。(可以检查,在回购的情况下darcs show repo不会打印。)此外,我还发现了一个看起来像上游回购的回购:http: //hub.darcs.net/visq/language- c,还有一些新的变化。当然,它也是一个 darcs-2 存储库。darcs-2darcs-1language-c

我可以转换到 darcs-2,但我读到它是不可重现的,并且不能在转换的不同运行结果之间交换补丁。

在 darcs-1 存储库中导出我的最后几个补丁并将它们应用到 darcs-2 存储库( http://hub.darcs.net/visq/language-c的克隆)中的最简单方法是什么?

(至于http://code.haskell.org/language-chttp://hub.darcs.net/visq/language-c哪个应该被认为是上游的问题,请参见 https://mail. haskell.org/pipermail/haskell-cafe/2015-December/122545.html,我希望很快能得到明确的答案。)

4

1 回答 1

2

在实践中,可重现转换的情况比darcs convert.

警告的主要问题是,如果两个存储库具有相同的补丁但顺序不同,您可能会得到不兼容的补丁。

如果您在同一存储库上连续两次重新运行转换,您将获得相同的结果。确实,只要您在两个具有完全相同补丁的存储库上以相同的顺序运行它,您就会得到相同的结果。

此外,转换实际上是“前缀关闭”:您可以有两个存储库,一个以与另一个相同的补丁开始,以相同的顺序,最后还有一些额外的补丁。然后转换这两个存储库将再次生成兼容的存储库。

因此,在您的场景中,您需要做的主要事情是重现原始转换。

很可能它是从code.haskell.orgrepo 完成的,并且那里的补丁仍然与当时的顺序相同 - 他们很少更改上游 repos 中的顺序,因为它通常只在有人删除补丁时才会发生。

因此,如果您重新获取code.haskell.orgrepo,将补丁放入其中,然后进行转换,您可能会发现一切正常。然后,您可以获取新的hub.darcs.netrepo,将额外的转换补丁拉入其中,并检查它们是否正常。darcs check为了安全起见,运行 a 。

于 2015-12-20T21:09:45.130 回答