Jan*_*bry 5 version-control mercurial vendor-branch mercurial-subrepos
我想在Mercurial中存储一个项目,该项目包含来自Git和SVN存储库的外部代码(可由我修改).在SVN中,我会用供应商分支解决这个问题并复制代码,但我明白在Mercurial中最好为不同的项目提供不同的存储库,并在需要时在它们之间进行拉取.
项目布局如下:
- externalLibraryA [comes from a SVN repo] - ...with some extra files from me - externalLibraryB [comes from a SVN repo] - ...with some extra files from me - externalPluginForExternalLibraryB [comes from a Git repo]
在Subversion中,我将创建vendordir和trunkdir,首先复制所有外部库vendor,然后在正确的位置复制trunk.(我认为)我也可以在Mercurial中使用子存储库执行此操作,但这是最好的方法吗?
我尝试为外部库设置不同的存储库,但似乎我无法将其拉入主存储库externalLibraryARepo的externalLibraryA目录中?它进入主目录,这不是我想要的.我还可以创建一个Mercurial镜像存储库并将其作为子存储库包含在我的主存储库中,但随后该子目录中的更改将转到镜像存储库,而我希望它们保留在主存储库中.
我可能只是将其存储在一个存储库中 - 请注意,在您提供的链接中,他们最终使用其构建系统将不同存储库的二进制输出汇集在一起。我不清楚他们的理由。
如果您试图解决的根本问题是如何以干净的方式更新外部,我可能会使用匿名分支。
即,将外部库添加到您的项目中,以及您的修改。确保它有效。使用ExternalA-v1.0 进行标记。破解你的实际项目。现在,ExternalA, Inc. 推出了他们的产品的新版本。将您的存储库更新为ExternalA-v1.0 标签。导入他们的新版本并在上面应用您的修改。犯罪。现在您有两个头:一个包含最新版本的代码(适用于ExternalA-v1.0),另一个包含最新版本的ExternalA(可能不适用于您的代码)。然后你将两者合并并协调。再次标记,现在使用ExternalA-v2.0。根据需要重复。
您仍然可以将外部存储库保存在单独的存储库中,但我认为使用这些外部存储库的项目不需要始终与那里的更改保持同步 - 看起来供应商分支的全部意义在于具有某种隔离点受抚养人和受抚养人之间。当然,将更改从 externalA 项目移动到正在使用的项目将是一项手动操作(嗯,一个副本,就像在 SVN 中一样)。
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |