【发布时间】:2013-08-08 09:59:57
【问题描述】:
我正在尝试找出最好/最干净的方法来在项目中的 Atmosphere 上分叉现有包。我遇到过一些情况,现有的包需要一些修改,我不得不分叉它。
据我所知,存在以下选项。不幸的是,所有这些都有自己的问题,我还没有找到完美的解决方案。我将以meteor-router为例:
1。只需将包文件复制到您的包文件夹中
步骤:
- 删除
packages/router/.git/ - 编辑
packages/.gitignore并删除“路由器”行 - 从您的
smart.json中删除路由器 - 将
packages/router添加到您的项目存储库并提交 - 现在进行更改(这样您的初始提交是一个干净的版本,您可以自己计算出您所做的更改)
优点:
- 易于实现和理解
- 您所依赖的所有代码都可以在您的项目存储库中找到
缺点:
- 您会丢失所有原始存储库历史记录
- 很难更新到新版本
- 很难将您的更改贡献回原始项目
除了最简单的包外,不要考虑这个!
2。在github上fork,然后...
要在 github 上 fork 一个包,您可以检查您的 smart.lock 文件以查看正在使用的存储库。转到该存储库的 github 页面并将其分叉。
接下来,您有三个选择:
2a。将其添加为 git 子模块
更多关于 git 子模块的信息:http://git-scm.com/book/en/Git-Tools-Submodules
步骤:
- 请参阅上面的链接了解如何初始化/创建/更新子模块
- 从您的
smart.json中删除包
优点:
- 子模块版本已连接到您的项目
- 更改立即生效
缺点:
- 所有开发者需要在第一次运行
git submodule init和update更新 - 编辑结帐时必须注意子模块的问题
- 阅读有关子模块的其他问题
2b。编辑您项目的 smart.json 以使用您的版本
步骤:
- 在您的
smart.json中,找到"router": {}并在空的{}中添加"git": "https://github.com/USER/meteor-router.git"。 - (可选)添加
"branch"或"tag"。
优点:
- 您仍然可以使用 Meteorite 管理您的外部包
- 将自动为其他开发人员和部署环境工作
缺点:
- packages 文件夹中的代码不可编辑,因为它不是 git 存储库
- Meteorite 不会在您每次运行时自动更新到最新版本
(建议的 Meteorite 改进:允许以可编辑的形式安装包,如 Python 的 pip 允许使用 '-e' 参数)
2c。克隆到您的项目之外并将"path" 添加到smart.json
步骤:
- 将包克隆到项目之外的地方
- 与 2b 类似,将
"path"添加到您的smart.json以将 Meteorite 指向您当地的结账处
优点:
- 您可以随意编辑包,Meteor 会自动获取更改。
缺点:
- 如果您提交此
smart.json,您很可能会破坏所有其他开发/部署环境...
您使用哪种方法?您如何解决该方法的缺点?
我可能错过了这些解决方案的一些问题。
【问题讨论】:
-
感谢您的指导!既然 Meteor 有自己的包存储库,关于如何做到这一点的任何更新?谢谢!
-
这是 Meteor DX 体验中最糟糕的部分。 Npm 在这方面做得非常出色。