我正在尝试找出在项目中在 Atmosphere 上分叉现有包的最佳/最干净的方法。我遇到过一些情况,现有的包需要一些修改,我被迫分叉它。
据我所知,存在以下选项。不幸的是,所有这些都有自己的问题,我还没有找到完美的解决方案。我将meteor-router
用作示例:
1. 只需将包文件复制到您的包文件夹中
脚步:
- 消除
packages/router/.git/
- 编辑
packages/.gitignore
并删除“路由器”行 - 从您的路由器中删除
smart.json
- 添加
packages/router
到您的项目存储库并提交 - 现在进行更改(这样您的初始提交是一个干净的版本,您可以自己计算出您所做的更改)
好处:
- 易于实现和理解
- 您依赖的所有代码都可以在您的项目存储库中找到
缺点:
- 您丢失了所有原始存储库历史记录
- 很难更新到新版本
- 很难将您的更改贡献回原始项目
除了最简单的软件包外,甚至不要考虑这个!
2.在github上fork,然后...
要在 github 上分叉一个包,您可以检查您的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 来管理你的外部包
- 将自动为其他开发人员和部署环境工作
缺点:
- 包文件夹中的代码不可编辑,因为它不是 git 存储库
- Meteorite 不会在您每次运行时自动更新到最新版本
(建议的 Meteorite 改进:允许以可编辑的形式安装包,例如 Python 的 pip 允许使用 '-e' 参数)
2c。在您的项目之外克隆并添加"path"
到smart.json
脚步:
- 将包克隆到项目之外的地方
- 与 2b 类似,在您的 to point Meteorite 中添加一个
"path"
到您smart.json
的本地结帐
好处:
- 您可以随意编辑包,Meteor 会自动获取更改。
缺点:
- 如果你提交这个
smart.json
,你很可能会破坏所有其他开发/部署环境......
您使用哪种方法?您如何解决该方法的缺点?
我可能错过了这些解决方案的一些问题。