关于Subversion,我应该如何使用vendor目录?

时间:2020-03-06 14:34:45  来源:igfitidea点击:

所以我有一个问题。即使我们不应该这样做,我还是检查了冰冻的宝石和护栏。我认为这很容易,而且无论如何也没什么大不了的。好吧,后来我更新了rails,这样做删除了vendor / rails目录中的所有.svn文件。我听说我真正应该做的只是与供应商目录中的svn:externals做些事情。我到底需要做什么?如果冻结的宝石不在我的仓库中,capistrano还会继续使用它们吗?如果它不使用冻结的宝石,该如何正确地重新生成这些.svn文件,因为这将再次发生。

谢谢!

解决方案

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

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

.svn目录仅包含Subversion"簿记"。那里没有什么是无法恢复的。

删除.svn文件根本不是问题。如果缺少.svn目录的目录在Subversion工作副本(我们检入到的目录)的目录树中某处,只需删除这些目录,进行svn更新,即可重新创建它们。

如果整棵树都缺少.svn文件,请删除整棵树,然后再次进行svn检出。

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

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

我不得不针对svn:externals提出建议,原因有两个

  • 我们可能正在部署到无法访问这些svn服务的环境中
  • 当我们要部署并且那些svn external关闭时会发生什么?

我的建议是使用活塞或者宝石开箱并在供应商树中管理生产依赖性。

  • 要恢复已删除的.svn目录,只需运行svn update。他们会回来的。
  • 我只是检查出口的宝石。我在vendor / gems目录中使用gem unpack <gemname>,然后从那里使用svn addcommit
  • 我使用活塞跟踪的"供应商/插件"或者"供应商/轨道"中的任何内容。例如,这就是我在那里获得滑轨的方式:%活塞导入http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2/ vendor / rails

要获取活塞,请使用"宝石安装活塞"。

注意,由于Rails继续使用git且可能不会更新subversion存储库,因此我将不得不找到其他更好的解决方案来替换活塞。