同步库/项目子库

时间:2020-03-05 18:42:17  来源:igfitidea点击:

我正在与一些使用它的项目一起开发一个库,并且发现自己经常在与项目同时修改库(例如,向库中添加函数并立即在项目中使用它)。
结果,该项目将不再使用该库的先前版本进行编译。

因此,如果我需要回滚更改或者测试项目的先前版本,我想知道在签入时使用了哪个版本的库。
我想我可以手动执行此操作(只需在日志文件中写入版本号即可),但是如果可以自动执行,那将很棒。

解决方案

回答

一种选择是使用单个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属性的版本就如同文件和其他所有内容一样