【发布时间】:2010-11-12 08:15:27
【问题描述】:
我想在项目 B 中重用项目 A 中的代码(都在单独的存储库中),所以我想将几个文件从原始项目存储库 A 移动到公共存储库 C,供以下人员使用项目 B.(由 Maven 等管理的依赖项)
我可以使用转换扩展名和一些附加脚本(以发现所述文件的完整历史记录)将我想要从 A 移动的文件提取到他们自己的“过滤”存储库 F 中。
在这个阶段,我可以: a) 将 F 拉入 C,合并并提交,或 b) 将所有 F 更改导出为补丁,然后将它们导入 C 然而,这两种方法都会导致存储库 C,其变更集不是按时间顺序排列的。我看到 F 的历史附加在 C 的历史之前。
是否可以“合并”两个存储库以使变更集按时间顺序排列?
我有执行此操作的脚本 - 但到目前为止,每次我从 A 移动不同的集合 F 时,我都必须完全重建 C。(通过将所有 C 和 F 作为补丁导出,创建一个新 C,然后导入所有补丁按时间顺序排列)。
谢谢!
【问题讨论】:
-
我认为我们需要一些示例来说明您如何做到这一点。您不应该像那样定期重建您的存储库。
-
完全是 Lasse - 这很痛苦,这就是为什么我正在寻找更好/更合适的解决方案。至于我是怎么做的,我将 C anf F 中的所有变更集导出到一组 .patch 文件中,使用 perl 脚本根据标题 cmets 中的日期戳确定这些变更集的时间顺序,然后初始化一个新的C,并按此顺序导入所有补丁。然后我必须在 Google Code 中重置 C,并将新的 C 推送到 Google。
-
为什么按时间顺序排列很重要?如果只是出于审美目的,我会说只是咬紧牙关,采取一种直接的方法。如果不是,如果 F(作为 A 的一部分)和 C 到现在为止已经独立进化,你怎么能确定按时间顺序排列的结果是你想要的呢?你是否例如希望能够在特定时间检查 C(和 F),并期望一切都是一致的?我的直觉反应是,即使盲目的按时间顺序排列确实能让你大部分时间到达那里,你也需要人工干预。
-
感谢您的回复。我希望更改集按时间顺序排列,以便我可以看到我的两个合并的代码集在特定时间点是如何看待的——如果我在同一个存储库中开发它们,他们会在那时看到它们。我刚刚尝试将这些“F”存储库中的两个合并到“C”中,然后将 C 更新到我知道每个 F 中两个文件的状态的日期 - 导致其中一个文件存在,但另一个文件不存在。
-
"...我是否在同一个存储库中开发了它们。" 但是,这种综合改变的历史观点是否重要到足以解决这个麻烦?例如您是否必须能够查看特定日期的组合代码才能在另一个项目中使用它,或者您只是好奇? :) 我找到了一种(痛苦的,可能是可编写脚本的)在选定日期合并 F 和 C(到第三个分支)的方法,然后使用
--date提交合并以强加时间顺序 - 但值得吗?你能不能简单地将它们拉到不同的分支中,然后合并并声明“合并历史从这里开始”?
标签: mercurial