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