同步库/项目子库
我正在与一些使用它的项目一起开发一个库,并且发现自己经常在与项目同时修改库(例如,向库中添加函数并立即在项目中使用它)。
结果,该项目将不再使用该库的先前版本进行编译。
因此,如果我需要回滚更改或者测试项目的先前版本,我想知道在签入时使用了哪个版本的库。
我想我可以手动执行此操作(只需在日志文件中写入版本号即可),但是如果可以自动执行,那将很棒。
解决方案
回答
一种选择是使用单个Subversion存储库,并同时执行影响库和项目的签入更改。这样一来,我们就知道我们所从事的项目的任何修订都需要库的相同修订。
回答
我想如果我要这样做,我会使用标签。编写一个脚本,在每次升级库并将其在项目中使用时,使用相同的ID标记两个存储库将非常容易。然后,如果我们需要回滚到以前的版本,则只需查看其最新标记是什么,然后将库回滚到该版本即可。
更新:抱歉,我已经在Mercurial住了一段时间,忘了Subversion不直接支持标记。假设我们使用通常的subversion目录结构
/ /trunk /tags /branches
你只需要跑
svn copy trunk/ tags/TagName
在两个存储库上,使用相同的标签名称。 Subversion非常适合智能副本,因此我们不必担心磁盘空间。
回答
一个可能对我们有用的选项是使用对库的svn:external引用。标记项目时,我们可以执行以下两项操作之一:
- 更新svn:external以引用该库的特定修订版;或者
- 更新svn:external以引用我们在库上创建的新标签。
由于svn:external元数据将成为主项目的提交历史记录的一部分,因此我们始终可以在主项目上获取标记,并且该标记将引用库的正确版本。我们做到了,并且效果很好。当我们要冻结要准备发布的库代码版本时,它也很方便。
回答
我们可能会发现活塞提供了解决方案
它主要用于在Rails插件上导入ruby,但我不明白为什么它不适用于任何Subversion存储库。
基本上它是这样做的:
- svn导出远程路径的最新版本
- 将这些文件提交到本地svn中,就好像它们是本地文件一样
- 以有关远程路径和修订版的svn属性形式添加元数据
这意味着我们可以保留对远程回购特定版本的引用,而不必像使用svn external一样不断对其进行更新。
如果要将库的本地副本更新为最新的远程版本,只需执行"活塞更新"。
我们还应该能够查看更新的历史记录,只需查看元数据svn属性的版本就如同文件和其他所有内容一样