我已经克隆了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检查,在darcs-1存储库的情况下,它不会打印darcs-2。)此外,我还发现了一个看起来像上游存储库的language-c存储库:http://hub.darcs.net/visq/language-c,其中有一些更新的更改。当然,这也是一个darcs-2回购。
我可以进行到darcs-2的转换,但我读到它是不可重现的,并且不能在不同运行转换的结果之间交换补丁。
导出darcs-1存储库中的最后几个补丁并将它们应用于darcs-2存储库(http://hub.darcs.net/visq/language-c的克隆)的最简单方法是什么?
(关于http://code.haskell.org/language-c和http://hub.darcs.net/visq/language-c中的哪一个应该被认为是上游的问题,请参见https://mail.haskell.org/pipermail/haskell-cafe/2015-December/122545.html,我希望很快就能得到明确的答案。)
发布于 2015-12-21 05:09:45
在实践中,可重复转换的情况比darcs convert提供的可怕警告要复杂得多,而且没有那么糟糕。
该警告背后的主要问题是,如果两个存储库具有相同的补丁,但顺序不同,则可能会得到不兼容的补丁。
如果您在同一存储库中连续两次重新运行转换,您将得到相同的结果。实际上,只要你用完全相同的补丁,以相同的顺序在两个存储库上运行它,你就会得到相同的结果。
此外,转换实际上是“前缀关闭”的:您可以有两个存储库,一个以相同的补丁开始,另一个以相同的顺序,并在结束时有一些额外的补丁。然后,转换这两个存储库将再次生成兼容的存储库。
因此,在您的场景中,您需要做的主要工作是重新生成原始转换。
这很可能是从code.haskell.org代码库中完成的,而补丁的顺序仍然与当时相同-他们很少在上游代码库中改变顺序,因为只有当有人删除补丁时才会发生这种情况。
因此,如果您重新获取code.haskell.org代码库,将您的补丁放入其中,然后进行转换,您可能会发现一切正常。然后,您可以对新的hub.darcs.net代码库执行get,将额外转换的补丁放入其中,并检查它们看起来是否正常。为了安全起见,运行darcs check。
https://stackoverflow.com/questions/34384301
复制相似问题