关于颠覆,我应该如何处理供应商目录?
Posted
技术标签:
【中文标题】关于颠覆,我应该如何处理供应商目录?【英文标题】:What should I do with the vendor directory with respect to subversion? 【发布时间】:2010-09-12 06:02:18 【问题描述】:所以我有一个问题。我检查了我的冷冻宝石和铁轨,即使你不应该这样做。我认为这很容易,而且不会有那么大的交易。好吧,后来我更新了 rails 并删除了 vendor/rails 目录中的所有 .svn 文件。我听说我真正应该做的只是对我的供应商目录中的 svn:externals 做一些事情。我到底需要做什么,如果我的仓库中没有我的冷冻宝石,capistrano 还会使用它们吗?如果它不会使用我冻结的 gem,我该如何正确地重新生成那些 .svn 文件,因为这会再次发生。
谢谢!
【问题讨论】:
【参考方案1】:就个人而言,我偏向于使用Piston 来管理供应商目录。
【讨论】:
【参考方案2】:要恢复已删除的 .svn
目录,只需运行 svn update
。他们会回来的。
我只是签入导出的 gem。我在vendor/gems
目录中使用gem unpack <gemname>
,从那里使用svn add
和commit
。
vendor/plugins
或 vendor/rails
中的任何内容我都使用活塞进行跟踪。例如,这就是我在那里获取轨道的方式:
% piston import http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2/ vendor/rails
要获得活塞,请使用gem install piston
。
请注意,随着 Rails 继续使用 git 并且可能不会更新 subversion 存储库,我将不得不找到一个不同/更好的解决方案来替换活塞。
【讨论】:
我可以在窗户上安装活塞吗?我的颠覆是在 Windows 上。【参考方案3】:我不得不反对 svn:externals 有两个原因
您可能正在部署到无法访问那些 svn 服务的环境中
当您要部署并且那些 svn external 已关闭时会发生什么?
我的建议是使用活塞或宝石解包并管理供应商树中的生产依赖关系。
【讨论】:
【参考方案4】:免责声明:我不了解 Ruby/Rails,所以我不知道什么是冻结的 gem(尽管我假设它们是编译的二进制文件或标记化的源代码),但我很了解 Subversion。
.svn 目录只保存 Subversion 的“簿记”。里面没有什么是不可恢复的。
删除 .svn 文件根本不是问题。如果缺少 .svn 目录的目录位于 subversion 工作副本的目录树中的某个位置(您签出到的目录),只需删除这些目录,执行 svn 更新,它们就会被重新创建。
如果整棵树都缺少 .svn 文件,请删除整棵树并再次执行 svn 签出。
svn:externals 就像一个“符号链接”。你有项目 A 和项目 B,它使用项目 A。你所做的是添加一个引用项目 A 的库目录的 svn:external 属性,所以每当你签出项目 B 时,它会自动从项目 A 中放置库目录在里面。例如,我经常有一个名为“thirdparty”的目录,其中包含来自其他地方的库的外部文件,包括 evn:external 对 subversion 中其他项目的引用。
解决此类版本问题的一个技巧是为库(或冻结的 gem)设置单独的发布目录,并在需要它们的项目中使用 svn:external 对适当发布目录的引用。随着新版本的发布,只需将 svn:external 属性更改为指向新的发布目录和 svn update。
【讨论】:
以上是关于关于颠覆,我应该如何处理供应商目录?的主要内容,如果未能解决你的问题,请参考以下文章