对于subversion,我应该如何处理供应商目录?

时间:2008-09-23 03:51:00

标签: ruby-on-rails svn capistrano

所以我有一个问题。我检查了我的冷冻宝石和铁轨,即使你不应该这样做。我认为这很容易,反正也不会那么大。好吧,后来我更新了rails并且这样做删除了vendor / rails目录中的所有.svn文件。我听说我真正应该做的事情只是与svn:externals到我的供应商目录。我究竟需要做什么,如果他们不在我的回购中,卡西斯特拉诺仍然会使用我的冷冻宝石?如果它不使用我的冷冻宝石,我怎样才能正确地重新生成这些.svn文件,因为这个再次发生。

谢谢!

4 个答案:

答案 0 :(得分:4)

就个人而言,我偏爱使用Piston来管理供应商目录。

答案 1 :(得分:3)

  1. 要恢复已删除的.svn目录,只需运行svn update即可。他们会回来的。

  2. 我只是检查导出的宝石。我在gem unpack <gemname>目录中使用了vendor/gems,在那里使用了svn addcommit

  3. vendor/pluginsvendor/rails中的任何内容我使用活塞进行跟踪。例如,这就是我在那里获得rails的方式:

    % piston import http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2/ vendor/rails

  4. 使活塞使用gem install piston

    注意我将不得不找到一个不同的/更好的解决方案来替换活塞,因为Rails继续使用git并且可能不会更新subversion存储库。

答案 2 :(得分:2)

我必须提出反对svn:externals的建议有两个原因

  1. 您可能正在部署到无法访问这些svn服务的环境中

  2. 当您想要部署并且那些svn外部关闭时会发生什么?

  3. 我的建议是使用活塞或宝石解压缩并管理供应商树中的生产依赖性。

答案 3 :(得分:1)

免责声明:我不知道Ruby / Rails,所以我不知道冻结的宝石是什么(虽然我认为它们是编译的二进制文件或标记化的源代码),但我很了解Subversion。

.svn目录只保存Subversion“簿记”。那里什么都没有,这是不可恢复的。

删除.svn文件根本不是问题。如果缺少.svn目录的目录位于subversion工作副本中的目录树内(您执行结帐的目录),只需删除这些目录,执行svn更新,然后重新创建它们。

如果整个树都缺少.svn文件,请删除整个树并再次执行svn checkout。

svn:externals就像一个“象征性的链接”。您有项目A和项目B,它使用项目A.您要做的是添加一个引用项目A的库目录的svn:external属性,因此每当您签出项目B时,它将自动从项目A中放入库目录在里面。例如,我经常有一个名为“thirdparty”的目录,它保存来自其他地方的库的外部,包括evn:对subversion中其他项目的外部引用。

解决这类版本问题的一个技巧是为库(或冻结的宝石)提供单独的发布目录,在需要它们的项目中,使用对相应发行目录的svn:external引用。随着新版本的发布,只需将svn:external属性更改为指向新版本目录和svn update。